更新:別の更新で申し訳ありませんが、分数多項式と競合するリスクパッケージを使用したいくつかの可能な解決策を見つけました。
問題
私はRにある時間依存係数分析を行う簡単な方法を見つけることができません。変数係数を取り、それを時間依存係数(変数ではない)に入れてから、時間に対する変動をプロットしたいです:
可能な解決策
1)データセットの分割
この例(ラボセッションのパート2)を見てきましたが、別のデータセットの作成は複雑で、計算コストがかかり、あまり直感的ではないようです...
2)ランクの低いモデル-coxvcパッケージ
coxvcパッケージには、問題に対処するためのエレガントな方法を提供します-ここだマニュアル。問題は、作成者がパッケージを開発していないことです(最後のバージョンは2007年5月23日以降です)。電子メールでの会話の後、パッケージが機能するようになりましたが、データセットで1回の実行に5時間かかりました(140 000エントリ)、期間の終わりに極端な推定値を提供します。ここで少し更新されたパッケージを見つけることができます-私はほとんどプロット関数を更新しました。
それは単に微調整の問題かもしれませんが、ソフトウェアは信頼区間を簡単に提供できず、プロセスは非常に時間がかかるため、他のソリューションを今見ています。
3)timeregパッケージ
印象的なtimeregパッケージもこの問題に対処していますが、その使用方法は定かではなく、スムーズなプロットが得られません。
4)分数多項式時間(FPT)モデル
アニカ・ブッフホルツは、「治療と予後因子の経時変化の長期的影響の評価」に関する優れた論文を見つけました。彼女は、Sauerbreiらの提案したFPTが時間依存係数に最も適切であると結論付けています。
FPTは時変効果の検出に非常に優れていますが、ランクの削減アプローチでは時変効果の選択が含まれないため、モデルが非常に複雑になります。
研究は非常に完了しているように見えますが、私には少し手の届かないところにあります。彼女はたまたまザウアーブレイと仕事をしているので、私も少し不思議に思っています。それは健全に思えますが、mfpパッケージを使用して分析を行うことができると思いますが、どうすればよいかわかりません。
5)cmprskパッケージ
私は競合するリスク分析を行うことを考えてきましたが、計算には時間がかかるため、通常のcox回帰に切り替えました。CRRは、時間依存の共変量のオプションをthougあります。
....
cov2 matrix of covariates that will be multiplied
by functions of time; if used, often these
covariates would also appear in cov1 to give
a prop hazards effect plus a time interaction
....
二次の例はありますが、実際に時間が表示される場所にはあまり従わず、その表示方法もわかりません。test.Rファイルも見てきましたが、例は基本的に同じです...
私のサンプルコード
さまざまな可能性をテストするために使用する例を次に示します
library("survival")
library("timereg")
data(sTRACE)
# Basic cox regression
surv <- with(sTRACE, Surv(time/365,status==9))
fit1 <- coxph(surv~age+sex+diabetes+chf+vf, data=sTRACE)
check <- cox.zph(fit1)
print(check)
plot(check, resid=F)
# vf seems to be the most time varying
######################################
# Do the analysis with the code from #
# the example that I've found #
######################################
# Split the dataset according to the splitSurv() from prof. Wesley O. Johnson
# http://anson.ucdavis.edu/~johnson/st222/lab8/splitSurv.ssc
new_split_dataset = splitSuv(sTRACE$time/365, sTRACE$status==9, sTRACE[, grep("(age|sex|diabetes|chf|vf)", names(sTRACE))])
surv2 <- with(new_split_dataset, Surv(start, stop, event))
fit2 <- coxph(surv2~age+sex+diabetes+chf+I(pspline(stop)*vf), data=new_split_dataset)
print(fit2)
######################################
# Do the analysis by just straifying #
######################################
fit3 <- coxph(surv~age+sex+diabetes+chf+strata(vf), data=sTRACE)
print(fit3)
# High computational cost!
# The price for 259 events
sum((sTRACE$status==9)*1)
# ~240 times larger dataset!
NROW(new_split_dataset)/NROW(sTRACE)
########################################
# Do the analysis with the coxvc and #
# the timecox from the timereg library #
########################################
Ft_1 <- cbind(rep(1,nrow(sTRACE)),bs(sTRACE$time/365,df=3))
fit_coxvc1 <- coxvc(surv~vf+sex, Ft_1, rank=2, data=sTRACE)
fit_coxvc2 <- coxvc(surv~vf+sex, Ft_1, rank=1, data=sTRACE)
Ft_3 <- cbind(rep(1,nrow(sTRACE)),bs(sTRACE$time/365,df=5))
fit_coxvc3 <- coxvc(surv~vf+sex, Ft_3, rank=2, data=sTRACE)
layout(matrix(1:3, ncol=1))
my_plotcoxvc <- function(fit, fun="effects"){
plotcoxvc(fit,fun=fun,xlab='time in years', ylim=c(-1,1), legend_x=.010)
abline(0,0, lty=2, col=rgb(.5,.5,.5,.5))
title(paste("B-spline =", NCOL(fit$Ftime)-1, "df and rank =", fit$rank))
}
my_plotcoxvc(fit_coxvc1)
my_plotcoxvc(fit_coxvc2)
my_plotcoxvc(fit_coxvc3)
# Next group
my_plotcoxvc(fit_coxvc1)
fit_timecox1<-timecox(surv~sex + vf, data=sTRACE)
plot(fit_timecox1, xlab="time in years", specific.comps=c(2,3))
これらのグラフのコード結果:比較coxvcための異なる設定との coxvcとtimecoxのプロット。結果は大丈夫だと思いますが、timecoxグラフを説明することはできないと思います-複雑に思えます...
私の(現在の)質問
- RでFPT分析を行うにはどうすればよいですか?
- cmprskで時間共変量を使用するにはどうすればよいですか?
- 結果をプロットする方法(できれば信頼区間)?
y~x
y~x*(t+t^2)-t
y~x+x:t+x:t^2