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

关于用simmer R结合DES方法从删失数据模拟事件发生时间的技术咨询

结合simmer与flexsurv实现带协变量的事件时间模拟

完全可以将simmer(离散事件模拟工具)与flexsurv(生存建模工具)结合,实现从带协变量的删失患者数据中模拟事件发生时间,这是生存分析与离散事件模拟交叉场景下的常用做法。以下是具体的实现思路和代码示例:

核心步骤

  1. 用flexsurv拟合带协变量的生存模型(基于你的删失患者数据)
  2. 将拟合好的模型整合到simmer的模拟流程中,动态生成个体事件时间

代码示例

1. 加载依赖包

library(simmer)
library(flexsurv)
library(survival)

2. 准备删失生存数据(替换为你的真实数据)

这里先模拟一组带协变量的删失数据,用于后续模型拟合:

set.seed(123)
n <- 200

# 生成协变量
cov1 <- rnorm(n)  # 连续协变量
cov2 <- factor(sample(c("A", "B"), n, replace = TRUE))  # 分类协变量

# 生成真实事件时间(Weibull分布,受协变量影响)
true_time <- rweibull(n, shape = 2, scale = exp(0.5 + 0.3*cov1 + 0.2*(cov2 == "B")))

# 生成删失时间
cens_time <- runif(n, 5, 10)

# 构建观测数据(时间+事件指示)
obs_time <- pmin(true_time, cens_time)
event <- as.integer(true_time <= cens_time)
data <- data.frame(time = obs_time, event = event, cov1 = cov1, cov2 = cov2)

3. 用flexsurv拟合生存模型

以Weibull模型为例,你可以根据数据特性选择其他分布(如指数、对数正态等):

# 拟合带协变量的Weibull生存模型
fit <- flexsurvreg(Surv(time, event) ~ cov1 + cov2, data = data, dist = "weibull")
print(fit)

4. 整合到simmer模拟中

定义患者轨迹,动态生成协变量并基于拟合模型计算事件时间:

# 创建模拟环境
sim_env <- simmer("Survival Event Simulation")

# 定义患者轨迹:生成协变量 → 计算事件时间 → 等待至事件发生
patient_traj <- trajectory("Patient Flow") %>%
  # 为新患者生成协变量(可替换为真实患者的协变量数据)
  set_attribute("cov1", function() rnorm(1)) %>%
  set_attribute("cov2", function() sample(c("A", "B"), 1)) %>%
  # 根据协变量从拟合模型生成事件时间
  timeout(function() {
    # 获取当前患者的协变量值
    cov_val1 <- get_attribute(sim_env, "cov1")
    cov_val2 <- as.integer(get_attribute(sim_env, "cov2") == "B")
    
    # 基于模型参数计算Weibull分布的scale参数
    scale_val <- exp(fit$coefficients["(Intercept)"] + 
                      cov_val1*fit$coefficients["cov1"] + 
                      cov_val2*fit$coefficients["cov2B"])
    
    # 生成事件时间
    rweibull(1, shape = fit$coefficients["shape"], scale = scale_val)
  }) %>%
  log_("Event occurred for patient")

# 添加患者到达逻辑:每1单位时间到达1名患者
sim_env %>%
  add_generator("patient_", patient_traj, at(seq(0, 10, 1))) %>%
  run(until = 20)

关键说明

  • 模型适配性:如果你的数据更适合Cox比例风险模型,可使用flexsurvreg的dist="coxph",再通过逆变换法(基于个体生存函数)生成事件时间
  • 协变量来源:示例中模拟了协变量,实际项目中可直接导入真实患者的协变量数据,替换轨迹中的协变量生成逻辑
  • 删失处理:flexsurv在拟合模型时已自动考虑删失数据,因此生成的事件时间是基于模型的无偏估计

内容的提问来源于stack exchange,提问作者margauxto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 19:20:08