我正在阅读第15章
应用纵向数据分析
Singer和Willett关于扩展Cox回归模型,但加州大学洛杉矶分校网站
here
本章没有示例R代码。我正在尝试重新创建关于时变协变量的部分,并且一直在研究如何从提供的个人级数据框架创建计数过程数据集。我已经看过了
survival
打包vignette,但在创建自己的数据集时遇到问题。这是以辛格和威利特为例的玩具数据,预测17至40岁男性首次使用可卡因的时间。
id
是ID,
ageInit
是首次使用可卡因或审查可卡因的年龄,
used
是事件日志,指示首次使用可卡因(
1
)或审查(
0
)。有一个时不变预测器
earlyMJ
,表明17岁之前使用过大麻。还有三个时变协变量需要通知数据集的创建:
timeMJ
,这是17岁以后首次使用大麻的年龄,
sellMJ
这是一个贩卖大麻的时代
odFirst
,这是首次使用其他药物的年龄。
NA
这些预测因子中的s表示参与者在任何时候都没有执行有问题的动作。
set.seed(1356)
df <- data.frame(id = 1:6,
ageInit = c(25,34,40,29,27,40),
used = c(0,1,1,0,1,1),
earlyMJ = c(0,0,1,0,1,1),
timeMJ = c(18,27,22,21,22,19),
sellMJ = c(NA,NA,25,NA,35,NA),
odFirst = c(19,22,35,NA,22,34))
按照Therneau等人的过程
生存
vignette我们创建了第二个数据集,在这种情况下,重新表示结果变量
ageInit公司
和时变预测因子,即研究开始后的年数(即17岁)。
tdata <- with(df, data.frame (id = id,
usedTime = ageInit - 17,
timeToFirstMJ = timeMJ - 17,
timeToSellMJ = sellMJ - 17,
timeToFirstOD = odFirst - 17,
usedCocaine = used))
我们将此新数据与原始数据集合并,通过
event()
调用,两个新列表示每个协变量的时间间隔。我们还通过
tdc()
call,每次参与者经历一个协变量事件时,他们都会换一行。
sdata <- tmerge(df, tdata,
id=id,
firstUse = event(futime, usedCocaine),
t1MJ = tdc(timeToFirstMJ),
t1SMJ = tdc(timeToSellMJ),
t1OD = tdc(timeToFirstOD),
options= list(idname="subject"))
attr(sdata, "tcount")
问题是,当我使用时不变和一些时变协变量运行考克斯回归时,我无法使模型工作。
coxph(Surv(tstart, tstop, firstUse) ~ earlyMJ + t1SMJ + t1OD, data= sdata, ties="breslow")
并得到无意义系数和警告信息
In fitter(X, Y, strats, offset, init, control, weights = weights, :
Loglik converged before variable 1,3 ; beta may be infinite.
此外,我甚至不知道这是否是一个正确的计数过程数据帧,因为在Singer和Willett中,他们建议每个参与者每次都需要有一行
任何人
在数据集中体验事件。
如果您能在这些问题上提供任何指导,我们将不胜感激。