Stata绘图-组间差异可视化:不良事件火山图、点阵图

发布时间:2021-07-07 阅读 214

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:保瑞 (中南财经政法大学)
邮箱br19965956@163.com


目录


1. 简介

本文拟介绍 aevolcanoaedot 两个命令。其中,aevolcano 命令由 Zink 等 (2013) 开发,可用于绘制不良事件火山图。火山图不仅可以显示组间差异显著的不良事件 (发生数),还可以可以用于识别不同治疗组的不良事件发生率差值 (Risk Difference,RD) 及风险率 (Risk Rate,RR) 等。火山图中的气泡表示出现不良事件,大小表示每个事件发生的频数,颜色表示处理效应的方向,颜色饱和度对应处理效应的统计显著性。

aedot 命令由 Amit 等 (2008) 开发,可用于绘制不良事件点阵图。aedot 可以同时得到点阵图和森林图,二者并排分布。左边点阵图展示的是每个事件发生率的组间绝对差值,右边森林图展示的是 95% 置信区间的相对风险 (Relative risk) 或风险差值 (Risk difference)。

2. 理论背景

新药上市前后会有各种临床研究,其目的之一是评价药物的安全性。安全性评价指标主要包括生命体征指标测量、实验室检查和不良事件观察等。其中,不良事件 (adverse event,AE) 是指患者或临床试验受试者接受一种药品治疗后出现的不良医学事件,但并不一定与药物有因果关系。当前不良事件分析最简单的方法是,根据发生不良事件的病人数除以接受治疗的病人总数得到的粗率。粗率能反映不良事件的发生的基本情况,但是难以反映所发生不良事件的细节和特点。

森林图、树图、火山图、韦恩图、生存函数图和风险函数图等是对不良事件可视化以提高数据分析效率的几种主要表现形式。其中,本文介绍的火山图、点阵图/森林图可以帮助研究者迅速找到具有显著组间差异的不良事件,进而对这些不良事件进行细致的分析。

3. aevolcano 命令

3.1 命令安装

cnssc 发布了!她是 ssc 的中文镜像,下载速度超快!只需在你的 ssc 命令前加上 cn 就可以实现外部命令极速下载!

. ssc install cnssc, replace
. cnssc install aevolcano, replace
. cnssc get aevolcano

3.2 语法介绍

