使用R语言stpm2包绘制风险比图:tvc参数设置疑问
关于stpm2中tvc参数的设置与时变风险比绘图
首先明确:stpm2的tvc参数用于指定哪些协变量的系数随时间变化,格式为列表,键是协变量名称,值为该协变量时变系数的样条自由度(或与全局df一致的设置)。
针对你的0/1分类用药变量typeofmed,要绘制随时间变化的风险比(HR),必须让typeofmed的系数随时间变化,因此tvc参数应按如下设置:
tvc = list(typeofmed = 4)
这里的4和你设置的全局df=4保持一致,即用4个自由度的样条拟合typeofmed的时变系数。如果想直接沿用全局df,也可以简化写为:
tvc = list(typeofmed = TRUE)
完整修正后的代码
# 拟合时变系数模型 fpmh <- stpm2(Surv(time, event) ~ typeofmed, data = cancer, tvc = list(typeofmed = 4), df = 4) summary(fpmh) # 准备绘图数据(确保typeofmed为因子类型) med <- levels(factor(cancer$typeofmed)) newdata1 <- data.frame(typeofmed = med[1]) # 绘制组1的风险函数 plot(fpmh, newdata = newdata1, xlab = "Time since diagnosis (years)", type = "haz") # 绘制随时间变化的风险比(typeofmed=1 vs typeofmed=0) plot(fpmh, newdata = newdata1, xlab = "Time since diagnosis (years)", type = "hr", var = "typeofmed", ci = FALSE, ylim = c(0,6))
关键说明
- 只有在
tvc中包含typeofmed时,模型才会拟合随时间变化的系数,进而得到时变风险比;如果不设置tvc,模型会输出固定系数,HR为常数,绘图会是一条水平直线。 - 建议提前将
typeofmed转换为因子类型,避免levels()无法正确识别分组。
内容的提问来源于stack exchange,提问作者user23634522
相关产品推荐
相关产品推荐

