2群のKaplan-Meier曲線を描いて、差がありそうに見える。次に必要なのは、その差が標本のばらつきで説明できる範囲かどうかの判断です。ここで使われるのがログランク検定で、臨床論文の生存時間解析ではほぼ標準になっています。
ただ、この検定には「どの時期の差を重く見るか」という設計が埋め込まれています。免疫チェックポイント阻害薬のように効果が遅れて現れる状況では、この設計が検出力を大きく左右します。
ここではログランク検定が何を足し上げているのかを確認したうえで、重み付けを変えると結論がどう変わるか、そして解析計画で何を決めておくべきかを見ていきます。
各時点の2×2表を足している
ログランク検定は、イベントが起きた時点ごとに小さな表を作ります。その時点のリスク集合が全体で$n_j$人、うち治療群が$n_{1j}$人、その時点のイベントが$d_j$件だったとします。もし群とイベントの起きやすさが無関係なら、治療群で起きるイベント数の期待値は人数の比で決まります。
$$E_{1j} = d_j \cdot \frac{n_{1j}}{n_j} \tag{1}$$
式(1)は、その時点にいる人のうち治療群が4割を占めるなら、起きたイベントの4割が治療群で起きるはずだ、という単純な計算です。実際に治療群で起きた数$O_{1j}$との差を全イベント時点で足し上げ、分散で割ったものが検定統計量になります。
$$\chi^2 = \frac{\left(\sum_j (O_{1j} – E_{1j})\right)^2}{\sum_j V_j} \tag{2}$$
式(2)の分子は、追跡期間を通じた累積のズレです。各時点のズレは小さくても、同じ向きに積み上がれば大きくなります。
library(survival)
survdiff(Surv(time, status) ~ sex, data = lung)
#> N Observed Expected (O-E)^2/E (O-E)^2/V
#> sex=1 138 112 91.6 4.55 10.3
#> sex=2 90 53 73.4 5.68 10.3
#>
#> Chisq= 10.3 on 1 degrees of freedom, p= 0.001

ここで押さえておきたいのは、この検定が比を推定していないことです。返ってくるのはp値だけで、効果の大きさは出てきません。ログランク検定が有意だったという記述だけでは、読者は差の大きさを知りようがありません。Cox比例ハザードモデルを当てはめると、同じデータのハザード比は0.588でした。そしてCox回帰のスコア検定の統計量は10.325で、ログランク検定の10.3と一致します。この2つは別々の手法ではなく、同じものを別の入口から見ています。
全ての時点を等しく扱うという設計
式(2)は各時点のズレをそのまま足しています。追跡開始直後の1件も、5年後の1件も、同じ重みです。この「等しく扱う」という選択自体が、ひとつの設計判断になっています。
重みを変えた検定もあります。生存率$\hat{S}(t)$を重みに使う一般化した形で書くと、次のようになります。
$$\chi^2_{\rho} = \frac{\left(\sum_j \hat{S}(t_j)^{\rho}\,(O_{1j} – E_{1j})\right)^2}{\sum_j \hat{S}(t_j)^{2\rho} V_j} \tag{3}$$
式(3)で$\rho = 0$とすればログランク検定に戻ります。$\rho > 0$なら、生存率がまだ高い追跡前半の時点に大きな重みがかかります。逆に$\rho < 0$とすれば後半が重くなります。Rのsurvdiffはrho引数でこれを指定できます。
この違いが実際にどれくらい効くのかを、2つの状況で確かめます。片方は治療効果が最初の8か月だけ現れてその後消える状況、もう片方は最初の8か月は差がなく、そこから差が開いていく状況です。以下は説明のための架空データです。

survdiff(Surv(tm, st) ~ g, data = trial, rho = 1) # 前半に重み
survdiff(Surv(tm, st) ~ g, data = trial, rho = 0) # ログランク検定
survdiff(Surv(tm, st) ~ g, data = trial, rho = -1) # 後半に重み
それぞれ400回ずつ生成して、5%水準で有意になった割合を数えました。

