R语言使用TrialEmulation包快速进行数据模拟RCT研究(真实世界研究)

在医学研究中,随机对照试验(RCT)一直是验证疗效和安全性的"金标准"。但在现实世界中,受限于伦理、成本或可行性,我们往往无法开展完美的RCT。基于"目标试验模拟"(Target Trial Emulation)框架的大数据分析法。简单来说,就是先在脑海中设计一个完美的理想试验,然后利用现有数据去尽可能"复刻"它。如果模拟成功,我们就能从观察性数据中得到接近RCT的因果效应估计值。简单来说,模拟RCT研究目的就是在回顾性的数据中,创造能用于分析的rct队列。

既往咱们已经对模拟RCT研究进行了初步介绍,今天咱们使用TrialEmulation包来对具体数据进行模拟RCT研究(真实世界研究)分析,这个R包进行模拟RCT研究(真实世界研究)分析非常简单,咱们先导入数据和R包

r 复制代码
setwd("E:/公众号文章2026年/模拟目标实验")
library(TrialEmulation)
library("splines")
load("simdata.Rdata")
working_dir <- getwd()

这是一个比较简单的数据,id是个体的标识编码, t 是随访/时期编号,A是咱们的研究变量,是否接受治疗,X1-X4属于协变量,age 是对应于 t 的个体年龄,age_s 是标准化年龄,Y 是对应于 t 的结局事件二元指标。C 是对应于 t 的删失指标。eligible 是对应于 t 的目标试验资格指标。glm_function是加权模型,glm这里用于二分类结局的加权

TrialEmulation包进行模拟RCT只需要两步,第一步就是整理数据,data这里是数据,period放入时间,treatment是咱们的研究变量,outcome是结局变量,estimand_type指数据处理方式,有"ITT", "PP", "As-Treated"三个方式,cense_d_cov和cense_n_cov用于构造逆概率加权,

r 复制代码
prep_ITT_data <- data_preparation(
  data = simdata_censored,
  id = "ID", period = "t", treatment = "A",
  outcome = "Y", 
  estimand_type = "ITT",
  outcome_cov = ~ X1 + X2 + X3 + X4 + age_s,  #RHS公式,其中基线协变量将在模拟试验的边缘结构模型中进行调整
  use_censor_weights = TRUE, cense = "C",
  cense_d_cov = ~ X1 + X2 + X3 + X4 + age_s,#逆概率分母
  cense_n_cov = ~ X3 + X4,  #逆概率分子
  pool_cense = "numerator",
  data_dir = working_dir, save_weight_models = F,
  glm_function = "glm")

提取生成的数据

r 复制代码
dt<-prep_ITT_data[["data"]]

生成数据如下

整理一下数据

r 复制代码
prep_ITT_data$data<-prep_ITT_data$data[order(prep_ITT_data$data$id,
                                             + prep_ITT_data$data$trial_period,prep_ITT_data$data$followup_time),]

在新的数据里面,已经多出了权重,咱们就可以继续分析了,prep_ITT_data$data是加权整理后的数据,outcome_cov这里定义边缘架构模型,include_followup_time这里对时间进行了一个样条化处理,应对非直线关系,

r 复制代码
ITT_result <- trial_msm(prep_ITT_data$data,
                        estimand_type = "ITT",
                        outcome_cov = ~ X1 + X2 + X3 + X4 + age_s,
                        model_var = "assigned_treatment",
                        include_followup_time = ~ ns(followup_time, df = 3),
                        glm_function = "glm",
                        use_sample_weights = FALSE,
                        quiet = TRUE)

在这里数据中,加权后的模型系数经过稳健标准误进行了修正(一般方法有:稳健标准误,重抽样,三明治),

r 复制代码
summary(ITT_result, digits = 1)

接下来我们选择trial_period == 0中的个体作为目标人群

r 复制代码
new_data <- prep_ITT_data$data[prep_ITT_data$data$trial_period == 0,]
new_data <- rbind(data.table::as.data.table(prep_ITT_data$data_template),new_data)

获取累积发生率

r 复制代码
set.seed(20222022)
ITT_cuminc <- predict(ITT_result, new_data, predict_times = c(0:9))

绘图,图片表示治疗组和未治疗组随着时间推移的疾病累积发生率,治疗组明显低于为治疗组。

相关推荐
无风听海2 小时前
NET10之C# Primary Constructor 深度指南
开发语言·c#·.net10
Omics Pro2 小时前
基因集(模块)活性量化:R语言+Java原生
大数据·开发语言·前端·javascript·数据库·r语言·aigc
RDCJM2 小时前
index.php 和 php
开发语言·php
sycmancia2 小时前
C++——Qt中的消息处理
开发语言·qt
biter down2 小时前
深入浅出 C++ string 类:从原理到实战
开发语言·c++
okiseethenwhat2 小时前
反射在 JVM 层面的实现原理
开发语言·jvm·python
星梦清河2 小时前
Java并发编程
java·开发语言
XiYang-DING3 小时前
【Java SE】sealed关键字
java·开发语言·python
祈澈菇凉3 小时前
Next.js + OpenAI API 跑通一个带流式输出的聊天机器人
开发语言·javascript·机器人