品头论足-distcomp:组间分布差异检验

发布时间:2020-12-26 阅读 3641

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

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

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

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

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

作者: 陈治中 (CEMFI)
邮箱: peterchen418@gmail.com


目录


1. distcomp 指令简介

在遇到需要比较不同分布的情况时,经济学论文除了均值差异以外,正越来越多地侧重于分布整体上,及其在不同分位数上的差异。例如,在比较实验组和对照组情况时,不同分位数上的处理效应 (quantile treatment effect) 往往能捕捉到平均处理效应 (average treatment effect) 忽略的异质性。

在比较两个分布的整体异同时,我们常用 KS 检验 (Kolmogorov-Smirnov test) 评价其整体分布是否存在差异。在累积分布函数 (cumulative distribution function, CDF) 相等的原假设下,这一非参数检验以其经验分布函数 (empirical distribution function) 垂直距离的上界为统计量,通过其渐进分布为柯尔莫哥洛夫 (Kolmogorov) 分布的性质进行假设检验。

然而,KS 检验依然存在两点重要不足:

  1. 在当我们想要检验在不同分位数/取值上的分布差异时,单次假设检验无法满足我们的需求
  2. 其灵敏度分布不均,主要集中在分布中间,而尾端灵敏度低,这可能导致明显错误的统计推断

为了说明第二点不足,我们举一个简单的例子。假设一个样本取自 (0,1) 均匀分布,由观测值 0.02, 0.04, ..., 0.98 组成。接着,我们将从同一分布中取观测值 1/21, 2/21, ..., 20/21 的另一组样本,并将尾端 15/21 至 20/21 的 6 个观测值替换为原值加 1,000,000。然而,KS 检验在 10%的显著性水平上却无法拒绝原假设。这一例子可用 Stata 指令 ksmirnov 可以实现,代码如下:

. set obs 69

// 新建一个变量y,前49次观测为第一组样本0.02, 0.04, ..., 0.98,
// 后20次观测为第二组样本1/21, 2/21, ..., 20/21
. gen y = (_n<=49)*(_n/50) + (_n>49)*(_n-49)/21 

. replace y = 1000000+_n if _n>63 
. gen grp = (_n>49)

// 对这两组样本分布进行 KS 检验
. ksmirnov y , by(grp) exact 

Two-sample Kolmogorov-Smirnov test 
for equality of distribution functions

 Smaller group       D       P-value      Exact
 ----------------------------------------------
 0:                  0.3000    0.078
 1:                 -0.0378    0.960
 Combined K-S:       0.3000    0.155      0.121

第三行的结果显示,p 值大于显著性水平 10%,因此我们无法拒绝这两个分布相同的原假设,而这一结论显然与直觉相悖。

为此,Goldman and Kaplan (2018) 在 KS 检验的基础上进行改进。Stata 指令 distcomp正是基于这种方法,在满足两个样本均独立同分布 (iid) 且相互独立、总体分布连续 (或仅有部分不连续) 的假设下可以使用。它较 KS 检验有如下特点:

  1. 在不同分位数或不同取值上进行多次检验,可以比较不同区间的分布差异
  2. 保留 KS 检验对分位数多重检验 (quantile multiple testing) 中错误拒绝率 (family-wise error rate, FWER) 的强控制 (意即,对于样本所有可能取值,多重错误拒绝率小于给定水平。如果仅仅对于使得两累积分布函数相等的数集中的任意值,多重错误拒绝率小于给定水平,那么仅仅达到弱控制)
  3. 解决了 KS 检验在分布尾端缺乏灵敏度的问题,使统计功效 (power) 在分布中更均匀存在

在本推文中,笔者主要介绍 distcomp 指令的应用范例。关于该检验方法的统计性质等技术细节,请参阅相关文献。

2. distcomp 的安装和基本语法

distcomp 是外部命令,可以使用如下命令安装最新版本:

search distcomp
ssc install distcomp, replace

若想获取附带数据文件和说明文件,可以在命令窗口中输入:

