R使用multinma程序包实现生存数据的贝叶斯网状meta分析

前言

multinma是由Phillippo 开发的程序包,主要用来实现基于IPD校准的多水平网状Meta回归(ML-NMR),同时该程序包也可以用来实现传统的网状meta分析。今天的文章介绍如何使用multinma程序包实现生存数据的贝叶斯网状meta分析,用来评估6种免疫疗法*( Camrelizumab、Tislelzumab、Toripalimab、Sintilimab、Pembrolizumab、Nivolumab)*联合化疗方案治疗一线晚期或转移性鳞状食管癌的NMA。

程序包及数据加载

首先是相关程序包安装及加载,其次是数据的加载,multinma的数据要求与gemtc相同,多一列每种干预措施的样本量。

复制代码
install.packages("multinma")
library(tidyverse)
library(multinma)
library(bayesplot)
library(cowplot)
OS <- read_csv("OS_HR.csv")

模型初始设定与网状证据图

通过set_agd_contrast进行模型的初始设定,然后使用plot函数进行网状证据图的绘制。

复制代码
nma.set = set_agd_contrast(OS,
                          trt_ref = "che",
                          study = Study,
                          trt = Treatment,
                          y = logHR,
                          se = std.err,
                          sample_size = n)

plot(nma.set, 
     weight_edges = TRUE)

运行模型

使用nma函数运行NMA模型

复制代码
os.nma<- nma(
            nma.set,
            trt_effects = "fixed",               
            likelihood = "normal",               
            link = "identity",                 
            seed = 123,
            adapt_delta = 0.90,
            warmup = 20000,
            iter = 40000,
            chains = 4)

模型运行过程

模型结果

使用dic查看模型拟合优度,可以对比固定模型和随机效应模型(DIC越小模型效果越好)

复制代码
dic(os.nma)
--------------------------------------------------
Residual deviance: 6 (on 6 data points)
               pD: 6
              DIC: 12

mcmc诊断图

绘制贝叶斯需要诊断的三类图mcmc_trace(轨迹图)、mcmc_neff (有效样本量与总样本量的比率)和mcmc_rhat(Rhat是一种收敛诊断方法,它比较了各条链的参数估计值,Rhat值接近1说明链已经收敛并且混合良好;如果Rhat值为1.05或更高,表明存在收敛问题,需增大迭代量)

复制代码
diag_plot <- function(model, pars_list, ncol_trace){
  color_scheme_set("teal")
  plt_1 <- 
    mcmc_trace(as.array(model), 
               pars = pars_list,
               facet_args = list(ncol = ncol_trace, 
                                 strip.position = "left")) + 
    theme_classic() + 
    theme(
      axis.text = element_blank(),
      axis.ticks = element_blank(),
      strip.background = element_blank(),
      strip.text = element_blank(),
      legend.position = "none"
    )
  
  plt_2 <- 
    neff_ratio(model, 
               pars = pars_list) %>%
    mcmc_neff() +
    theme_classic() + 
    theme(
      legend.position = "none"
    )
  
  plt_3 <-
    rhat(model, pars = pars_list) %>%
    mcmc_rhat() + 
    #theme_+ 
    theme(
      legend.position = "none"
    )
  
  grid <-
    plot_grid(plt_2, plt_3, ncol = 2, align = "hv", axis = "b",
              rel_widths = c(1, 0.5))
  
  plot_grid(plt_1, grid, ncol = 1, align = "hv", axis = "l",
            rel_heights = c(0.5, 1))
  
}

diag_plot(model = os.nma$stanfit,
          pars_list = c("d[cam_plus_che]",
                        "d[niv_plus_che]",
                        "d[pem_plus_che]",
                        "d[sin_plus_che]",
                        "d[tis_plus_che]",
                        "d[tor_plus_che]"),
          ncol_trace = 3)

森林图

使用plot绘制森林图(需要对模型结果进行log转换)

