更新:很抱歉要进行其他更新,但是我发现了一些需要解决的小数多项式和竞争性风险组合的解决方案。
问题
我在R中找不到一种简单的方法来进行时变系数分析。我希望能够将变量系数转换为时变系数(而不是变量),然后绘制随时间变化的图:
可能的解决方案
1)分割数据集
我看了这个示例(实验课程的第2部分),但是创建一个单独的数据集似乎很复杂,计算量大,而且不是很直观...
2)降级模型-coxvc软件包
该coxvc包提供了处理问题的一种优雅的方式-这里有一个手动。问题在于作者不再开发该软件包(最新版本是自2007年5月23日以来),经过一些电子邮件对话,我已经使该软件包起作用,但是我的数据集运行了5个小时(140 000项),并在此期间结束时给出极端估算。您可以在这里找到稍微更新的软件包 -我基本上只是更新了plot函数。
这可能只是一个调整问题,但是由于该软件无法轻松提供置信区间,并且该过程非常耗时,因此我现在正在寻找其他解决方案。
3)timereg包
令人印象深刻的timereg软件包也解决了这个问题,但是我不确定如何使用它,也无法给我一个顺利的过程。
4)分数多项式时间(FPT)模型
我发现Anika Buchholz在“评估随时间变化的疗法和预后因素的长期效果 ”方面的出色论文,在涵盖不同模型方面做得很好。她的结论是,Sauerbrei等人提出的FPT似乎最适合于时间相关系数:
FPT非常擅长检测时变效应,而“降低秩次”方法会导致模型过于复杂,因为它不包括时变效应的选择。
研究似乎很完整,但对我来说却有点遥不可及。自从她碰巧与Sauerbrei合作以来,我还有些纳闷。听起来似乎不错,但我想可以使用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