中国各省新冠肺炎死亡率的可视化-漏斗图
2023-06-16

对于可视化一种比率(如:死亡率)要特别小心。因为在考虑到比率的大小外,还要考虑到样本数据的大小。

例如:武汉市确诊病例10000例,死亡病例100例,那么死亡率是 1% ; 北京市确诊病例10例,死亡病例1例,那么死亡率是 10% 。如果单独看死亡率,北京是武汉的10倍,北京的疫情要比武汉严重的多,但事实并非如此。这是因为北京的样本量太小,其死亡率不可信,或者说其死亡率的变动太大。

如果用条形图展示死亡率,会导致北京疫情比武汉严重的错误结论。漏斗图既考虑了死亡率又考虑了样本量大小的因素。它是一种带置信限的散点图,显示了在不同样本量下期望的死亡率的范围,可以判断哪些省份的死亡率在期望范围内,哪些省份的死亡率在期望范围外。



SAS代码如下:



options validvarname=any;

data have;

infile cards expandtabs truncover;

input 地区 :$20.  新增 现有 确诊病例 治愈 死亡 ;

死亡率 = 死亡 / 确诊病例;

if 地区 in ('香港' '台湾' '湖北' '海南' '北京' '贵州') then Label = 地区;

cards;

香港 0    78465    98135    18926    744

台湾 0    5938    20533    13742    853

广东 115    893    4800    3899    8

上海 38    510    4388 

浙江 0    245    2265    2019    1

辽宁 0    207    1027    818    2

江苏 0    128    1779    1651    0

北京 5    113    1484    1362    9

福建 0    91    1561    1469    1

四川 6    88    1468    1377    3

云南 3    81    1959    1876    2

山东 6    44    1138    1087    7

湖北 0    37    68357    63808    4512

天津 0    33    1126    1090    3

黑龙江 0    21    2084    2050    13

山西 1    17    285    268    0

吉林 1    15    606    588    3

河南 1    11    2667    2634    22

甘肃 0    10    368    356    2

重庆 0    7    620    607    6

安徽 0    3    1012    1003    6

湖南 0    3    1233    1226    4

澳门 0    2    81    79    0

海南 0    1    191    184    6

宁夏 0    0    122    122    0

江西 0    0    959    958    1

新疆 0    0    996    993    3

河北 0    0    1476    1469    7

西藏 0    0    1    1    0

贵州 0    0    162    160    2

青海 0    0    30    30    0

陕西 0    0    2826    2823    3

;

proc sql noprint; 

/* 计算全国的死亡率 */

 select  sum(死亡)/sum(确诊病例) into :AvgProp  from have;

 select  round(max(确诊病例)+20,50) into :max  from have;

quit;

%put &=AvgProp;

data limit;

do n = 4 to 200 by 10 , 200 to &max. by 50;

/*置信下限*/

      r = quantile("binom", 0.025, &AvgProp., n);

      numer = cdf("binom", r  , &AvgProp., n) - 0.025;

      denom = cdf("binom", r  , &AvgProp., n) - cdf("binom", r-1, &AvgProp., n);

      alpha = numer / denom;

      L2sd= (r-alpha)/n;

      if L2sd<0 then L2sd=0;

/*置信上限*/

      r = quantile("binom", 0.975, &AvgProp., n);

      numer = cdf("binom", r  , &AvgProp., n) - 0.975;

      denom = cdf("binom", r  , &AvgProp., n) - cdf("binom", r-1, &AvgProp., n);

      alpha = numer / denom;

      U2sd= (r-alpha)/n;

      if U2sd<0 then U2sd=0;

output;

end;

keep n L2sd U2sd;

run;

data want;

 set have limit;

run;

title "中国各省新冠肺炎死亡率";

proc sgplot data=want noautolegend;

band x=N lower=L2sd upper=U2sd /

     fill fillattrs=GraphConfidence outline lineattrs=GraphPrediction  transparency=0.6

     curvelabelloc=outside curvelabelupper="置信上限" curvelabellower="置信下限";

scatter x=确诊病例  y=死亡率 /  datalabel=Label ;

refline &AvgProp. / axis=y label="中国新冠肺炎死亡率=%sysfunc(putn(&AvgProp.,8.3 -l))"  lineattrs=GraphData2 label;

xaxis grid ;

yaxis grid Label="死亡率" max=0.067 ;

run;



结果如下:

1.png




上图中红色线条表示中国新冠肺炎的整体死亡率,蓝色部分表示其置信限,是其的期望/正常范围。可以看到其置信限是随着确诊病例(样本量)的变化而变化,呈现一个漏斗形状。

可以看到湖北和台湾远远超过置信上限,说明两地的疫情非常严重(湖北比台湾更严重),防控措施需要提高。海南和贵州的死亡率在正常范围内。其它省份远远小于置信下限,说明其它省份对疫情的防控非常好,可以借鉴相应的防控措施。

最后,从图中可以看到北京要远远好于湖北,这也证明死亡率不能只看数字,还需要看样本量。


_____________


数据来源:


http://jjh.cngold.org/apps/tg_yq.html


参考文献:


http://blogs.sas.com/content/iml/2020/04/20/funnel-plot-covid-nc.html

http://blogs.sas.com/content/iml/2020/04/22/funnel-plot-covid-us.html





相关新闻