net describe st0579, from(http://www.stata-journal.com/software/sj19-4)

基本语法格式如下:

distcomp varname [if] [in], by(groupvar) [alpha(#) pvalue noplot]
  • varname 表示变量名称,由被比较的两个样本竖向合并后组成
  • groupvar 表示分组变量名称,是二元变量,用于区分varname 中的两组样本
  • alpha(#) 表示多重检验的第一类错误率/显著性水平 (FWER)
  • pvalue 表示要求返回全局的 p 值,即检验两个分布整体相等的 p 值
  • pvalue 表示要求不返回画图

3. Stata 范例

3.1 范例 1:KS 检验缺乏均匀灵敏度实例

在本文开始,我们通过一个简单例子说明了 KS 检验在分布尾端缺乏灵敏度。我们接着用 distcomp 指令说明 Goldman 和 Kaplan (2018) 的方法在改进这一不足上有怎样的效果。

* 延续上文的代码,得到y和grp两变量
*- DGP
. clear
. set obs 69
. gen y = (_n<=49)*(_n/50) + (_n>49)*(_n-49)/21 
. replace y = 1000000+_n if _n>63 
. gen grp = (_n>49)

*-Test
. distcomp y , by(grp) alpha(0.01) noplot p

Comparing distribution of y when grp=0 vs. grp=1

Global test of equality of two CDFs:
    Simulated p-value = .0055889
    At a 10% level: reject
    At a  5% level: reject
    At a  1% level: reject

With strong control of FWER at a 1% level,
CDF equality is rejected at all points in the following
ranges of y:

     from         to
      .98    1000064

第一段的结果显示,这一方法计算的 p 值更小,以至于在 1%的显著性水平上,我们也可以得出拒绝两分布相等的结论,更符合直觉。

3.2 范例 2:Stata 内置工资数据应用

在本部分,本文借助于 Stata 提供的 nlsw88 数据,对工会工人与非工会工人工资分布的差异进行比较,设 FWER 为 10%

. sysuse nlsw88 , clear
. set scheme sj
. distcomp wage , by(union) alpha(0.10) p

Comparing distribution of wage when union=0 vs. union=1

Global test of equality of two CDFs:
    Simulated p-value < .0001
    At a 10% level: reject
    At a  5% level: reject
    At a  1% level: reject

With strong control of FWER at a 10% level,
CDF equality is rejected at all points in the following
ranges of wage:
     from         to
 2.383252   2.520128
 2.568437   11.51368
 11.52979    11.5781

我们发现,p 值远小于 1%,于是拒绝工会组与非工会组工资分布相等的原假设。除此之外,该命令还返回了两分布相异的区间。

绘制图形如下所示:

图中的实线表示工会组工资的累积分布,而虚线表示非工会组工资的累积分布。可以看出非工会组的工资低于工会组工资,但仅仅比较这两条线,我们无法得出其分布是否相同的结论。在 distcomp 的帮助下,底部的水平线段显示原假设被拒绝的取值范围,可以看出其包含了除右尾以外的大部分区间。

  • 小贴士: distcomp可以用于 by 前缀之后,我们可以利用 by 前缀,比较复合分组的分布差异,例如输入:
  bysort race : distcomp wage, by(union) p

那么 Stata 会首先按照种族分组,再在各种族组内进行同样的分析,有兴趣的读者可以自行尝试。

3.3 范例 3:Gneezy 和 List 的「礼物交换」实验

Uri Gneezy 和 John A. List (2006) 通过田野实验的方法,研究意外的工资收入 (“礼物”) 是否对劳动者工作的努力程度造成积极影响 (下文简称“礼物交换”假说) 。处理效应的分布结果表明,工作的前几个小时内,提供“礼物”能有效地提升工作努力程度;但是,在这段时间之后,实验组 (被试者收到“礼物”) 和对照组之间没有显著差别;总体看来,提供“礼物”不利于雇佣者的利益。

具体地说,他们的田野实验总共采用两种形式:帮图书馆录入书目,和上门筹款。图书馆任务中,他们每 90 分钟统计一次被试者录入书目数量,并以此为目标变量 (ylib)。他们用单尾曼-惠特尼 U 检验 (Mann–Whitney U test) 比较前 90 分钟内,对照组和实验组目标变量均值,发现其中存在约 25%的显著差异;对于 90 分钟后的数据,他们做了同样的检验,结果未能支持“礼物交换”假说。对于筹款任务,他们统计每小时筹集到的总款项为目标变量 (yfun) ,结果发现,前三小时,实验组筹集款项比对照组平均高 70%;而三小时之后的结果,未发现显著差异。

正如前文所述,仅比较分布的均值具有一定局限性,而使用 distcomp 能更好地比较处理效应的异质性,结果如下:

. distcomp ylib , by(treated) alpha(0.05) p noplot

Comparing distribution of ylib when treated=0 vs. treated=1

Global test of equality of two CDFs:
    Simulated p-value = .14105487
    At a 10% level: do not reject
    At a  5% level: do not reject
    At a  1% level: do not reject


. distcomp yfun , by(treated) a(0.05) p noplot

Comparing distribution of yfun when treated=0 vs. treated=1

Global test of equality of two CDFs:
    Simulated p-value = .03979024
    At a 10% level: reject
    At a 5% level: reject
    At a 1% level: do not reject

With strong control of FWER at a 5% level, CDF equality is rejected at all points in the ranges of yfun:
     from        to
        8        14

绘图结果如下 (去掉上述命令中的 noplot 选项即可图形,亦可使用 graph export 保存图形):

结果可以看出,对于图书馆任务,尽管在前 90 分钟内,实验组和对照组录入书目数量均值有差异,但我们无法拒绝两组分布相等的原假设;对于筹款任务,我们在 1%的显著性水平上无法拒绝原假设,但在 5%的水平上可以,其差异集中在 814 的区间内。

范例 4:Cattaneo et al. (2015) 断点回归设计

在发展经济学等领域中,自然实验和随机实验往往可望而不可求,断点回归设计 (regression discontinuity design, RDD) 应用也越来越多。其主要方法在于,如果连续变量落入断点 (cutoff) 附近任意一侧随机发生,而落入不同侧能改变个体受政策或冲击影响的概率,那么我们可以利用这一特性解决内生性问题,在断点附近,将其当作准自然实验 (quasi-experiment)。连享会也有许多相关推送,更多内容感兴趣的读者可自行查找。

Cattaneo, Frandsen 和 Titiunik (2015) 利用这一思想,研究美国参议院中,赢得上一次选举的官员,其在职地位是否有助于其连任。在职官员在前一次选举中的胜利,如果优势很小,那么可以近似将其视为随机发生,不受官员个人品质因素或其他协变量影响,从而得到近似局部随机实验 (local random experiment) 。我们可以利用 distcomp 指令比较上届选举中以微弱优势获选,和以微弱劣势落败的官员,本次选举得票率分布的异同。如果发现显著差异,则与在职官员具有选举优势的直觉相一致。

先下载数据文件: -数据链接-

https://github.com/rdpackages-replication/CIT_2019_CUP/raw/master/CIT_2019_Cambridge_senate.dta

打开数据文件,输入如下代码:

*-变量定义:

//demmv: 民主党在上次选举中的得票率与共和党之差 
//       (如果大于零则以为着上次选举顺利当选),
//D_incumbent: 用来区分民主党议员是否为在职官员
//demvoteshfor2: 民主党当前选举同一参议院席位的得票率

*先use文件 (略)
scalar R0 = 0  //断点为0
scalar h = 0.75  //我们用0±0.75作为断点附近区间

gen D_incumbent = (demmv>=R0) 
distcomp demvoteshfor2 if demmv>=R0-h & demmv<=R0+h , ///
         by(D_incumbent) a(0.10) p 

得到如下结果:

. distcomp demvoteshfor2 if demmv>=R0-h & demmv<=R0+h , ///
           by(D_incumbent) a(0.10) p 

Comparing distribution of demvoteshfor2 when D_incumbent=0 vs. D_incumbent=1

Global test of equality of two CDFs:
    Simulated p-value = .00721501
    At a 10% level: reject
    At a  5% level: reject
    At a  1% level: reject

With strong control of FWER at a 10% level,
CDF equality is rejected at all points in the following
ranges of demvoteshfor2:

     from         to
 43.21114   47.73871
 47.81345   51.70049
 51.83689   56.64765

以及如下图像:

可以看出,在职议员得票率的累积分布一阶占优 (first-order stochastically dominate) 于非在职议员的竞选得票率,其差异在 43% 至 56% 区间基本显著。当然,为了具体测量在职效应的具体大小,我们需要控制其他协变量,用断点回归估计量。但在此之前,直接比较其分布差异可以给我们直观的、直觉的启发。

4. 结语

本文主要介绍了 Stata 中 distcomp 命令的应用。这一命令基于对 KS 检验的改进,在保留其优点的前提下,能比较不同分布存在显著差异的区间,并直观绘制比较图。与一般的 t 检验比较均值异同,和 KS 检验比较分布异同相比,这一方法展现了分布差异的异质性,提供了更丰富的信息。

5. 参考文献

  • Kaplan, D. M. (2019). distcomp: Comparing distributions. The Stata Journal, 19(4), 832-848. -Link-
  • Goldman, M., & Kaplan, D. M. (2018). Comparing distributions by multiple testing across quantiles or CDF values. Journal of Econometrics, 206(1), 143-166. -Link-
  • Gneezy, U., & List, J. A. (2006). Putting behavioral economics to work: Testing for gift exchange in labor markets using field experiments. Econometrica, 74(5), 1365-1384. -Link-
  • Cattaneo, M. D., Frandsen, B. R., & Titiunik, R. (2015). Randomization inference in the regression discontinuity design: An application to party advantages in the US Senate. Journal of Causal Inference, 3(1), 1-24. -Link-

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看

专题 嘉宾 直播/回看视频
最新专题 因果推断, 空间计量,寒暑假班等
数据清洗系列 游万海 直播, 88 元,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

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

连享会主页  lianxh.cn
连享会主页 lianxh.cn

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

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

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD

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