研究や臨床試験において、「複数のグループ(多群)」を比較し、さらに「複数の結果(多変量・マルチプルエンドポイント)」を同時に評価したいケースは多々ある。
個別に検定を繰り返すと第1種過誤($\alpha$ エラー)が膨れ上がるため、多重比較の制御は必須である。しかしここで、古典的な「まずOmnibus検定(MANOVAやANOVA)を行い、それが有意であった場合のみ事後検定に進む」という手続きに固執する必要はない。最初から特定のグループ間や変数間の比較が関心事であるならば、Omnibus検定の結果に関わらず、直接目的の多重比較に進み、全体としてのエラー率を適切に制御するのが現代的なアプローチである。
本記事では、中級者向けに「エンドポイントの型(連続量、2値、Time-to-event、反復)」で頭の中を整理しながら、Rでどのパッケージのどの関数を選択すべきかを網羅的に解説する。
連続量(Continuous)エンドポイント
① 単一時点の多変量連続データ
- 理論説明: 複数の連続変数を同時に扱い、グループ間の平均ベクトルを比較する。古典的にはMANOVAのOmnibus検定が先行したが、特定の変数やグループ間の差に関心がある現代的な解析では、最初から各変数に対して多重比較補正(Bonferroni、Holm、あるいはTukey法)を適用してペアワイズ比較を行う。Omnibus検定のp値に一喜一憂する必要はない。
- 具体例: 3種類の治療グループ間における、「収縮期血圧」と「拡張期血圧」の同時比較。
- Rの解決策:
statsパッケージのlm()関数で各連続変数のモデルを構築する。- 事後検証には
emmeansパッケージのemmeans()およびpairs(..., adjust = "holm")(あるいは"bonferroni","tukey")を用い、最初からグループ間のペアワイズ比較を直接実行し、p値を調整する。
② 順序カテゴリカルデータ(連続量の変法)
- 理論説明: 厳密には連続量ではないが、高・中・低などの順序情報を保持する多群比較である。背景にある潜在的な連続変数を仮定する比例オッズモデル(累積ロジスティック回帰)を用いる。ここでも全体検定を挟まず、最初から目的のグループ間比較へと進む。
- 具体例: 4つの疾患ステージ間における、「QOLスコア(5段階評価)」の比較。
- Rの解決策:
MASSパッケージのpolr()関数、またはordinalパッケージのclm()関数で順序ロジスティック回帰モデルを構築する。emmeansパッケージを用いて、各グループの累積確率(type = "response")の差を多重比較補正付きで直接検出する。
2値(Binary / Count)エンドポイント
① 2値(バイナリ)データ
- 理論説明: イベントの有無(Yes/No)を複数のエンドポイントで評価する。変数間の相関を厳密に考慮する場合は多変量一般化線形モデル(MGLM)の枠組みを使用するが、実務上は各エンドポイントに一般化線形モデル(GLM)を適用し、得られた複数のp値に対して全体として一元的な多重比較補正をかけるアプローチが主流である。
- 具体例: 3つの治療法における、「有効(奏効あり/なし)」と「安全(副作用あり/なし)」の同時評価。
- Rの解決策:
stats::glm(..., family = binomial)で各エンドポイントをモデリングする。emmeans::pairs()を適用し、オッズ比(OR)のペアワイズ比較を直接行う。p値はadjust引数(Holm法など)を用いて、全エンドポイント・全グループ間比較を通じて適切に制御する。
② カウントデータ
- 理論説明: 単位時間や一定期間内に発生したイベントの「回数」を比較する。カウントデータの特性(非負性、過分散)を考慮するため、ポアソン分布や負の二項分布を仮定したモデリングを行う。
- 具体例: 3つの介入グループ間における、「年間救急受診回数」や「有害事象の発現回数」の比較。
- Rの解決策:
- 過分散がない場合は
stats::glm(..., family = poisson)を選択する。 - 過分散(分散 > 平均)が存在する場合は、
MASSパッケージのglm.nb()関数で負の二項回帰モデルを構築する。 emmeansを用いて、最初から目的のグループ間における率比(Rate Ratio)の多重比較を実行する。
- 過分散がない場合は
Time-to-event(生存時間)エンドポイント
① 単一イベント(通常の生存時間解析)
- 理論説明: イベント発生までの時間と「打ち切り(Censoring)」を扱う。3群以上の比較において、全体のログランク検定が有意であるかどうかに関わらず、関心のある治療群間のハザード比の比較、あるいはペアワイズのログランク検定へと直接進み、多重性を補正する。
- 具体例: 3つの化学療法グループ間における、「全生存期間(OS)」の比較。
- Rの解決策:
survivalパッケージのcoxph(Surv(time, status) ~ group)でハザード比を算出する。- ペアワイズのログランク検定を行う場合は、
survminerパッケージのsurv_pvalue(..., method = "pairwise_logrank")を用いることで、最初から自動的に多重比較補正されたp値を取得できる。
② 競合リスク(Competing Risks)
- 理論説明: 目的とするイベント以外の原因によって、目的イベントの観察が不可能になる状況(例:疾患死を評価したいが、その前に他因死する)を制御する。カプランマイヤー法による全体検定はリスクを過大評価するため回避し、最初からFine-Grayモデルや累積発生率(CIF)の比較において多重比較を行う。
- 具体例: 複数の治療群における、「心臓病による死亡」の比較(「他病死」が競合リスク)。
- Rの解決策:
cmprskパッケージのcrr()関数によるFine-Grayモデルの構築、またはcuminc()関数による累積発生率の推定を行う。- グループ間のペアワイズ比較を行い、得られたp値に対して
p.adjust(..., method = "holm")などを用いて手動で多重性を補正する。
反復測定(Repeated Measures)エンドポイント
同じ被験者から「複数時点」でデータを集める縦断デザインである。被験者内の相関(データの依存性)を正しくハンドリングした上で、目的の時点・グループの比較へダイレクトにアプローチする。
① 反復測定連続量
- 理論説明: 時間経過に伴う連続量の変化を多群間で比較する。欠損値に強く、柔軟な相関構造を扱える線形混合モデル(LMM)が現代のゴールドスタンダードである。「グループ×時間」の交互作用項の全体検定が有意であるかどうかに縛られず、事前に計画された時点(例:最終評価時点)におけるグループ間比較を直接行うべきである。
- 具体例: 3グループにおける、治療前、1ヶ月後、3ヶ月後の「血圧」の推移比較。
- Rの解決策:
lme4パッケージ(およびp値算出のためにlmerTest)のlmer(y ~ group * time + (1 | id))を使用する。- 事後検証は
emmeansを使い、emmeans(model, ~ group | time)で「特定時点におけるグループ間比較」を直接指定し、Tukey法やHolm法で調整されたp値を確認する。
② 反復測定2値・順序・カウントデータ
- 理論説明: 縦断データのエンドポイントが連続量ではない場合、一般化線形混合モデル(GLMM)または一般化推定方程式(GEE)を用いる。GEEは集団平均(Population-averaged)の効果、GLMMは個体固有(Subject-specific)の効果を推定する。これらも全体検定の有意性を経由せず、目的の比較へ進む。
- 具体例: 介入による「試験の合格率(2値)」や「痛みのステージ(順序)」、「喘息の発作回数(カウント)」の経時的変化の多群比較。
- Rの解決策:
- GLMMアプローチ:
lme4::glmer()(2値やポアソン)、またはordinal::clmm()(順序カテゴリカル)を使用する。 - GEEアプローチ:
geepackパッケージのgeeglm()を使用し、corstr引数で相関構造を指定する。 - いずれのモデルからも、
emmeansパッケージを用いることで、特定の時点・特定のグループ間に絞ったペアワイズ比較・多重比較補正を一元的に実行できる。
- GLMMアプローチ:
高度なトピック:再発イベント(Recurrent Events)
① 通常の再発イベント
- 理論説明: 1人の被験者に同じイベントが何度も起こるデータ(例:喘息発作の再発)である。被験者内の相関と、イベント回数の多重性をモデル化する。
- Rの解決策:
survivalパッケージのcoxph()関数内でcluster(id)オプションを使用する(AGモデルやWLWモデル)。あるいはfrailtypackパッケージによる変量効果(フレイルティ)モデルを適用し、直接グループ間の再発率比の多重比較を行う。
② 競合リスクを伴う再発イベント
- 理論説明: 再発イベント(例:転倒回数)を追跡している最中に、競合イベント(例:死亡)が発生して追跡が強制終了する、最も複雑なデータ型である。
- Rの解決策:
- 複雑なデータ構造ゆえに全体検定の定義自体が困難なケースが多い。現代的な統計学では、最初から
reRegパッケージ(再発イベントと死亡の同時モデリング)などの専門パッケージを利用して、目的とするグループ間の再発率に関する直接的な多重比較を行う。
- 複雑なデータ構造ゆえに全体検定の定義自体が困難なケースが多い。現代的な統計学では、最初から
まとめ(頭の整理用マトリクス)
Omnibus検定(全体検定)のステップを省略し、最初から適切な多重比較調整を行う現代的アプローチにおいて、エンドポイントの型に応じた選択肢は以下の通りである。
| エンドポイントの型 | 基本モデル / 関数 | 事後検定・多重比較調整 | 備考 |
| 連続量(単一時点) | stats::lm() | emmeans | 最初から個別変数・ペアの検定へ |
| 2値 / カウント | stats::glm() / MASS::glm.nb() | emmeans | リンク関数指定後、多重比較 |
| Time-to-event | survival::coxph() / cmprsk::cuminc() | survminer::surv_pvalue() | ログランクのペアワイズを直接実行 |
| 反復測定(連続) | lme4::lmer() | emmeans | 交互作用の有無に関わらず時点別比較 |
| 反復測定(非連続) | lme4::glmer() / geepack::geeglm() | emmeans | GLMM/GEEから直接ペアワイズへ |
| 再発イベント | survival::coxph( + cluster) / reReg::reReg() | 手動補正(p.adjust)等 | 専門パッケージで目的の比較を直撃 |
中級者のあなたは、「全体検定が有意になってから次に進む」という古典的な縛りから脱却してほしい。最初から「どのエンドポイントの、どのグループ間(あるいは時点間)の比較が目的なのか」を明確にし、バックボーンとなる適切なモデルを選択した上で、emmeans などのパッケージを用いて直接的かつ厳格な多重比較補正を適用するのが、現代的で強固な統計解析の姿である。




コメント