R4. 组间均值差异检验

整理人:秦利宾
邮箱: qlb150@163.com

1. 简介

检验连续变量在两组中的均值是否存在显著差异是一项非常重要的统计工作。在本文中,我们又将均值差异检验分为三种情形:第一种「单变量组间差异检验」,如检验是否大学毕业的两组人群 工资 是否存在显著差异;第二种「多变量组间差异检验」,如检验是否大学毕业的两组人群在 工资每周工作时数工作年限 等方面是否存在显著差异;第三种「变量在多组之间差异检验」,如工资在是否大学毕业黑人和白人是否工会成员等组中存在显著差异。

当然,在运行命令前,还需安装一些外部命令。可通过以下方式加载:首先,将「LY_sata」文件放置在「..\ado\personal」文件夹下,「..」对应自己 Stata 安装路径;然后,运行一下命令可以加载相应外部命令。

global path "`c(sysdir_personal)'\LY_stata" 
cd "$path\_Results"
adopath + "$path\_plus"  //外部命令统一存放于此处

我们也可以将外部命令放在自己 Stata 安装路径下 「plus」文件夹。

2. 单变量组间差异 t-test

以「nlsw88」这份数据为例,研究工资在女性是否大学毕业两组中是否存在显著差异。在 Stata 中,我们可以使用 ttest 命令进行检验,即 ttest wage, by(conllgrad),其中 conllgrad 为是否大学毕业的分类变量,而 wage 为工资连续变量。

下图为 ttest wage, by(conllgrad) 命令运行结果。可以看出,没有大学毕业女性组样本数为 1714,均值为 6.910561,而大学毕业组样本数为 552,均值为 10.52606,二者差异为 -3.615502。原假设为「H0: diff = 0」,三个备择假设只有「Ha: diff < 0」和「Ha: diff != 0」显著,说明没有大学毕业女性组工资显著小于大学毕业组。

「nlsw88」数据中还有类别变量 race,其数值为 1、2 和 3,分别代表白种人、黑种人和其他人种。若想检验白种人和黑种人在工资上是否存在显著差异,直接运行 ttest wage, by(race) 命令会报错,因为 race 有三个组别。可行的做法是生产一个新的组别虚拟变量,或者加条件语句,即 ttest wage if race != 3, by(race)

help ttest
sysuse nlsw88, clear
ttest wage, by(collgrad)  
ttest wage, by(race)            //错误命令
ttest wage if race!=3, by(race) //限定为两组即可

3 多变量组间差异 t-test

多变量组间差异检验是更为一般的组间差异检验。实现该检验有几个主要命令,即 ttable2ttable3normdiff

先看一下 ttable3 命令 (后面的例子中,使用 ttable2 也可以复现多数结果)。我们仍以「nslw88」这份数据为例,不同的是,这次要考虑 wagehourstenurettl_exp 这四个变量在是否大学毕业的两组中的差异。而 ttable3 命令工作原理就是对上述四个变量循环运行 ttest

sysuse nlsw88, clear
global x "wage hours tenure ttl_exp" //待检验变量列表
ttable3 $x, by(collgrad) 

从下图可以看出,大学毕业组与非大学毕业组均值差异在 1% 的统计水平上显著。由于在 hourstenurettl_exp 三个变量也存在显著差异,故不能认为是否大学毕业是工资差异的原因,否则就可能存在自选择问题。

ttable 命令有两个缺陷,一是无法报告 t 值,二是无法提供「标准化」的均值差异检验,而 normdiff 命令可以克服这两个问题。

「输出 t 值或 p 值」命令为 normdiff $x, over(collgrad) diff t p n(below) f(%16.2f) quietly nonormdiff。与 ttest 命令中 by 一样,normdiff 用 over 来分组。

*-输出 t 值或 p
normdiff $x, over(collgrad)   ///
             diff t p n(below) f(%16.2f) quietly nonormdiff 

「标准化差异」命令为 normdiff $x, over(collgrad) diff t p n(below) f(%16.2f) quietly,就是将 nonormdiff 这个选项去掉。

标准化的差异为下式,详见 Imbens & Wooldridge (2009, JEL, p24)。

\[ \Delta x = (x_1 - x_0) / \sqrt{(s^2_1+s^2_2)} \]

其中,\(x\) 为样本均值,\(s^2\) 为样本方差。

*-标准化差异      
qui reg $x
keep if e(sample) //保证所有的变量有相同的观察值个数
normdiff $x, over(collgrad)   ///
             diff t p n(below) f(%16.2f) quietly

4 变量在多组之间的差异

最后一种情形就是变量在多个组中的差异检验,命令为 ttestplus。以工资在是否结婚、是否工会成员、是否大学毕业和是否住在南部差异检验为例,命令语句为 ttestplus wage, by(married union collgrad south)

help ttestplus     //t-tests on one or more dimensions
sysuse nlsw88, clear
ttestplus wage, by(married union collgrad south)

下图为变量在多组间差异检验结果。以 married 为例,Group1 为未婚,Group2 为已婚,未婚女性工资在 5% 的统计水平上显著高于已婚女性。3.18e-11 为科学计数法,等价于 \(3.18e^{-11}\)

5. 扩展阅读

help dmout     //类似于 ttable3, 呈现 se 或 p 值
help pwmean    //Pairwise comparisons of means
help ttab      //分层列表
help cendif    //各个分位点上的差异检验  
help signrank  //Equality tests on   matched data
help ranksum   //Equality tests on unmatched data
help sdtest    //Variance-comparison tests
help nptrend   //Test for trend across ordered groups

6. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 组间
安装最新版 lianxh 命令:
ssc install lianxh, replace