我试图使用survival包来拟合一个使用左截尾数据的生存模型,但是我不确定正确的语法。
假设我们正在测量雇用时年龄(age)和工作类型(parttime)对公共卫生诊所医生就业时间的影响。医生是否退出或被审查是由censor变量指示的(0表示放弃,1用于审查)。这种行为是在18个月的时间内测量出来的。退出或审查的时间由两个变量表示,entry (开始时间)和exit(停止时间)表示医生受雇于诊所的时间。如果医生在窗口“打开”后开始工作,他们的entry时间设置为0。如果他们在窗口“打开”之前开始就业,那么他们的entry时间代表了他们在窗口“打开”时已经在该岗位上工作了多长时间,而他们的exit时间是指他们从最初被雇用时起的多长时间,他们要么辞职,要么受到窗口‘关闭’的审查。我们还假设age与就业持续时间(exit)之间存在双向互动关系.
这是玩具数据集。它比普通数据集要小得多,因此,考虑到数据的结构,估计值本身并不像所包含的语法和变量(使用R中的survival包)是否正确一样重要。玩具数据与Singer和Willet的应用纵向数据分析第15章中讨论的数据集具有完全相同的结构。我试着与他们报告的结果相匹配,但没有成功。关于如何对R中的左截数据进行生存分析,网上并没有很多明确的信息,而提供书籍代码的网站(这里)也没有为相关章节提供R代码。建模时变协变量和交互效应的方法在R中是相当复杂的,我只是想知道我是否遗漏了一些重要的东西。
这是玩具数据
id <- 1:40
entry <- c(2.3,2.5,2.5,1.2,3.5,3.1,2.5,2.5,1.5,2.5,1.4,1.6,3.5,1.5,2.5,2.5,3.5,2.5,2.5,0.5,rep(0,20))
exit <- c(5.0,5.2,5.2,3.9,4.0,3.6,4.0,3.0,4.2,4.0,2.9,4.3,6.2,4.2,3.0,3.9,4.1,4.0,3.0,2.0,0.2,1.2,0.6,1.9,1.7,1.1,0.2,2.2,0.8,1.9,1.2,2.3,2.2,0.2,1.7,1.0,0.6,0.2,1.1,1.3)
censor <- c(1,1,1,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,rep(1,20))
parttime <- c(1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0)
age <- c(34,28,29,38,33,33,32,28,40,30,29,34,31,33,28,29,29,31,29,29,30,37,33,38,34,37,37,40,29,38 ,49,32,30,27,35,34,35,30,35,34)
doctors <- data.frame(id,entry,exit,censor,parttime,age)现在轮到模特了。
coxph(Surv(entry, exit, 1-censor) ~ parttime + age + age:exit, data = doctors)考虑到数据的结构和我们想知道的内容,这是指定模型的正确方法吗?这里的答案表明它是正确的,但我不确定,例如,交互变量是否被正确指定。
发布于 2018-05-01 20:25:11
就像通常的情况一样,直到我发布了一个关于问题的问题,我才想出了如何自己去做。如果存在与时间预测器的交互,则需要将数据集转换为计数过程、人员周期格式(即长表单)。这是因为每个参与者都需要一个时间间隔来跟踪他们对事件的状态,直到他们退出研究时,数据集中的任何人都会知道事件发生的每个时间点。
首先,让我们设置一个事件变量
doctors$event <- 1 - doctors$censor在运行cox模型之前,我们需要在survSplit包中使用survival函数。要做到这一点,我们需要生成事件发生时所有时间点的向量。
cutPoints <- order(unique(doctors$exit[doctors$event == 1]))现在我们可以将它传递到survSplit函数中来创建一个新的数据集.
docNew <- survSplit(Surv(entry, exit, event)~.,
data = doctors,
cut = cutPoints,
end = "exit")..。然后我们运行我们的模型
coxph(Surv(entry,exit,event) ~ parttime + age + age:exit, data = docNew)瞧!
https://stackoverflow.com/questions/50109716
复制相似问题