名前はまだない

データ分析とかの備忘録か, 趣味の話か, はたまた

生存時間分析のシェーンフィールド残差について

はじめに

前から気になっていたこちらの書籍を読みました。

行間が怪しい部分も多かったですが、このシリーズらしく様々な要素を解説しているので、新しく知れる視点もありよかったです。

生存時間分析のモデルが、生存の予測を行う場合にはあまり力を発揮しない理由も自分なりに整理することができました。

その中でも比例ハザード性の確認についての部分は、一般的に非常に重要になるので簡単にまとめて起きたいと思います。

比例ハザード性について

生存時間分析では比例ハザードモデルを用いる場合が多いです。

比例ハザードモデルは説明変数がイベントまでの生存時間に影響を与えると考えるモデルです。 2つのハザード関数h_a(t)が、h_b(t)に対して次のように関係式2つのハザード関数は比例する場合を考える。

 \displaystyle{
{h_a (t ) = Ch_b (t ) 
}}

ここで、Cは時間に寄らない比例定数である。 このような場合、あるハザード関数に対して、共変量xを条件づけた場合のハザード関数h(t|x)を次のように表す。

 \displaystyle{
{h(t|x)=h_0(t)exp(\beta x)
}}

ここで、h_0(t)はベースラインハザード (baseline hazard) と呼び、共変量が全て0の場合のハザード関数である。

係数exp(\beta)からは、イベントの発生確率がexp(\beta)倍となるという情報が得られる。 この時、ハザード比は共変量のみに依存し、時間依存しないという比例ハザード性という仮定のもとに成り立つことを注意しなければならない。

library(survival)
library(survminer)

data("kidney")

kidney_cox = coxph(Surv(time, status) ~ sex+age+disease+frail, data=kidney)
summary(kidney_cox)

結果は以下の通りでした。

Call:
coxph(formula = Surv(time, status) ~ sex + age + disease + frail, 
    data = kidney)

  n= 76, number of events= 58 

                coef exp(coef)  se(coef)      z Pr(>|z|)    
sex        -2.099844  0.122475  0.392654 -5.348 8.90e-08 ***
age         0.007714  1.007744  0.011907  0.648 0.517055    
diseaseGN   0.130666  1.139587  0.436114  0.300 0.764471    
diseaseAN   0.640906  1.898200  0.447886  1.431 0.152442    
diseasePKD -2.168515  0.114347  0.648825 -3.342 0.000831 ***
frail       1.791873  6.000682  0.257639  6.955 3.53e-12 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

           exp(coef) exp(-coef) lower .95 upper .95
sex           0.1225     8.1649   0.05673    0.2644
age           1.0077     0.9923   0.98450    1.0315
diseaseGN     1.1396     0.8775   0.48476    2.6790
diseaseAN     1.8982     0.5268   0.78904    4.5665
diseasePKD    0.1143     8.7453   0.03206    0.4079
frail         6.0007     0.1666   3.62158    9.9427

Concordance= 0.822  (se = 0.03 )
Likelihood ratio test= 68.71  on 6 df,   p=8e-13
Wald test            = 60.01  on 6 df,   p=4e-11
Score (logrank) test = 86.24  on 6 df,   p=<2e-16

比例ハザード性を満たしているかどうかは、書籍ではシェーンフィールド残差と時間が相関するかどうかで確認することができるとされている。 一方で比例ハザード性を満たしているかどうかの確認するの方法は、主に3つあるようです。

  • 補対数-対数プロット
  • Shoenfeld残差
  • 時間依存性共変量

necostat.hatenablog.jp

補対数-対数プロット

比例ハザードモデルの式を変換すると以下のようになる。

log(−logS(t))と時間tまたはlog(t)をプロットする。 共変量で決まる分ΣβX だけ切片が異なる平行な線が描かれる。 もし、比例ハザード性が成り立っているならば共変量によって層が異なる場合、プロットは平行になるはずである. 逆に、補対数対数プロットが並行でない場合は比例ハザード性の仮定が成立しないと言える。

並行かどうかについての判断は定量的に行うことはできず、主観で判断することになる。

Rでは以下のように確認できる。

性別で層化すると図のようになった。 並行であると言えば並行であると言えそうです。

plot(survfit(Surv(time, status) ~ sex, data=kidney), fun="cloglog",
     col=c("red", "blue"), 
     lwd=2,
     xlab="log(Time)", ylab="log(-log S(t))") 

