一个简单的R包:倾向评分匹配前后均衡性检验
前沿
空格相信倾向评分匹配这个统计方法大家都是很熟悉了,它在观察性研究中非随机性试验中有着重要的意义,本公众号也做过两期对这个方法的讲解。分别是《倾向评分法》和《倾向评分的方法、注意事项和应用》。
均衡性检验
空格而今天我们重点关注的是,均衡性检验的问题。因为这个问题对于这个方法来说是至关重要的一步,一般要求匹配后的样本所有纳入变量应该达到均衡的,否则后续的分析会有偏差。匹配前后的均衡性检验结果也应该在文章发表时展示。
空格至于如何去检验?很多研究者都是对每个变量进行假设检验的,定量变量采用t检验,定性变量采用卡方检验。但是这并不是被推荐的好方法,目前学术界比较公认的方法是使用标准化差值法直观反映匹配前后的组间差异。这个方法分别计算各个变量匹配前和匹配后的标准化差(也有人叫做Effect size),来判断是否满足均衡的要求。
标准化差的计算
空格计算标准化差的方法也是一直有人在探索,不断在发展。刚开始大部分文献只对定量变量和二分类变量按照公式进行计算的。之后有学者提出可以对多分类变量进行计算,原理是把多分类变量亚元化以后对每个哑变量当做二分类变量进行计算,这将会得到多个标准化差。接着又有学者提出多个标准化差去衡量一个变量不合适,通过协方差矩阵计算综合的标准化差。然而,此前并没有简便的现成的方法,或许可以在网上找到SAS的宏代码,但是对于没有SAS基础的人来说的确是件难事。今天小编给大家介绍一个简单的R包,{stddiff},可以轻松计算不同变量类型的标准差化。
R软件实例
#安装stddiff包,要求R软件的版本大于等于3.3.0
install.packages('stddiff')
#加载stddiff包
library(stddiff)
#以下参照“??stddiff”帮助文档中的Examples
#产生模拟数据,data中包涵四个变量:分组变量treat,定量变量binary,二分类变量binary,多分类变量category
set.seed(2016)
treat=round(abs(rnorm(100) 1)*10,0) %% 2
numeric=round(abs(rnorm(100) 1)*10,0)
binary=round(abs(rnorm(100) 1)*10,0) %% 2
category=round(abs(rnorm(100) 1)*10,0) %% 3
data=data.frame(treat,numeric,binary,category)
#分别结算每个变量的标准化差,这里的vcol设置两个数是为了展示可以同时计算多个变量
stddiff.numeric(data=data,gcol=1,vcol=c(2,2))
stddiff.binary(data=data,gcol=1,vcol=c(3,3))
stddiff.category(data=data,gcol=1,vcol=c(4,4))
结果如下:
三个函数的结果都是以数据框的形式展示的,行名指的是变量名,下面分别介绍每个列名的意思。mean.c、sd.c表示对照组(treat=0)的均数、标准差;mean.t表示试验组(treat=1)的均数、标准差;p.c、p.t分别表示对照组、试验组的构成比;missing.c、missing.t分别表示对照组、试验组缺失值的数目,stddiff、stddiff.l、stddiff.u分别表示标准化差及其95%置信区间。标准化差方法判断标准为,当标准化差小于等于0.2时,表示组间均衡。
参考文献:
https://cran.r-project.org/web/packages/stddiff/index.html
请批评指正!