问题描述
这是我在 stackoverflow 中的第一篇文章。我已尝试根据指南提出问题。
我目前正在研究边缘结构模型。我已经阅读了 Hernan 关于这个主题的大部分文章,并阅读了他的书 What if 和提供的 R 代码。 然而,我发现的所有例子都相当直接。例如,患者在随访开始时接受或不接受治疗 A,并在整个时间内保持该治疗。我发现很难将我学到的知识应用到我的数据集上。
我的数据集是关于事件发生时间的数据。在患者的随访期间,他们可以接受治疗 A。一些患者在随访开始时已经接受了治疗 A,而其他患者则在随访期间开始或根本没有接受治疗。此外,接受治疗 A 的患者可以在随访期间停止治疗并再次重新开始治疗,即随时间变化的治疗。
在这里,我提供了一个示例数据集,其中包含时间到事件数据的原始 MSM 代码。我没有使用 Cox PH 回归,而是使用混合逻辑回归,其优势比类似于 Cox 模型的风险比。为简单起见,我没有计算删失权重。
set.seed(1948)
idvar<-1:100 #100 subjects
v1<-sample(c(0,1),replace=TRUE,size=length(idvar)) #One baseline variable
time<-sample(1:100,size=length(idvar)) #Follow-up time
event<-sample(c(0,size=length(idvar)) #End of follow-up event. If 0 patients either reached administrative censoring or a competing event
df<-data.frame(idvar,v1,time,event) #Create dataframe
library(splitstackshape)
df.expand<-expandRows(df,"time",drop = F) #Create dataframe with 1 row per 1 unit of time per subject
df.expand$time_1 <- sequence(rle(df.expand$idvar)$lengths)-1 #Calculates times in expanded dataframe
df.expand$event_true <- as.factor(ifelse(df.expand$time_1==df.expand$time-1 & #Only event at last follow-up
df.expand$event==1,1,0))
df.expand$treatment<-sample(c(0,size=nrow(df.expand)) #Time-varying treatment
df.expand$v2<-sample(c(0,size=nrow(df.expand)) #Time-varying covariate
#Calculate weights. Need help here
pred_dnom = predict(glm(treatment~factor(v1) + factor(v2),#Time-varying covariates only in denominator
data = df.expand,family = binomial(link = "logit")),type = "response")
pred_num = predict(glm(treatment~factor(v1),data = df.expand,type = "response")
df.expand$sw <- ifelse(df.expand$treatment == 0,((1 - pred_num) / (1 - pred_dnom)),(pred_num / pred_dnom))
##Normally I would also calculate censoring weights and multiply those with the treatment weights##
fit1<-glm(event_true==1~treatment+factor(time_1),weights = sw,family = binomial(link = "logit"))
然而,在上面的例子中,权重没有考虑以前的治疗历史和随时间变化的混杂治疗历史。 所以我的问题是,如何将这些历史纳入时变处理。 Fewell et al. 撰写的这篇文章描述了针对时变治疗但患者无法退出并重新开始治疗的方法。 我引用:
为了估计每个受试者的完整治疗史的概率,直到每个 月(3 中的分母),我们乘以他们观察到的估计概率 每个月的治疗随着时间的推移累积。第一次估计概率 对于每个主题都保持原样。对于所有其他人,当前的估计概率 时间点乘以前一个时间点的估计概率。 [Fewell Z、Hernán MA、Wolfe F、Tilling K、Choi H、Sterne JAC。使用边际结构模型控制瞬态混杂。斯塔塔杂志。 2004;4(4):402-420。 doi:10.1177/1536867X0400400403]
从他们文章的代码中可以看出,一旦患者开始治疗,他们的权重就会设置为 1。 我知道很多人用来计算权重的另一种方法是 ipw package。但是,这个包也会在患者开始治疗时将权重设置为 1,之后权重也保持为 1。
ipw 包的一位作者也为 Grafféo et al. 的文章做出了贡献,该文章扩展了 ipw 包以允许随时间变化的权重。他们通过计算未接受治疗时开始治疗的权重和治疗时停止治疗的权重来实现这一点。 (代码可作为文章中的支持信息) 然而,他们没有考虑治疗的历史/随时间变化的混杂因素。
更准确地说,我们没有考虑混杂治疗暴露的整个历史,而只考虑了在时间 t 感兴趣的暴露仅取决于在时间 t 给出的混杂治疗。然后,不是计算直到第一次修改感兴趣的曝光时的权重,而是为所有时间点计算权重,即为所有事件状态的处理变化和所有事件时间计算权重。 [Grafféo,N,Latouche,A,Geskus,RB,Chevret,S. 使用治疗权重的逆概率对时变暴露进行建模。生物统计学杂志。 2018 年; 60:323–332。https://doi.org/10.1002/bimj.201600223]
他们建议如下
我们没有考虑混杂因素的历史。对于感兴趣的暴露与混杂因素之间的关系中的每个转换,可以使用不同的模型来解决这个问题。需要进一步的工作来研究这种建模选项。最简单的方法是在治疗模型中包含一个先前暴露的计数器作为协变量。 [Grafféo,S. 使用治疗权重的逆概率对时变暴露进行建模。生物统计学杂志。 2018 年; 60:323–332。https://doi.org/10.1002/bimj.201600223]
因此,Fewell 的方法确实结合了治疗和随时间变化的变量历史,但在开始治疗后不允许权重发生变化。 Grafféo 的方法确实允许权重随时间变化,但不包含处理和随时间变化的变量历史。 所以我真正想要的是将这些方法结合起来,但我绝对不知道这怎么可能。
我希望我的问题很清楚(并正确提出)并且有人有建议。谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)