You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:24:05