复制代码
plot(os.nma, ref_line = 1)+
  scale_x_continuous(breaks = log(seq(0.2, 1.8, 0.2)),
                     labels = seq(0.2, 1.8, 0.2),
                     limits = log(c(0.4, 2

还可以绘制后验分布面积图对森林图进行美化

复制代码
plot(os.nma, 
     pars = "d",
     stat = "halfeye",
     point_interval = ggdist::median_hdi,
     .width = 0.95,
     ref_line = 0) + 
  aes(fill = stat(x < 0))+
  scale_x_continuous(breaks = log(seq(0.2, 1.6, 0.2)),
                     labels = seq(0.2, 1.6, 0.2),
                     limits = log(c(0.4, 1.6)))+
  scale_fill_manual(values = c("#BFBFBF","#5C8286"))

概率排序图

使用posterior_rank_probs计算不同干预措施排序的概率

复制代码
rankprobs <- posterior_rank_probs(os.nma)
plot(rankprobs)

通过设置sucra=TRUE,cumulative = TRUE计算不同干预措施排序的累积概率

复制代码
cumrankprobs <- posterior_rank_probs(os.nma, 
                                     sucra=TRUE,
                                     cumulative = TRUE)
 plot(cumrankprobs)                                                               

使用posterior_ranks计算不同干预措施成为最优方案的排序

复制代码
ranks <- posterior_ranks(os.nma,lower_better=TRUE)
plot(ranks)

此外还可以对nma函数设置consistency="nodesplit"进行节点分割法判断模型的一致性,由于本次模型干预措施未连成网状,遂未展示。更多的功能与丰富案例可参考其官方手册。

参考文献

1\] https://dmphillippo.github.io/multinma/articles/example_hta_psoriasis.html. \[2\] 小侃数据:手把手系列教程\|基于贝叶斯学派使用R的multinma包做连续变量网状meta分析(https://mp.weixin.qq.com/s/se9fQe4CT4CEJbLQ-o5AZA) \[3\] Gao, Tian-Tian et al. "Comparative efficacy and safety of immunotherapy for patients with advanced or metastatic esophageal squamous cell carcinoma: a systematic review and network Meta-analysis." BMC cancer vol. 22,1 992. 17 Sep. 2022, doi:10.1186/s12885-022-10086-5IF: 3.8 Q2.

相关推荐
星期天要睡觉5 小时前
机器学习深度学习 所需数据的清洗实战案例 (结构清晰、万字解析、完整代码)包括机器学习方法预测缺失值的实践
人工智能·深度学习·机器学习·数据挖掘
山烛6 小时前
矿物分类系统开发笔记(二):模型训练[删除空缺行]
人工智能·笔记·python·机器学习·分类·数据挖掘
Tezign_space10 小时前
特赞内容运营解决方案,AI重构品牌内容价值链
大数据·人工智能·数据挖掘·产品运营·内容运营·内容+ai·agentai
梦想的初衷~10 小时前
“R+遥感”的水环境综合评价方法实践技术应用
r语言·水环境·水文
数据超市1 天前
香港数据合集:建筑物、手机基站、POI、职住数据、用地类型
大数据·人工智能·智能手机·数据挖掘·数据分析
一个专注api接口开发的小白1 天前
Python + 淘宝 API 开发:自动化采集商品数据的完整流程
前端·数据挖掘·api
ccut 第一混1 天前
python基于机器学习进行数据处理与预测(火灾的三因素回归问题)
神经网络·机器学习·数据挖掘·回归·预测
极限实验室1 天前
喜报!极限科技获得国际专利正式授权——美国发明专利《Data Partitioning Method and Data Processing Method》
数据挖掘
用户199701080181 天前
抖音商品列表API技术文档
大数据·数据挖掘·数据分析
木木子99991 天前
第5问 对于数据分析领域,统计学要学到什么程度?
数据挖掘·数据分析