3

簡単な紹介:

コックス比例ハザード (PH) モデルは、パッケージのcoxph関数で推定できます。survivalこのタイプのモデルから適切な結果を得るための明らかな要件は、ハザードが比例している、つまり、ハザードが時間とともに一定であることです。これが特定の変数に当てはまらない場合は、この変数の係数を時変にすることで解決できます。(現在、これは技術的に拡張された Cox モデルです。) これは、tt()その変数に を追加し、時間の経過に伴う関数を指定することによって行われます ( vignette("timedep", package = "survival")19 ページ以降を参照)。

質問:

関数を指定せずに を使用すると、どの関数が使用されtt()ますか?

次に例を示します。

library(survival)
data(lung)
cox_model <- coxph(Surv(time, status) ~ age + sex + ph.karno, data = lung)
cox_model_ph <- cox.zph(cox_model) 
#              rho    chisq       p
# age      0.00701  0.00871 0.92566
# sex      0.12249  2.42336 0.11954
# ph.karno 0.23135  8.24167 0.00409
# GLOBAL        NA 11.54750 0.00911

ph.karnoは PH の仮定 (p 値が小さい) に違反しているため、以下を追加しますtt()

cox_model_tt <- coxph(Surv(time, status) ~ age + sex + tt(ph.karno), data = lung)
cox_model_tt_ph <- cox.zph(cox_model_tt)
#                   rho  chisq      p
# age          -0.00907 0.0142 0.9052
# sex           0.12844 2.7270 0.0987
# tt(ph.karno)  0.11643 2.3846 0.1225
# GLOBAL             NA 5.0220 0.1702

tt()これで PH の仮定は満たされましたが、関数が実際に何をしたかはわかりません。tt = function(x, t, ...) x*ttt = function(x, t, ...) x + t、などの一般的に使用される関数をいくつか試しtt = function(x, t, ...) x*log(t)ました。しかし、すべてが異なる結果をもたらしました (そして、PH 違反を修正できませんでした)。

どんな助けでも大歓迎です。

4

1 に答える 1

2

コードを調べてみると、coxph見つかったかと思います。あなたは「tt」パラメータに値を提供しなかったので、これが実行されると思います:

if (is.null(tt)) {
            tt <- function(x, time, riskset, weights) {
                obrien <- function(x) {
                  r <- rank(x)
                  (r - 0.5)/(0.5 + length(r) - r)
                }
                unlist(tapply(x, riskset, obrien))
            }

そして、ここに実験的な確認があります:

> cox_model_OB <- coxph(Surv(time, status) ~ age + sex + tt(ph.karno), data = lung, tt=  function(x, time, riskset, weights) {
+                 obrien <- function(x) {
+                   r <- rank(x)
+                   (r - 0.5)/(0.5 + length(r) - r)
+                 }
+                 unlist(tapply(x, riskset, obrien))
+             }
+ )
> ( cox_model_tt_ph <- cox.zph(cox_model_tt) )
                  rho  chisq      p
age          -0.00907 0.0142 0.9052
sex           0.12844 2.7270 0.0987
tt(ph.karno)  0.11643 2.3846 0.1225
GLOBAL             NA 5.0220 0.1702

これが意図的なものだったのか疑問です。開発セッション中に残されたコードだと思われます。Therneau は、「tt」関数の提供に失敗すると、少なくとも警告をスローする必要があると考えているのではないかと思いますが、おそらくエラーが発生することを望んでいたでしょう。 それは推測であり、ビネットを検索して間違っていることがわかり、それが意図されていることがわかりました:「これは、tt() への入力引数がイベント番号またはリスク セットによって順序付けられているという事実に依存しています。この関数coxph 呼び出しに tt 引数が存在しないが、モデル式に tt 項がある場合は、デフォルトとして使用されます (そうすることで、survobrien 関数を減価償却することができました)。参照:「Coxモデルでの時間依存共変量と時間依存係数の使用」の23ページ

于 2016-07-28T17:34:46.310 に答える