生存coxphおよびrms cphとは異なる予測プロット


9

私はこの例で使用する独自のわずかに拡張されたバージョンの用語プロットを作成しましたここで見つけることができます。私は以前にSOに投稿しましたが、それについて考えるほど、これはおそらく実際のコーディングよりもCox比例ハザードモデルの解釈に関連していると思います。

問題

ハザード比プロットを見ると、信頼区間が自然に0になる参照ポイントがあると予想します。これは、からのcph()を使用する場合であり、からのcoxph()を使用する場合ではありrms packageませんsurvival package。coxph()による正しい動作はありますか?そうであれば、参照ポイントは何ですか?また、coxph()のダミー変数には間隔があり、値は以外ですか?e0

これが私のテストコードです:

# Load libs
library(survival)
library(rms)

# Regular survival
survobj <- with(lung, Surv(time,status))

# Prepare the variables
lung$sex <- factor(lung$sex, levels=1:2, labels=c("Male", "Female"))
labels(lung$sex) <- "Sex"
labels(lung$age) <- "Age"

# The rms survival
ddist <- datadist(lung)
options(datadist="ddist")
rms_surv_fit <- cph(survobj~rcs(age, 4)+sex, data=lung, x=T, y=T)

cphプロット

このコード:

termplot2(rms_surv_fit, se=T, rug.type="density", rug=T, density.proportion=.05,
          se.type="polygon", yscale="exponential", log="y", 
          xlab=c("Age", "Sex"), 
          ylab=rep("Hazard Ratio", times=2),
          main=rep("cph() plot", times=2),
          col.se=rgb(.2,.2,1,.4), col.term="black")

このプロットを与える:

cph()termplot2

coxphプロット

このコード:

termplot2(surv_fit, se=T, rug.type="density", rug=T, density.proportion=.05, 
          se.type="polygon", yscale="exponential", log="y", 
          xlab=c("Age", "Sex"), 
          ylab=rep("Hazard Ratio", times=2),
          main=rep("coxph() plot", times=2),
          col.se=rgb(.2,.2,1,.4), col.term="black")

このプロットを与える:

coxph()termplot2

更新

@Frank Harrellが提案したように、彼の最近のコメントで提案に沿って調整した後、私は得ました:

p <- Predict(rms_surv_fit, age=seq(50, 70, times=20), 
             sex=c("Male", "Female"), fun=exp)
plot.Predict(p, ~ age | sex,
             col="black",
             col.fill=gray(seq(.8, .75, length=5)))

これはこの非常に素晴らしいプロットを与えました:

格子プロット

私はコメントの後、contrast.rmsをもう一度見て、プロットを与えるこのコードを試しました...できることはおそらくもっとたくさんありますが:-)

w <- contrast.rms(rms_surv_fit, 
                  list(sex=c("Male", "Female"), 
                       age=seq(50, 70, times=20)))

xYplot(Cbind(Contrast, Lower, Upper) ~ age | sex, 
       data=w, method="bands")

このプロットを与えた:

コントラストプロット

アップデート2

テルナウ教授は、腰の自信がないプロットについてコメントしてくれました。

coxphの平滑化スプラインは、gamの平滑化スプラインと同様に、sum(prediction)= 0になるように正規化されます。したがって、分散が非常に小さい固定の単一点はありません。

私はまだGAMに精通していませんが、これは私の質問に答えているようです。これは解釈の問題のようです。


3
いくつかのコメント。rmsとDesignパッケージの違いについては、まずbiostat.mc.vanderbilt.edu/Rrmsを読んでください。次に、plot.Predictの代わりにplot()を使用して作業を保存します。3番目に、たとえばPredict(fit、age、sex、fun = exp)#exp = anti-log;を使用して、両方の性別のプロットを簡単に生成できます。次に、plot(result)またはplot(result、〜age | sex)を実行します。Predictでは「x = NA」を使用しません。rmsはラティスグラフィックスを使用するため、通常の標準グラフィックスパラメーターとmfrowは適用されません。biostat.mc.vanderbilt.edu/rmsにある私のrmsコースの配布資料の例を参照してください。対照的にrms.rmsはより多くのドキュメントを研究します。
フランクハレル2012年

1
ご協力ありがとうございます。より良い例でコードを更新し、教授を追加しました。テルナウの反応。PS私はあなたが本の新しいバージョンを計画していて、カットポイントバイアスセクションを拡張することが参考として非常に役立つことを本当に興奮しています
Max Gordon

1
plotandのcontrast代わりにplot.Predictandを使用できますcontrast.rms。私が使用するbyか、length内部seqの代わりに、timesと与えるだろうcontrastあなたが対比されている正確に何を指定するように、2つのリストを。xYplot信頼帯のシェーディングを使用することもできます。
フランクハレル

1
ありがとう。私はplot.Predictを使用するのが好きです。RStudioで適切なヘルプが得られるためです。私の場合、完全な関数名を書き込むのにかかる時間よりもはるかに重要です(オートコンプリート(タブ)を使用して)。その時間緩めます)。
Max Gordon

回答:


5

確かに信頼区間がゼロ幅になる点があるはずだと思います。また、rms関数のみを使用する3番目の方法を試すこともできます。ヘルプファイルの下に、contrast.rmsがハザード比プロットを取得する例があります。それはコメントから始まります#治療と性別による個別の見積もりを示します 比率を取得するには、対数を記録する必要があります。


1
お返事ありがとうございます。私はこの問題を教授に述べるべきだと思いますか?バグ/誤解と見なされる場合は、Terry Therneauがいますか?私はrmsパッケージのグラフィックソリューションも調べましたが、プロットでのcontrast.rmsの使用法を完全に理解できません。plot.Predictは、termplotと同様の出力を行うようですが、望みどおりの結果を得ることができません。質問の更新を参照してください。
Max Gordon

2
彼に質問するように書いて、彼が数分前に私にくれた空港への乗車に感謝を伝えるといいでしょう。上記の他の質問についてコメントします。
フランクハレル2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.