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

使用JMBayes2进行随访时间外预测的技术问题咨询

使用JMBayes2包生成长期预测的问题

我正在用JMBayes2包模拟数据范围外的结局,研究包含认知功能替代指标的纵向结局,以及认知功能“状态改变”的二分类结局,操作中遇到两个核心问题:

  • 无法提取联合模型的基线风险:从GitHub代码来看,模型始终采用样条,但不知道如何提取相关信息。联合模型对象$statistics下的bs_gammas似乎与基线风险样条相关,但没法根据这些信息确定基线风险——如果能获取样条方程,我可以自行生成生存概率。
  • predict.jm函数无法对建模数据的最大范围外做预测:请求预测超出数据最大随访时间的点时,结果里不会包含该点。

解决其中任意一个问题,都能帮我生成长期预测。

演示代码

library(JMbayes2)
library(dplyr)
pbc2$years %>% max ## 最大随访时间为14.3年
pbc2.id$status2 <- as.numeric(pbc2.id$status != 'alive')
SurvFit <- survreg(Surv(years, status2) ~ sex, data = pbc2.id, dist = "weibull")
fm1 <- lme(log(serBilir) ~ ns(year, 3) * sex, data = pbc2,
           random = ~ ns(year, 3) | id, control = lmeControl(opt = 'optim'))

jointFit <- jm(CoxFit, fm1, time_var = "year")

## 选择需要预测的患者数据
t0 <- 3
ND <- pbc2[pbc2$id %in% c(2, 25), ]
ND <- ND[ND$year < t0, ]
ND$status2 <- 0
ND$years <- t0

# 基于新数据预测纵向结局
predLong1 <- predict(jointFit, newdata = ND, return_newdata = TRUE
                     , process = "event"
                     , times = 14:15 ## 一个在最大随访时间内,一个超出
                     )
predLong1 %>% dplyr::select(id, year, pred_CIF)

输出结果

id year  pred_CIF
6      2    3 0.0000000
6.1    2   14 0.5943413
171   25    3 0.0000000
171.1 25   14 0.2668998

可以看到,请求的第15年随访数据未出现在结果中。

补充说明

我更倾向于让联合模型使用参数化基线风险分布,但即便在输入生存模型时指定了Weibull分布,JMBayes2似乎还是会生成样条。

后续补充(时隔一年)

始终没能实现JMBayes2的超数据范围预测。用JM包的系数可以轻松构建风险函数并做预测,但JMBayes2在模型估计中做了我无法复现的缩放处理,导致没法用它的系数完成同样操作。


内容的提问来源于stack exchange,提问作者Pieter van der Veere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:42:07