差が出る時期を当てられれば検出力は上がり、外せば下がります。26%という数字は、本当に効果がある治療を4回に3回見逃すということです。
ログランク検定が標準になっているのは、この表で最も強いからではありません。どちらの状況でも極端に弱くならないからです。差の出方について事前の見当がつかないなら、この選択は妥当だと考えます。
曲線を見てから検定を選ばない
ここまでの結果は、当てはまる重みを選べば検出力が上がることを示しています。だとすれば、Kaplan-Meier曲線を描いてから、差が出ている時期に合う検定を選べばよさそうに思えます。
これをやると第一種の過誤が壊れます。2群にまったく差のないデータを1500組作り、3つの検定を全て走らせて、最も小さいp値を採用した場合を数えました。
#> 個々の検定の第一種の過誤 5.3% 5.4% 5.7%
#> 3つのうち最小のp値を採用 9.6%
個々の検定はいずれも名目の5%を保っています。ところが3つ試して最も小さい値を採用すると9.6%になります。差がないのに10回に1回は有意と判定することになり、有意水準としては機能しません。
そのため、どの重み付けを使うかは解析計画に書いておく必要があります。曲線を見る前に決める。これが守れないなら、標準のログランク検定を使うのが安全です。
遅延効果が想定される試験では、事前に後期重み型を主解析に置く設計も報告されています。ただしその場合でも、根拠を解析計画に書いたうえで、標準のログランク検定の結果を併記するのが実務的でしょう。査読者は見慣れた検定の値も確認したがります。
層別と、報告に足りないもの
無作為化のときに施設や病期で層別したなら、検定も層別します。層ごとに式(1)の期待値を計算してから足し上げる形で、Rではstrata関数を使います。
survdiff(Surv(time, status) ~ treatment + strata(institution), data = trial)
層別因子を無視すると、層間の予後の違いが群間差に紛れ込みます。割付で層別したなら解析でも層別する、というのが原則です。
報告のほうで足りなくなりやすいのは、p値以外です。ログランク検定は差の大きさを返さないので、それだけでは読者が判断できません。両群の生存期間中央値、特定時点の生存率、そしてハザード比と信頼区間を添えます。リスクテーブルも必要です。
曲線が交差している場合は、ログランク検定の結果をそのまま解釈しないほうがよいでしょう。前半のズレと後半のズレが打ち消し合って、差がないという結論になりえます。この状況で1つの要約値を出すこと自体が難しいので、時点別の生存率か制限付き平均生存時間の差で報告する形になります。
症例数ではなくイベント数で決まる
ログランク検定の検出力は、登録した患者数ではなくイベント数で決まります。1000例を登録しても、イベントが20件なら検出力は上がりません。逆に、イベントが十分あれば少ない症例数でも差を捉えられます。
近似的には、必要なイベント数は次の形で見積もられます。
$d \approx \frac{4(z_{1-\alpha/2} + z_{1-\beta})^2}{(\log \textrm{HR})^2} \tag{4}$
式(4)の$d$が両群合計のイベント数です。ハザード比0.7を有意水準5%、検出力80%で捉えるなら、およそ250件が要ります。ハザード比0.8まで近づくと630件、0.9なら2800件近くになります。分母が対数の2乗なので、効果が小さいほど急に膨らみます。
ここから設計の順序が決まります。まず捉えたいハザード比を決めて必要イベント数を出し、対象集団のイベント発生率から必要な症例数と追跡期間を逆算する。症例数を先に決めると、イベントが集まらないまま解析することになります。
この式が前提にしているのは、比例ハザード性と、ログランク検定を使うことです。効果が遅れて現れる状況では図3のとおり検出力が落ちるので、式(4)の見積もりは楽観的になります。免疫療法のように遅延効果が想定される試験では、この目減りを織り込む必要があります。
打ち切りが多いとき
ログランク検定は打ち切りをリスク集合から外すだけで、それ以上の仮定を置いていないように見えます。実際には、打ち切りが予後と無関係に起きるという仮定が入っています。
この仮定が破れると、期待値$E_{1j}$の計算が狂います。予後の悪い患者が先に脱落する群では、残った患者の予後が実際より良く見え、その群の観測死亡数が期待より少なくなります。検定はこのズレを効果として読みます。
群間で打ち切り率が違う研究では、まずここを疑います。打ち切りの理由を群別に集計し、追跡不能と管理上の打ち切りを分けて報告することになります。データカットオフによる打ち切りは予後と無関係なので問題ありません。
逆転打ち切りKaplan-Meier法で追跡期間の中央値を群別に出しておくと、追跡の均等さが読者に伝わります。片方の群だけ追跡が短いなら、検定の前提を疑う材料になります。
3群以上を比べるとき
ログランク検定は3群以上にも拡張できます。自由度は群数から1を引いた値になり、帰無仮説は「全ての群の生存関数が等しい」です。
この検定が有意でも、どの群とどの群に差があるかは分かりません。対比較を追加するなら多重性の調整が要ります。用量群のように順序がある場合は、傾向性を見る検定のほうが検出力が高くなります。群を順序スコアに置き換えた形で、自由度1の検定になります。
survdiffは複数群をそのまま受け取ります。出力の各行に群ごとの観測数と期待数が並ぶので、どの群が期待から離れているかは目視で見当がつきます。ただしその印象を検定の結論として書くことはできません。
次に確かめること
群間比較の次は、年齢や病期を調整した比較です。ログランク検定は連続共変量を調整できないので、Cox比例ハザードモデルに進みます。この検定がCox回帰のスコア検定と一致することは部分尤度で扱います。
比較する曲線そのものの読み方はKaplan-Meier推定量、曲線が交差する状況の診断は比例ハザード仮定の検証にあります。
遅延効果が想定される試験で主解析の検定をどう決めるか、層別因子をどこまで解析に持ち込むか。このあたりは試験デザインと事前の想定を見ないと決まりません。Dr.データサイエンスでは、こうした解析計画のご相談を承っています。
参考文献
Mantel N. Evaluation of survival data and two new rank order statistics arising in its consideration. Cancer Chemotherapy Reports. 1966;50(3):163-170.
Peto R, Peto J. Asymptotically efficient rank invariant test procedures. Journal of the Royal Statistical Society: Series A. 1972;135(2):185-207.
Harrington DP, Fleming TR. A class of rank test procedures for censored survival data. Biometrika. 1982;69(3):553-566.
Lin RS, Lin J, Roychoudhury S, et al. Alternative analysis methods for time to event endpoints under nonproportional hazards. Statistics in Biopharmaceutical Research. 2020;12(2):187-198.
Klein JP, Moeschberger ML. Survival Analysis: Techniques for Censored and Truncated Data. 2nd ed. Springer; 2003.


