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))

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

相关推荐
Drone_xjw8 分钟前
从 GDB 到 CDB:C/C++ 程序调试的两把“手术刀”
c语言·开发语言·c++
SL-staff40 分钟前
智慧园区2000+设备统一管理:JVS-IoT如何降低运维成本40%
java·开发语言·物联网·智慧园区·设备管理·运维优化·jvs-iot
2zcode2 小时前
基于MATLAB图像处理的饮料瓶灌装液位检测系统设计与实现
开发语言·图像处理·matlab
必须得开心呀3 小时前
QT解决中文乱码问题
开发语言·qt
这不小天嘛4 小时前
JAVA八股——redis篇
java·开发语言·redis
逝水无殇5 小时前
C# 字符串(String)详解
开发语言·后端·c#
精明的身影6 小时前
C++自学之路1:Hello world
开发语言·c++
leo__5206 小时前
基于导航数据的扩展卡尔曼滤波(EKF)MATLAB 实现
开发语言·matlab
gugucoding7 小时前
25. 【C语言】二进制文件与随机读写
c语言·开发语言
北极星日淘7 小时前
中古货品品相评级算法实战|Java权重计分实现标准化五级品相体系
开发语言·python