使用R包survival的tmerge()创建时依协变量出现NA值问题
问题原因与解决方案
1. 文档加粗部分含义
你引用的文档内容指的是:tdc()函数的第三个参数为协变量的初始值(即第一个指定的时间分界点之前的协变量取值),如果不主动指定,默认取值为NA,这个默认值是由survival包的全局选项tdcstart控制的。
你复现PBC示例时没有出现NA,是因为PBC示例中要么使用单参数tdc()(仅传入时间点,返回0/1变量,默认初始值为0),要么主动指定了初始值参数,所以不会生成缺失值。
2. 你报错的原因
你尝试指定init参数时应该是将参数写在了tmerge()的调用层级,而init是tdc()函数的入参,不属于tmerge()的参数,所以会报错。而设置全局tdcstart选项仅适合所有受试者初始值统一的场景,你的场景中每个受试者的基线vas值不同,本就不适合用全局设置的方式处理。
3. 修正代码
你只需要将基线vas值合并到随访数据框中,作为tdc()的第三个参数传入即可,修正后的代码如下:
library(tidyverse) library(survival) set.seed(123) # Generate data df_base <- tibble( ID = as.numeric(1:100), time = as.integer(runif(100, min = 100, max = 730)), status = as.factor(sample(x = c("0", "1"), prob = c(0.7, 0.3), size = 100, replace = T)), vas = as.integer(rnorm(n = 100, mean = 53, sd = 10))) df_fu <- tibble( ID = as.numeric(1:100), fu_3mo = 91, fu_vas = as.integer(rnorm(n = 100, mean = 44, sd = 15))) %>% # 重命名随访vas避免冲突 left_join(df_base %>% select(ID, base_vas = vas), by = "ID") # 合并基线vas到随访表 # 生成初始生存数据结构 df_tdc <- tmerge(df_base, df_base, id = ID, surgery = event(time, status)) # 生成时间依赖协变量,指定初始值为基线vas df_tdc <- tmerge(df_tdc, df_fu, id = ID, vas = tdc(fu_3mo, fu_vas, init = base_vas)) head(df_tdc)
运行后输出结果如下,0-91天区间的vas值已替换为对应受试者的基线值,无NA:
ID time status vas tstart tstop surgery 1 1 281 0 45 0 91 0 2 1 281 0 76 91 281 0 3 2 596 0 55 0 91 0 4 2 596 0 63 91 596 0 5 3 357 0 50 0 91 0 6 3 357 0 40 91 357 0
内容的提问来源于stack exchange,提问作者mejoh
相关产品推荐
相关产品推荐

