专栏首页老Z的博客Annotate Facility之森林图

Annotate Facility之森林图

森林图(Forest plot)是以统计指标和统计分析方法为基础,用数值运算结果绘制出的图型。它在平面直角坐标系中,以一条垂直的无效线(横坐标刻度为1或0)为中心,用平行于横轴的多条线段描述了每个被纳入研究的效应量和可信区间(confidence interval,CI)。森林图是Meta分析中最常用的结果表达形式,当然类似的结果也可以用森林图来展示,比如上图即展示了两处理组在各个亚组因素的反应率的差异的95%可信区间。

假设统计分析的结果如下:

在画图之前我们要构造一个变量,即图中的变量ORD2,以保证数据集中的记录在图中能按顺序来显示,如本例中可以通过以下程序来得到变量ORD2,其中的ORD1的值是根据分组因素顺序定义的:

ORD2=36-_N_-(ORD1-1);

开始画图:

  1. 画首尾部的字符串和X轴,因为首尾部要用到的是Graphics Output区域故要用 %system(3, 3),而X轴用的是Data区域故要用 %system(2, 2),代码如下:
/*字体*/
%let ftext ='Albany AMT/roman/medium';

/*编译宏*/
%annomac;

data anno1;
    length TEXT $200.;
    %system(3, 3);
    %label(52, 97, 'Treatment Difference', black, 0, 0, 1.2, &ftext., 5)
    %label(1, 92, 'Subgroup', black, 0, 0, 1.1, &ftext.,6);
    %label(63, 92, 'Difference(95%CI)', black, 0, 0, 1.1, &ftext.,6);
    %label(81, 95, 'Response Rates(%)', black, 0, 0, 1.2, &ftext., 6) ;

    %label(82, 92, 'TRTA', black, 0, 0, 1.1, &ftext., 6);
    %label(92, 92, 'TRTB', black, 0, 0, 1.1, &ftext., 6);

    %label(32, 6, 'Favors TRTA', black, 0, 0, 1.1, &ftext., 4);
    %label(56, 6, 'Favors TRTB', black, 0, 0, 1.1, &ftext., 6);

    %label(25.5, 4, '-70', black, 0, 0, 1.0, &ftext., 6);
    %label(60, 4, '70', black, 0, 0, 1.0, &ftext., 6);
    %label(44.0, 5, '0', black, 0, 0, 1.0, &ftext., 6);

    /*X轴*/
    %system(2, 2);
    %line(-70, 0, 70, 0, black, 1, 1);
run;
  1. 画分组因素、95%可信区间、反应率的值,因为要用Y轴的值加画布的百分比值来确定Graphics Output Area中的位置故用%system(3, 2),代码如下:
data anno2;
    set demo;
    length TEXT $200.;
    %system(3, 2);
    %label(2, ORD2, ITEM, black, 0, 0, 1, &ftext., 6);
    %label(63, ORD2, DIFLU, black, 0, 0, 1, &ftext., 6);
    %label(82.5, ORD2, RATE1, black, 0, 0, 1, &ftext., 6);
    %label(92.5, ORD2, RATE2, black, 0, 0, 1, &ftext., 6);
    drop ORD: ITEM DIFF LOW UP DIFLU RATE1 RATE2;
run;
  1. 画95%可信区间的线,代码如下:
data anno3;
    set demo;
    %system(2, 2);
    %line(LOW, ORD2, UP, ORD2, black, 1, 1);
    drop ORD: ITEM DIFF LOW UP DIFLU RATE1 RATE2;
run;
  1. 画参考线,代码如下:
data anno4;
    %system(2, 2);
    %line(0, 0, 0, 36, black, 2, 1);
run;
  1. 将Annotation的数据集连在一起:
data anno;
    set anno1-anno4;
run;
  1. 设置坐标属性,通过Marker Font来实现菱形显示DIFF的值,代码如下:
/*图形属性*/
symbol1 i=none v=p c=black f=marker h=1;

/*坐标轴*/
axis1 minor=none major=none order=(0 to 36 by 1) label=none value=none offset=(0, 5) origin=(0, 4) c=white;
axis2 minor=none order=(-70 to 70 by 70) label=none offset=(27, 40) origin=(0, 4) style=0 value=none;

goptions ftext=&ftext htext=8pt hsize=50cm vsize=16cm noborder;

/*画图*/
ods listing close;
proc gplot data=demo;
    plot ORD*DIFF/haxis=axis2
                  vaxis=axis1
                  anno=anno
                  nolegend
                  noframe;
run ;
quit;

ods rtf close;
ods listing;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何用SAS发送邮件

    SAS程序猿/媛在工作中可能会碰到需要用SAS来发送邮件通知的问题,如将一个宏程序执行信息或者某个程序生成的结果发送给指定用户。如上图,就是一个宏执行完毕后发送...

    专业余码农
  • Annotate Facility之生存曲线

    在研究肿瘤的临床实验中,通常要进行生存分析。其中最重要的分析方法之一就是乘积极限法(product-limit),简称积限法或PL法,它是由统计学家Kaplan...

    专业余码农
  • SAS中产生笛卡尔积的几种方法

    在平时写程序的时候,有时候我们在LOG中会看到类似下图的提示,而实际上笛卡尔积可能又的确是我们所要的结果。下面介绍几种产生笛卡尔积的方法。

    专业余码农
  • 资源 | 如何建设一个成熟的GitHub项目?

    人们出于各种原因在GitHub上发布他们的代码项目,大多数是因为他们想向公众展示编码技能或推广自己的产品。考虑到这一点,我们可以用4个标准点来定义“成功”的Gi...

    大数据文摘
  • BAT公司校招有增有减 ,盘点互联网公司2015年校园招聘

    在众多行业中,互联网在过往几年,也属于较热门的第一梯队之中。不过,在2015年的经济形势下,大家不由地疑问,互联网企业的招聘还会持续吗?

    华章科技
  • Equation Group(方程式组织)

    众所周知,Equation Group这一黑客团伙与美国国家安全局(NSA)的关系一直十分密切。而且外界也普遍认为,Equation Group是美国国家安全局...

    用户1631416
  • Linux调试工具

    Printf(“valriable x has value = %d\n”, x)

    战神伽罗
  • 使用request download 同步具有层级结构的equipment - scenario2

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)

    Jerry Wang
  • 机器学习day5

    网格搜索应该是最简单的超参数搜索算法。采用较大的搜索范围和较小的步长。十分耗费计算资源和时间。一般是先设置较大的搜索范围和较大的步长,来寻找全局最优值的可能位置...

    Rare0716
  • Redis的高级特性与应用场景(二)

    Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。 这意味着通常情况下一个请求会遵循以下步骤:

    憧憬博客

扫码关注云+社区

领取腾讯云代金券