aevolcano varname, treat(varname) id(varname) n1(integer) n2(integer) 
    [options: ylineyn(#) yaxismax(#) yline(numlist) labelyn(#) label(#)      
    labcol1(colorstyle) labcol2(colorstyle) mfcolor1(colorstyle) 
    mfcolor2(colorstyle) legendyn(#) legend1(string) legend2(string) 
    oddsratio(#) padj(#) fdrlower(varname) fdrhigher(varname) fdrval(#)]

3.2.1 必选项

  • treat(varname):指定数据集分组变量,要求是数值型变量;
  • id(varname):指定数据集种可以唯一识别的观测个体,要求是数值型变量,且一个 id 可对应多个事件;
  • n1(#):指定第一个治疗组的参与者总数;
  • n2(#):指定第二个治疗组的参与者总数。
. use example_volcano.dta, clear
. aevolcano aebodsys, treat(arm) id(usubjid) n1(30) n2(32)

结果如下图所示:

图中 x 轴表示所发生不良事件在试验组与对照组间的差值,y 轴表示统计显著性。Risk difference 大于 0,表示该不良事件试验组发生较多,小于 0 的点表示该不良事件安慰剂组发生较多,偏离 0 点越远表明组间差异越大。y 轴表示组间差异的显著性水平,点在 y 轴上的数值越大代表该不良事件组间差异的 p 值越小,统计学意义上越显著。气泡颜色表示不同组别,气泡大小则代表不良事件发生率 (发生事件总数)。

3.2.2 其它可选项

  • yaxismax(#):用于调整 y 轴的上限值,默认为 0;
  • ylineyn(#):取值为 0 或 1,用于指定是否在途中添加水平线,添加设置为 1,否则为 0。yline(numlist) 设定 ylineyn(1) 之后,则可以根据 y 的取值,设定水平线出现的位置,默认选项 yline(1),表示在 y=1 处添加水平线,yline(1 2) 表示在图中 y=1 和 y=2 处同时添加两条水平线;
  • labelyn(#):取值为 0 或 1,用于在气泡上标记。标记则设置为 1,否则为 0。默认标记具有统计显著性的变量,即 log10(p-value) > 1 的变量;
  • label(#):设置标记气泡 p 的阈值,默认 log10(p-value) > 1 时标记;
  • labcol(colorstyle):设定标记文本的显示颜色,例如 labcol(red),默认为黑色。另外可以根据变量分组 (上述示例中分为 2 组,即 n1, n2) 进行分组标记,例如 labcol1(colorstyle)labcol2(colorstyle)
  • mfcolor(colorstyle):设置气泡颜色 (不分组),默认是进行分组设置不同颜色。设置不同组别气泡颜色可以加入不同选项,例如 mfcolor1(orange)mfcolor2(green)
  • legendyn(#):用于添加图例,默认选项 legendyn(0) 表示不添加,添加则赋值为 legendyn(1)。具体可以按不同组别添加,例如 legend1(Risk in Group 2)legend2(Risk in Group 2)
  • oddsratio(#):默认情况下计算的是风险差异,若需要计算 odds ratio,添加 oddsratio(1) 即可。同理需要计算 risk ratio 时,加入 riskratio(1) 即可。需要注意的是,oddsratio(1)riskratio(1) 只能选择一项加入;
  • padj(#):表示是否采用统计中的错误发现率 (false discovery rate,FDR) 多重检验校正的 p 值来显示组间差异的显著性。默认设置为padj(0),即不进行校验,padj(1) 则表示采用 adjusted p-value 来表示显著性;
  • fdrhigher(varname) 设置 padj(1) 后需要加入 fdrhigher(varname)fdrlower(varname) 选项,其中 varname 分别表示不同层级的分类变量;
  • fdrval(#):表示错误发现率 (false discovery rate,FDR) 调整取值,默认取值为 0.1。
. use example_volcano.dta, clear
. aevolcano aebodsys, treat(arm) id(usubjid) n1(30) n2(31)    ///
      ylineyn(1) yaxismax(0.2) yline(1 2) labelyn(1)          ///
      label(0.5) labcol1(green) labcol2(red) mfcolor1(orange) ///
      mfcolor2(green) legendyn(1) legend1(Intervention)       ///
      legend2(Placebo) oddsratio(1) padj(1) fdrlower(ae_pt)   ///
      fdrhigher(aebodsys) fdrval(0.05)

结果如下图所示:

4. aedot 命令

4.1 命令安装

. cnssc install aedot, replace
. cnssc get aedot

4.2 语法结构

aedot aebodsys, treat(varname) id(varname) n1(#) n2(#)           ///
  [options: leftsymb1(symbolstyle) legendleft1(symbolstyle)      ///
  legendleft2(string) riskdiff(#) leftlabsize(#) rightxline(#)   ///
  leftxtitle(string) legendleftyn(#) legendrightyn(#)            ///
  brightmargin(#) trightmargin(#) logoff(#) rightxlabel(numlist) ///
  nummargin(#) margin(#) event1pos(#) event2pos(#) marginpos(string)]

4.2.1 必选项

aevolcano 类似,aedot 也包含 4 个必选项:

  • treat(varname):指定数据集分组变量,要求是数值型变量;
  • id(varname):指定数据集种可以唯一识别的观测个体,要求是数值型变量,一个 id 可对应多个事件;
  • n1(#):指定第一个治疗组的参与者总数;
  • n2(#):指定第二个治疗组的参与者总数。
. use example_dot.dta
. aedot aebodsys, treat(arm) id(usubjid) n1(30) n2(31)

结果如下图所示:

4.2.2 其它可选项

  • leftsymb(symbolstyle):给左边点阵图设定标记符号,默认为圆圈 leftsymb1(circle)。可分别设置多个组别显示符号,例如二分组可以加入两个选项 leftsymb1(symbolstyle)leftsymb2(symbolstyle)
  • legendleftyn(#):指定是否添加图例,添加为 legendleftyn(1),否则为 legendleftyn(0),默认添加。多个组别可以加入多个选项,例如示例分为 Placebo 组和 Intervention 组,加入 legendleft1(Placebo)legendleft2(Intervention) 即可;
  • riskdiff(#):用于显示相应置信水平下的相对风险 (Relative Risk) 或相应置信水平下的风险差值 (Risk Difference)。计算相对风险则为 riskdiff(0),计算风险差值则为 riskdiff(1)
  • leftlabsize(#):设定左侧标记文本字体大小,默认为 leftlabsize(1)
  • rightxline(#):在右边森林图上添加垂直参考线,默认为rightxline(0),括号内为数值;
  • leftxtitle(string):设置左图 X 轴标题,默认为 "Percentage",括号内为字符;
  • brightmargin(#):设置右图下边距,默认为 brightmargin(2),相对应地,trightmargin(#) 用于调整右图上边距,默认为 trightmargin(5)
  • logoff(#):用于设定是否在取对数的基础上计算相应置信区间的相对风险 (relative risk),默认为 logoff(0),即不取对数;
  • rightxlabel(numlist):自定义设置右边图形 X 轴的取值,默认为 rightxlabel(0.5 1 2)
  • nummargin(#):在右图添加空白边距,默认为 nummargin(0),即不添加;
  • event1pos(#):设定放置组 1 事件发生数的 X 轴位置,同理设置组 2,加入 event2pos(#) 即可;
  • marginpos(string):设定添加事件频数表的位置,marginpos(l) 表示放置在左侧,marginpos(r) 表示放置在右侧。
. use example_dot.dta, clear
. aedot aebodsys, treat(arm) id(usubjid) n1(30) n2(31)         ///
    legendleft1(Placebo) legendleft2(Intervention) riskdiff(0) ///
    leftlabsize(2) rightxline(1) leftxtitle(percent)           ///
    brightmargin(7) trightmargin(8) nummargin(1) margin(20)    ///
    event1pos(4.2) event2pos(5.5) marginpos(r)

结果如下图所示:

5. 参考文献

  • Zink R C, Wolfinger R D, Mann G. Summarizing the incidence of adverse events using volcano plots and time intervals[J]. Clinical Trials, 2013, 10(3): 398-406. -PDF-
  • Mehrotra D V, Adewale A J. Flagging clinical adverse experiences: reducing false discoveries without materially compromising power for detecting true signals[J]. Statistics in Medicine, 2012, 31(18): 1918-1930. -PDF-
  • Amit O, Heiberger R M, Lane P W. Graphical approaches to the analysis of safety data from clinical trials[J]. Pharmaceutical Statistics, 2008, 7(1): 20-35. -PDF-
  • Cornelius V, Cro S, Phillips R. Advantages of visualisations to evaluate and communicate adverse event information in randomised controlled trials[J]. Trials, 2020, 21(1): 1-12. -PDF-

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh