Rを使った分析の準備
生存時間解析とも呼ばれる
生物の死や機械システムの故障など、1つの事象(event)が発生するまでの予想される期間を分析する統計学の一分野
分野ごとに呼び名が異なる
工学 | 信頼性分析 |
経済学 | 継続時間分析 |
社会学 | イベント履歴分析 |
知りたいこと | 適切な手法 | 概要 |
治療期間の全体傾向 | カプラン=マイヤー(KM)生存曲線 | 生存曲線を用いて、治療終了までの患者数の推移(生存率)を視覚化。 |
男女間での死亡率の差 | ログランク検定 | 2つ以上の群で生存曲線が統計的に異なるかを検定 |
年齢などが死因に与える影響 | Cox比例ハザードモデル | ハザード(死亡の危険度)に影響を与える要因を同時に分析可能。 |
Coxモデルの各説明変数の有意性 | 尤度比検定・ワルド検定 | Cox回帰の係数の有意性を判定。尤度比検定はモデル全体、ワルド検定は各変数ごとの影響を見る。 |
事象(Event) | 死亡、疾患の発生、疾患の再発、回復、またはその他の興味ある経験 |
時間(Time) | 観察期間の開始(手術や治療の開始など)から、(i) 事象の発生、または (ii) 試験の終了、または (iii) 連絡が途絶えたり研究から離脱するまでの時間 |
打ち切り (Censoring) | 個人の生存時間に関するいくらかの情報を持っている時、生存時間が正確にわからない場合に起こる |
生存関数: S(t) | ある被験者が時間 t より長く生存する確率 |
aml.csv
を使うaml.csv
データを読み込むtime | 生存時間または打ち切り時間 (weeks) |
status | がんの再発:0 = 事象なし(打ち切り)、1 = 事象あり(再発) |
x | 治療群:Nonmaintained(維持化学療法なし)、Maitained(あり) |
time = 5
、status = 1
)
の意味time = 5
)status = 1
)time = 161
、status = 0
)
の意味time = 161
)status = 0
)time = 13
、status = 1
)
の意味time = 13
)status = 1
)time = 13
、status = 0
)
の意味time = 13
)status = 0
)◎注意:次のコマンドを使うと、複数の変数 (time, status, x) の値を同時に指定して確認できる
維持療法を受けた患者が、維持療法を受けていない患者に比べて再発が遅くなるかどうか
# パッケージ読み込み
library(survival)
library(survminer)
# データ読み込み
aml <- read_csv("data/aml.csv") # アップロードしたaml.csvを読み込む
# 生存オブジェクト作成
# 再発までの時間: time、イベント発生: status、治療: x(Maintained or Nonmaintained)
fit <- survfit(Surv(time, status) ~ x, data = aml)
# KM曲線の描画
km_1 <- ggsurvplot(fit, data = aml,
pval = TRUE, # p値(log-rank test)
conf.int = TRUE, # 信頼区間を表示
risk.table = TRUE, # リスクテーブルを表示
xlab = "Time to Relapse",
ylab = "Survival Probability",
legend.title = "Therapy",
legend.labs = c("Maintained", "Non-maintained"),
palette = c("blue", "red"),
ggtheme = theme_minimal())
km_1
p-value < 0.05
なら、治療群間に統計的に有意な差があるx軸は 0(観察開始時)から最後に観察された時点までの時間
y軸は、生存している被験者の割合
時間がゼロの時点では、100%の被験者が事象なしで(つまり、一人もがんが再発せず)生存している
階段状の実線(青色と赤色)は事象発生の進行を示す
青色は「維持化学療法あり (Maintained)」の場合
赤色は「維持化学療法なし (Nonaintained)」の場合
垂直方向の落ち込みは事象が発生したことを示す
5週目に2人、事象が発生 ⇒ 最初の「落ち込み」↓
8週目に2人、事象が発生 ⇒ 2回目の「落ち込み」↓
9週目に1人、事象が発生 ⇒ 3回目の「落ち込み」↓
横線と交差する「+」・・・この時点で患者が打ち切られたことを示す
13週目の「+」・・・維持化学療法ありの患者が打ち切り
16週目の「+」・・・維持化学療法なしの患者が打ち切り
時間が経過するにつれて、グラフが右下がりになる
⇒ つまり、生存確率が下がる
⇒ 維持化学療法なし (Nomaintained)の方が生存確率が大きく下がる
⇒ 維持化学療法あり(Maintained)の方がより生存確率が高い
を示している。amlデータ表では、5人の被験者がそれぞれ13、16、28、45、161週目で打ち切られた。KM生存曲線には、これらの打ち切られた観察に対応する5つの目盛り線がある。
log-rank test
)
とは「生存率の差の検定」のことrisk
)を抱えている被験者の数に合わせて調整Observed
)
が「期待数」(Expected
)
と有意に異なるかどうかを判定するp-value = 0.065
とログランクの検定結果が示されているsurvdiff()
関数を使って、log-rank検定
結果をもう少し詳しく確認してみるCall:
survdiff(formula = Surv(time, status) ~ x, data = aml)
N Observed Expected (O-E)^2/E (O-E)^2/V
x=Maintained 11 7 10.69 1.27 3.4
x=Nonmaintained 12 11 7.31 1.86 3.4
Chisq= 3.4 on 1 degrees of freedom, p= 0.07
N | サンプル数 |
Observed | 再発数 |
(O-E)^2/E | 期待値 (Expected) |
(O-E)^2/V | カイ二乗検定統計量 |
ログランク検定結果
・p-value = 0.07
は、有意水準 0.05
をわずかに上回っており、統計的に有意とはいえない
⇒ 「維持療法を受けた患者のほうが、再発が遅れる」という傾向はある程度あるが、統計的に確実とは言えない
注意:
被験者 23 人というサンプルサイズは少なすぎる
⇒ 治療群間の差を検出する力はほとんどない
⇒ カイ二乗検定は漸近近似法に基づいている
⇒ サンプルサイズが小さい場合は p-value
は慎重に検討する必要あり
例えば、ここで「年齢や性別を考慮しても、維持療法を受けた患者のほうが、再発が遅れる傾向はあるのか?」を知りたいとする
しかし「KM法では 1 変数(グループ)しか扱えない」
⇒ 多変量解析ができない
状況 | なぜKMでは不十分か? | Coxモデルを使う理由 |
🔸 複数の要因(共変量)を同時に扱いたい | KM法では 1 変数しか扱えない | Coxモデルは多変量解析が可能 |
🔸 量的変数を含めたい | KM法はカテゴリ変数しか扱えない | Coxモデルは 連続変数も扱える |
🔸 交絡要因を統制したい(性別や年齢など) | KM法は統制ができない | Coxモデルで 交絡を調整できる |
🔸 ハザード比(リスクの大きさ)を知りたい | KM法は「生存率」のみ | Coxモデルは ハザード比を出力 |
🔸 予測モデルを作りたい | KM法は予測に使いにくい | Coxモデルは予測に応用可能 |
[1] "inst" "time" "status" "age" "sex" "ph.ecog"
[7] "ph.karno" "pat.karno" "meal.cal" "wt.loss"
inst | : 医療機関コード |
time | : 生存期間(日数) |
status | : 打ち切りステータス(1=打ち切り、2=死亡) |
age | : 年齢(歳) |
sex | : 性別(1=男性、2=女性) |
ph.ecog | : 医師によるECOGパフォーマンススコア(0=無症状、1=症状ありだが完全に歩行可能、2=1日のうち半分未満をベッドで過ごす、3=1日のうち半分以上をベッドで過ごすが完全に寝たきりではない、4=完全に寝たきり) |
ph.karno | : 医師によるカルノフスキー・パフォーマンススコア(0=最悪、100=最良) |
pat.karno | : 患者自身によるカルノフスキー・パフォーマンススコア |
meal.cal | :食事から摂取したカロリー量 |
wt.loss | : 過去6か月間の体重減少(ポンド) |
# パッケージ読み込み
library(survival)
library(survminer)
# データ読み込み
aml <- read_csv("data/lung.csv") # アップロードしたlung.csvを読み込む
# 生存オブジェクト作成
# 再発までの時間: time、イベント発生: status、治療: x(Maintained or Nonmaintained)
fit <- survfit(Surv(time, status) ~ sex, data = lung)
# KM曲線の描画
km_1 <- ggsurvplot(fit, data = aml,
pval = TRUE, # p値(log-rank test)
conf.int = TRUE, # 信頼区間を表示
risk.table = TRUE, # リスクテーブルを表示
xlab = "Time to Relapse",
ylab = "Survival Probability",
legend.title = "Therapy",
legend.labs = c("Male Patient", "Female Patient"),
palette = c("blue", "red"),
ggtheme = theme_minimal())
km_1
グラフからわかること
・女性の曲線が上にある
⇒ 男性グループと比較すると、女性グループは、長く生存している傾向あり
・ログランク検定(p値=0.0013)
⇒ 日数と生存率に関する男女差は統計的に有意
cox_model <- coxph(Surv(time, status) ~ age +
female +
ph.ecog +
ph.karno +
pat.karno +
meal.cal +
wt.loss,
data = lung)
Call:
coxph(formula = Surv(time, status) ~ age + female + ph.ecog +
ph.karno + pat.karno + meal.cal + wt.loss, data = lung)
n= 168, number of events= 121
(60 observations deleted due to missingness)
coef exp(coef) se(coef) z Pr(>|z|)
age 1.065e-02 1.011e+00 1.161e-02 0.917 0.35906
female -5.509e-01 5.765e-01 2.008e-01 -2.743 0.00609 **
ph.ecog 7.342e-01 2.084e+00 2.233e-01 3.288 0.00101 **
ph.karno 2.246e-02 1.023e+00 1.124e-02 1.998 0.04574 *
pat.karno -1.242e-02 9.877e-01 8.054e-03 -1.542 0.12316
meal.cal 3.329e-05 1.000e+00 2.595e-04 0.128 0.89791
wt.loss -1.433e-02 9.858e-01 7.771e-03 -1.844 0.06518 .
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
exp(coef) exp(-coef) lower .95 upper .95
age 1.0107 0.9894 0.9880 1.0340
female 0.5765 1.7347 0.3889 0.8545
ph.ecog 2.0838 0.4799 1.3452 3.2277
ph.karno 1.0227 0.9778 1.0004 1.0455
pat.karno 0.9877 1.0125 0.9722 1.0034
meal.cal 1.0000 1.0000 0.9995 1.0005
wt.loss 0.9858 1.0144 0.9709 1.0009
Concordance= 0.651 (se = 0.029 )
Likelihood ratio test= 28.33 on 7 df, p=2e-04
Wald test = 27.58 on 7 df, p=3e-04
Score (logrank) test = 28.41 on 7 df, p=2e-04
logハザード比
⇒ そのまま解釈できないハザード比
⇒ 解釈可能指標 | 値 | 解釈 |
female の coef | -5.509e-01 | logハザード比(女性であることの効果) |
female の exp(coef) | 0.5765 | ハザード比(解釈可能) |
female の p-value | 0.00609 | 有意水準5%未満なので、統計的に有意な差あり |
Cox比例ハザードモデルの結果からわかること (female)
・exp(coef) = 0.5765 →
女性の死亡リスクは男性の約57.6%
・女性は男性と比較して、死亡リスクが約42.4%低い
・ハザード比が 1 未満 → リスクが低い
・p-value = 0.00609
→
統計的に有意
指標 | 値 | 解釈 |
age の coef(coef) | 1.065e-02 | logハザード比(年齢の効果) |
age の exp(coef) | 1.0107 | ハザード比(解釈可能) |
age の p-value | 0.35906 | 有意水準5%以上なので、統計的に有意ではない |
Cox比例ハザードモデルの結果からわかること (age)
・exp(coef) = 1.0107 → 年齢が1歳高くなるごとに、死亡リスクは約 1.07%
増加すると推定
・しかし、この差は
統計的に有意ではない(p-value = 0.359
)
・従って、他の変数を統制したこのモデルでは「年齢が高いほど死亡リスクが高い」とは断言できない
・ハザード比が 1 未満 → リスクが低い
・p-value = 0.35906
→
統計的に有意ではない