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

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

相关推荐
Yeauty17 分钟前
渲染成图再 CLI 拼接,还是进程内直推?Rust 帧到视频的两条路
开发语言·rust·音视频
geovindu1 小时前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
库克克1 小时前
【C++】set 与multiset
开发语言·c++
Wang's Blog2 小时前
Go-Zero项目开发34: 微服务超时控制与重试机制实践
开发语言·微服务·golang·go-zero
2zcode2 小时前
项目文档:基于MATLAB神经网络的心力衰竭预测与临床辅助决策系统研究
开发语言·神经网络·matlab·心力衰竭预测\
减瓦3 小时前
深入 Quarkus:云原生时代 Java 的重生之路
java·开发语言·云原生
杨运交3 小时前
[053][核心模块]Java枚举缓存与ORM集成实践
java·开发语言·缓存
2401_894915534 小时前
Geo优化系统源码部署搭建技术——PHP程序开发部署指南
开发语言·php
wuyk5554 小时前
67.嵌入式C语言进阶:结构体指针实战指南——STM32外设、传感器数据访问的高效技巧
c语言·开发语言·stm32·单片机
找磁材4 小时前
空心杯电机与永磁体
开发语言·磁性材料·钕铁硼·磁钢