シェーンフィールド残差について

シェーンフィールド残差についてはこちらの記事が分かりやすかったです。

note.com

Shoenfeld 残差は「ある時点 tiにおいて,イベントを起こした対象 i∈D の共変量 X_iξ ​とそうでない生存集団の共変量の期待値 A iξ (β) との差」ですが,もし比例ハザード仮定が成立するのであれば,「Shoenfeld 残差はイベントの発生した時間に関わらず,多少のばらつきはあってもおおよそ一定になっていそう」です.言い換えれば「Shoenfeld 残差がイベントの発生した時間に伴うなんらかの変化パターンをもっているような場合,比例ハザード仮定を破っていそう」ということになります.

そして、比例ハザード仮定が満たされているならShoenfeld残差は全イベント発生時点で合計するとゼロになり、時間によらず0周りに分布することになります。

このことを確認するには以下のようにする。

residuals_kidney_cox <- residuals(kidney_cox, type = "schoenfeld")
cat(sum(residuals_kidney_cox)) 
# 9.354812e-11

全体のShoenfeld 残差はかなり0に近いようです。

それぞれの特徴量においても確認すると、0と言って良いようです。

> summary(residuals_kidney_cox)
      sex                age            diseaseGN         diseaseAN         diseasePKD           frail         
 Min.   :-0.89116   Min.   :-35.087   Min.   :-0.6560   Min.   :-0.5659   Min.   :-0.45125   Min.   :-1.90007  
 1st Qu.:-0.16030   1st Qu.: -9.277   1st Qu.:-0.2205   1st Qu.:-0.3276   1st Qu.:-0.09093   1st Qu.:-0.23951  
 Median : 0.08348   Median :  3.754   Median :-0.1376   Median :-0.1506   Median :-0.06104   Median : 0.04819  
 Mean   : 0.00000   Mean   :  0.000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.00000   Mean   : 0.00000  
 3rd Qu.: 0.19180   3rd Qu.: 10.913   3rd Qu.: 0.0000   3rd Qu.: 0.4415   3rd Qu.:-0.02524   3rd Qu.: 0.25603  
 Max.   : 0.87324   Max.   : 24.692   Max.   : 0.8991   Max.   : 0.8939   Max.   : 0.91367   Max.   : 1.89409 

ある変数についてSchoenfeld残差は時間と関連が認められなければ、その変数について比例ハザード性の仮定が成り立っているとなっている。

Schoenfeld残差は時間と関連を確認するのはSchoenfeld 残差検定である。

Rでは以下のように実施できる

fit_test <- cox.zph(kidney_cox)
ggcoxzph(fit_test)
print(fit_test)
         chisq df      p
sex     0.2907  1 0.5898
age     0.0507  1 0.8219
disease 0.2763  3 0.9644
frail   6.7193  1 0.0095
GLOBAL  8.8036  6 0.1849

参考

医学統計勉強会 第7回生存時間解析 京大学大学大学院公衆衛生学研究科 宮田敏

Surrogate indexについて調べて簡単にまとめる

はじめに

こちらの記事でSurrogate indexについて初めて知りました。

developers.cyberagent.co.jp

Netflixでも活用されていて、一定の成果を上げているようです。

arxiv.org

業務で扱う課題を解決してくれる可能性があったため、理解しておきたいと思いました。

論文等を読みつつRで挙動などを確認していきます。

  • はじめに
  • 概要
    • 課題感
    • 方針
    • 仮定
      • 仮定1 強く無視できる割り当て条件
      • 仮定2 代理性
      • 仮定3 互換性
  • 定義
    • Surrogate index:代理指数
    • 代理スコア:Surrogate Score
    • Sampling Score
    • 潜在的条件付き期待値
  • 関係性
  • 因果効果の推定
  • 論文での適用事例
  • Rで確認
    • データの生成
    • 推定
    • 所感
続きを読む

Staggered DIDの利用の感どころを簡単に確認

はじめに

こちらでStaggered DIDを初めて知りました。

blog.brainpad.co.jp

介入タイミングが異なる場合のDIDということで、実務でも利用シーンがありそうな問題設計だと思いました。

簡単にまとめたいと思います。

概論

元の論文は以下になります。

arxiv.org

また、こちらの資料も参考になった。

DIDの計量経済手法の近年の展開~ 問題と対策 ~, 小西祥文 慶應義塾大学

わかりやすい説明はこちらに譲ります。

blog.brainpad.co.jp

続きを読む