查看原文
其他

Stata:多个变量组间均值\中位数差异检验

Stata连享会 Stata连享会 2020-02-10

作者:韩少真(西北大学) || 刘婉青(西北大学)

Stata 连享会: 知乎 | 简书 | 码云 | CSDN

2019暑期Stata现场班 (连玉君+刘瑞明主讲)

特别说明

文中包含的链接在微信中无法生效。请点击本文底部左下角的【阅读原文】,转入本文【简书版】

1. 问题背景

实证分析中,经常需要对比多个变量在两个子样本组中的均值或者中位数是否存在显著差异。

1.1 期刊论文示例一

在社会责任领域,研究发布社会责任报告是否会产生经济后果时,我们常常将样本划分为两组,一组为发布社会责任报告的发布组,另一组为未发布社会责任报告的未发布组。然后,我们需要对比公司特征等多个变量在发布组和未发布组之间是否存在显著差异。

[1].    Ni, X. and H. Zhang, Mandatory corporate social responsibility disclosure and dividend payouts: evidence from a quasi‐natural experiment. Accounting & Finance, 2019. 58(5): p. 1581-1612. [PDF]

1.2 期刊论文示例二

2016年美国SEC对高管薪酬披露规则进行了重大修订,最核心的变化是增加了“薪酬讨论与分析”(CD&A)的内容。在研究这项披露规则改变的影响时,需要将样本区分为采用新薪酬披露规则的组和没有采用新薪酬披露规则的组,然后对比组间均值或者中位数的差异。

[2].    Ferri, F., R. Zheng and Y. Zou, Uncertainty about managers’ reporting objectives and investors’ response to earnings reports: Evidence from the 2006 executive compensation disclosures. Journal of Accounting and Economics, 2018. 66(2): p. 339-365. [PDF]

image

1.3 期刊论文示例三

在研究国有企业和非国有企业在代理成本和税收计划等方面的差异时,我们需要将样本区分为国有企业组和非国有企业组,然后对比组间均值或者中位数的差异。

[3].    Bradshaw, M., G. Liao and M.S. Ma, Agency costs and tax planning when the government is a major Shareholder. Journal of Accounting and Economics, 2018.
[PDF]

image

2. Stata实现组间均值或中位数差异检验的常见命令

  • ttest:单个变量组间均值差异检验

  • median:单个变量组间中位数差异检验

  • ttable2:多个变量组间均值差异检验

  • ttable3:多个变量组间均值或者中位数差异检验

  • balancetable:多个变量在多组之间两两差异检验,以回归分析为基础,可以控制异方差的影响

Note: ttestmedian 为官方命令;ttable2balancetablettable3 都是外部命令, 需要用如下命令安装。安装方法详情参见 Stata: 外部命令的搜索、安装与使用。

  1. *-下载/更新 ttable2 和 balancetable 命令

  2. . ssc install ttable2, replace

  3. . ssc install balancetable, replace

  4. *-下载/更新 ttable3 命令

  5. . net install ttable3, from("https://raw.githubusercontent.com/statachina/ttable3/master/") replace

2.1 ttest 命令

我们首先介绍官方的 ttest 命令,它可以实现单个变量组间均值差异检验。

基本语法如下:

  1. ttest varname [if] [in], ///

  2. by(groupvar) unequal welch level(#)

具体解释如下:

  • varname:是要检验的数值型变量。具体通过 T 检验比较变量 varname 在选项 by(groupvar) 确定的两组之间的均值差异。

  • groupvar:可以是数值型,也可以是字符串型。但在 [if][in] 限定的样本范围内,其分组的类别必须为两组。

  • unequal :进行非配对样本非同方差的 T 检验。

  • level(#):设置置信水平,默认的置信水平是 (95) 。

下面,我们以 Stata 内置的数据集 nlsw88.dta 为例进行演示。首先,我们想要检验工资均值在未婚组和已婚组之间的差异是否显著。

  1. *-调用内置数据集 nlsw88

  2. . sysuse nlsw88.dta, clear

  3. (NLSW, 1988 extract)


  4. *-对married进行频数统计

  5. . tab married


  6. married | Freq. Percent Cum.

  7. ------------+-----------------------------------

  8. single | 804 35.80 35.80

  9. married | 1,442 64.20 100.00

  10. ------------+-----------------------------------

  11. Total | 2,246 100.00


  12. *-利用ttest对单个变量wage进行组间均值差异检验

  13. . ttest wage, by(married)


  14. Two-sample t test with equal variances

  15. ------------------------------------------------------------------------------

  16. Group | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval]

  17. ---------+--------------------------------------------------------------------

  18. single | 804 8.080765 .223456 6.336071 7.642138 8.519392

  19. married | 1,442 7.591978 .1421835 5.399229 7.313069 7.870887

  20. ---------+--------------------------------------------------------------------

  21. combined | 2,246 7.766949 .1214451 5.755523 7.528793 8.005105

  22. ---------+--------------------------------------------------------------------

  23. diff | .4887873 .2531718 -.0076882 .9852627

  24. ------------------------------------------------------------------------------

  25. diff = mean(single) - mean(married) t = 1.9307

  26. Ho: diff = 0 degrees of freedom = 2244


  27. Ha: diff < 0 Ha: diff != 0 Ha: diff > 0

  28. Pr(T < t) = 0.9732 Pr(|T| > |t|) = 0.0537 Pr(T > t) = 0.0268

其次,当我们假定未婚组和已婚组为非配对样本,且两组的样本方差不相等时,组间均值差异的 T 检验需要添加选项 unequal

  1. *-通过unequal选项进行非配对样本非同方差的检验

  2. . ttest wage, by(married) unequal


  3. Two-sample t test with unequal variances

  4. ------------------------------------------------------------------------------

  5. Group | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval]

  6. ---------+--------------------------------------------------------------------

  7. single | 804 8.080765 .223456 6.336071 7.642138 8.519392

  8. married | 1,442 7.591978 .1421835 5.399229 7.313069 7.870887

  9. ---------+--------------------------------------------------------------------

  10. combined | 2,246 7.766949 .1214451 5.755523 7.528793 8.005105

  11. ---------+--------------------------------------------------------------------

  12. diff | .4887873 .264856 -.0307541 1.008329

  13. ------------------------------------------------------------------------------

  14. diff = mean(single) - mean(married) t = 1.8455

  15. Ho: diff = 0 Satterthwaite's degrees of freedom = 1452.2


  16. Ha: diff < 0 Ha: diff != 0 Ha: diff > 0

  17. Pr(T < t) = 0.9674 Pr(|T| > |t|) = 0.0652 Pr(T > t) = 0.0326

最后,还可以通过设定 level 选项为 level(99),将置信水平更改为 99%。

  1. *-通过level选项更改置信水平为 99%

  2. . ttest wage, by(married) unequal level(99)


  3. Two-sample t test with unequal variances

  4. ------------------------------------------------------------------------------

  5. Group | Obs Mean Std. Err. Std. Dev. [99% Conf. Interval]

  6. ---------+--------------------------------------------------------------------

  7. single | 804 8.080765 .223456 6.336071 7.50381 8.657721

  8. married | 1,442 7.591978 .1421835 5.399229 7.225252 7.958704

  9. ---------+--------------------------------------------------------------------

  10. combined | 2,246 7.766949 .1214451 5.755523 7.453861 8.080037

  11. ---------+--------------------------------------------------------------------

  12. diff | .4887873 .264856 -.1943345 1.171909

  13. ------------------------------------------------------------------------------

  14. diff = mean(single) - mean(married) t = 1.8455

  15. Ho: diff = 0 Satterthwaite's degrees of freedom = 1452.2


  16. Ha: diff < 0 Ha: diff != 0 Ha: diff > 0

  17. Pr(T < t) = 0.9674 Pr(|T| > |t|) = 0.0652 Pr(T > t) = 0.0326

Notes:

  • ttest命令每次只能对一个变量进行检验,无法批量对多个变量进行检验。

  • ttest命令汇报的检验结果过于详细。我们在论文中只需要汇报一个相对精简的结果,如两组各自的均值、均值的差异、T 统计量或者 p 值。

  • 当待检验的变量数量增加时,ttest命令的使用会大大增加我们复制、粘贴等手工处理的工作量。

2.2 median 命令

median 同样为 Stata 的官方命令,基本语法如下:

  1. median varname [if] [in] [weight], ///

  2. by(groupvar) [median_options]

具体解释如下:

  • median命令的基本语法和使用方法与 ttest 命令很相似,它们都是比较变量 varname 在选项 by(groupvar) 确定的两组之间的差异。

  • exact 计算 Fisher's exact test 下的显著性水平。

  • medianties(below|above|drop|split) 可以对等于中位数的样本进行不同的处理。

下面,我们仍以 Stata 内置的数据集 nlsw88.dta 为例进行演示。
首先,我们想要检验未婚组和已婚组的工资中位数差异是否显著。
从检验结果可以发现, Pearson chi2 为 0.6277,p 值为 0.428 ,无法拒绝两组工资中位数相同的原假设。

  1. *-利用median对单个变量wage进行组间中位数差异检验

  2. . median wage, by(married)


  3. Median test


  4. Greater |

  5. than the | married

  6. median | single married | Total

  7. -----------+----------------------+----------

  8. no | 393 730 | 1,123

  9. yes | 411 712 | 1,123

  10. -----------+----------------------+----------

  11. Total | 804 1,442 | 2,246


  12. Pearson chi2(1) = 0.6277 Pr = 0.428


  13. Continuity corrected:

  14. Pearson chi2(1) = 0.5599 Pr = 0.454

我们可以通过添加 exact选项来计算 Fisher's exact test 方法下的显著性水平,结果依然是不显著的:

  1. *-通过exact选项计算Fisher's exact test方法下的显著性水平

  2. . median wage, by(married) exact


  3. Median test


  4. Greater |

  5. than the | married

  6. median | single married | Total

  7. -----------+----------------------+----------

  8. no | 393 730 | 1,123

  9. yes | 411 712 | 1,123

  10. -----------+----------------------+----------

  11. Total | 804 1,442 | 2,246


  12. Pearson chi2(1) = 0.6277 Pr = 0.428

  13. Fisher's exact = 0.454

  14. 1-sided Fisher's exact = 0.227


  15. Continuity corrected:

  16. Pearson chi2(1) = 0.5599 Pr = 0.454


Notes:

  • median命令虽然进行了中位数差异的检验,但并没有汇报两组各自的中位数及其差异。这与我们在期刊论文中要求的汇报结果有一定差异。

  • median命令每次只能对一个变量进行检验,无法披露对多个变量进行检验,也面临着复制、粘贴等手工整理结果的困扰。

2.3 ttable2 命令

这是由中南财经大学的李春涛和张璇老师编写的外部命令,基本语法和使用方法和 ttest 非常相似,好处在于可以批量对多个变量进行组间均值差异检验。

基本语法如下:

  1. ttable2 varlist [if] [in], by(groupvar) format(%fmt)

解释:

  • varlist:是待检验的一组变量名称。

  • groupvar:可以是数值型,也可以是字符串型。需要注意的是,多数情况下,groupvar 只有有两个取值。
    当其有多个取值时,需要保证在使用 [if][in] 限定样本范围后,groupvar 只有两个取值。

  • format:用以控制检验结果的输出格式。

比如,我们想要对比已婚组和未婚组在 wage, ttl_exp, tenure, age 四个变量上的均值差异。具体操作如下:

  1. *-利用ttable2对多个变量进行组间均值差异检验

  2. . ttable2 wage ttl_exp tenure age, by(married)


  3. --------------------------------------------------------------------------

  4. Variables G1(single) Mean1 G2(married) Mean2 MeanDiff

  5. --------------------------------------------------------------------------

  6. wage 804 8.081 1442 7.592 0.489*

  7. ttl_exp 804 12.920 1442 12.320 0.600***

  8. tenure 799 6.254 1432 5.824 0.431*

  9. age 804 39.219 1442 39.117 0.102

  10. --------------------------------------------------------------------------

我们还可以通过 format 选项控制检验结果输出的显示格式。比如,将其设置为 format(%6.2f),可以将小数位的显示控制为小数点后 2 位。

  1. *-通过format选项控制显示格式

  2. . ttable2 wage ttl_exp tenure age, by(married) format(%6.2f)


  3. --------------------------------------------------------------------------

  4. Variables G1(single) Mean1 G2(married) Mean2 MeanDiff

  5. --------------------------------------------------------------------------

  6. wage 804 8.08 1442 7.59 0.49*

  7. ttl_exp 804 12.92 1442 12.32 0.60***

  8. tenure 799 6.25 1432 5.82 0.43*

  9. age 804 39.22 1442 39.12 0.10

  10. --------------------------------------------------------------------------

有些时候,我们面对的组别大于 2 类。我们需要将其中一组设置为基准组,然后分别对比其他组和基准组在多个变量上的均值差异。此时,可以用 [if][in]限定样本范围的方式来实现。
比如,我们想要分别对比黑种人(black)和其他有色人种(other)与白种人(white)在多个变量上的均值差异。此时,race 的组别包括 1(white)2(black)3(other) 三种。而 by(groupvar)
在执行检验的时候只能为两组。我们可以通过 if race==1 | race==2if inlist(race,1,2) 语句来限定样本范围为指定的 1(white) 和 2(black) 两组。

  1. *-对race进行频数统计

  2. . tab race


  3. race | Freq. Percent Cum.

  4. ------------+-----------------------------------

  5. white | 1,637 72.89 72.89

  6. black | 583 25.96 98.84

  7. other | 26 1.16 100.00

  8. ------------+-----------------------------------

  9. Total | 2,246 100.00


  10. *-通过if设定样本范围,比较白人和黑人的均值差异

  11. . ttable2 wage ttl_exp tenure age if (race==1|race==2), by(race)


  12. --------------------------------------------------------------------------

  13. Variables G1(white) Mean1 G2(black) Mean2 MeanDiff

  14. --------------------------------------------------------------------------

  15. wage 1637 8.083 583 6.845 1.238***

  16. ttl_exp 1637 12.469 583 12.719 -0.250

  17. tenure 1627 5.808 578 6.502 -0.693***

  18. age 1637 39.272 583 38.811 0.461***

  19. --------------------------------------------------------------------------


  20. *-通过if设定样本范围,比较白人和其他人种的均值差异

  21. . ttable2 wage ttl_exp tenure age if race==1 | race==3, by(race)


  22. --------------------------------------------------------------------------

  23. Variables G1(white) Mean1 G2(other) Mean2 MeanDiff

  24. --------------------------------------------------------------------------

  25. wage 1637 8.083 26 8.551 -0.468

  26. ttl_exp 1637 12.469 26 12.599 -0.130

  27. tenure 1627 5.808 26 4.949 0.860

  28. age 1637 39.272 26 39.308 -0.035

  29. --------------------------------------------------------------------------

Note:

  • ttable3可以批量对多个变量进行检验。

  • ttable3的输出结果添加了标识显著性水平的*号,显示格式可以通过format()选项控制,基本接近期刊论文的要求。

  • ttable3只能进行标准的 T 检验,无法执行非匹配样本非同方差的 T 检验。

  • ttable3无法输出进行统计推断的 t 统计量或者 p 值,这与期刊论文的要求有差异。

2.4 ttable3 命令

ttable3 由中山大学的连玉君老师编写,主要的改进是在 ttable2 基础上进一步支持组间中位数差异的检验。

基本语法如下:

  1. ttable3 varlist [if] [in], by(groupvar) ///

  2. [ format(%fmt) unequal welch median ///

  3. rowname notitle nostar tvalue pvalue ]

ttable3命令的基本语法和使用方法和 ttable2 命令基本一样。由于是 ttable2 命令的升级版,所以增加了一些新的选项,功能更为强大,使用也更加灵活。这些新的选项主要包括:

  • median:将默认的组间均值差异检验更换为组间中位数差异检验。如果不添加 median 选项,则默认执行组间均值差异检验。

  • unequel:将在非配对样本和非同方差的假设下进行均值差异检验。需要注意的是,该选项只能在均值差异的 T 检验中设定。如果是中位数差异检验,该选项是不可以设定。

  • tvalue/pvalue:控制结果表格中的t-value或者p-value。需要注意的是,这两个选项不能同时添加。我们只能选择报告t-value或者p-value中的一个。

  • notitle:将检验结果表格的标题去除掉。这有助于使用logout命令将结果导出到 word 或者 excel 文件中。

  • nostar:将结果表格中表示显著性水平的符号`去除掉。如果不添加 `nostar` 选项,则默认以符号`标记显著性水平。

下面,我们还是以 nlsw88.dta 数据集为例,演示一下 ttable3 命令的使用。

我们首先分别使用 ttable2ttable3 命令对比已婚组和未婚组在 wage  ttl_exp   tenure   age 四个变量上的均值差异,检验的结果是一模一样的。

  1. *-首先,用ttable2实现组间均值差异检验

  2. . ttable2 wage ttl_exp tenure age, by(married)


  3. --------------------------------------------------------------------------

  4. Variables G1(single) Mean1 G2(married) Mean2 MeanDiff

  5. --------------------------------------------------------------------------

  6. wage 804 8.081 1442 7.592 0.489*

  7. ttl_exp 804 12.920 1442 12.320 0.600***

  8. tenure 799 6.254 1432 5.824 0.431*

  9. age 804 39.219 1442 39.117 0.102

  10. --------------------------------------------------------------------------


  11. *-然后,用ttable3实现组间均值差异检验

  12. . ttable3 wage ttl_exp tenure age, by(married)


  13. Two-sample t test with equal variances

  14. --------------------------------------------------------------------------

  15. Variables G1(single) Mean1 G2(married) Mean2 MeanDiff

  16. --------------------------------------------------------------------------

  17. wage 804 8.081 1442 7.592 0.489*

  18. ttl_exp 804 12.920 1442 12.320 0.600***

  19. tenure 799 6.254 1432 5.824 0.431*

  20. age 804 39.219 1442 39.117 0.102

  21. --------------------------------------------------------------------------

然后,我们在 ttable3 命令中添加 median 选项,将组间 均值 差异检验更换为 中位数 差异检验。

  1. *-添加media选项,进行组间中位数差异检验

  2. . ttable3 wage ttl_exp tenure age, by(married) median


  3. Nonparametric equality-of-medians test

  4. --------------------------------------------------------------------------

  5. Variables G1(single) Median1 G2(married) Median2 Diff

  6. --------------------------------------------------------------------------

  7. wage 804 6.357 1442 6.216 0.628

  8. ttl_exp 804 13.625 1442 12.833 8.958***

  9. tenure 799 3.833 1432 3.750 0.063

  10. age 804 39.000 1442 39.000 0.357

  11. --------------------------------------------------------------------------

最后,我们还可以通过控制其它选项来对结果表格进行调整。

  1. *-添加tvalue选项,为结果添加t_value

  2. . ttable3 wage ttl_exp tenure age, by(married) tvalue


  3. Two-sample t test with equal variances

  4. ------------------------------------------------------------------------------------

  5. Variables G1(single) Mean1 G2(married) Mean2 MeanDiff t-Value

  6. ------------------------------------------------------------------------------------

  7. wage 804 8.081 1442 7.592 0.489 1.931*

  8. ttl_exp 804 12.920 1442 12.320 0.600 2.964***

  9. tenure 799 6.254 1432 5.824 0.431 1.771*

  10. age 804 39.219 1442 39.117 0.102 0.760

  11. ------------------------------------------------------------------------------------


  12. *-添加pvalue选项,为结果添加p_value

  13. . ttable3 wage ttl_exp tenure age, by(married) pvalue


  14. Two-sample t test with equal variances

  15. ------------------------------------------------------------------------------------

  16. Variables G1(single) Mean1 G2(married) Mean2 MeanDiff p-Value

  17. ------------------------------------------------------------------------------------

  18. wage 804 8.081 1442 7.592 0.489 0.054*

  19. ttl_exp 804 12.920 1442 12.320 0.600 0.003***

  20. tenure 799 6.254 1432 5.824 0.431 0.077*

  21. age 804 39.219 1442 39.117 0.102 0.447

  22. ------------------------------------------------------------------------------------


  23. *-添加notitle选项,将标题删除

  24. . ttable3 wage ttl_exp tenure age, by(married) notitle

  25. --------------------------------------------------------------------------

  26. Variables G1(single) Mean1 G2(married) Mean2 MeanDiff

  27. --------------------------------------------------------------------------

  28. wage 804 8.081 1442 7.592 0.489*

  29. ttl_exp 804 12.920 1442 12.320 0.600***

  30. tenure 799 6.254 1432 5.824 0.431*

  31. age 804 39.219 1442 39.117 0.102

  32. --------------------------------------------------------------------------


  33. *-添加nostar选项,将*号删除

  34. . ttable3 wage ttl_exp tenure age, by(married) nostar


  35. Two-sample t test with equal variances

  36. --------------------------------------------------------------------------

  37. Variables G1(single) Mean1 G2(married) Mean2 MeanDiff

  38. --------------------------------------------------------------------------

  39. wage 804 8.081 1442 7.592 0.489

  40. ttl_exp 804 12.920 1442 12.320 0.600

  41. tenure 799 6.254 1432 5.824 0.431

  42. age 804 39.219 1442 39.117 0.102

  43. --------------------------------------------------------------------------

2.5 balancetable 命令

上述命令每次只能比较两个组的均值差异。但有些情况下,我们需要对多个组别进行两两组间均值差异检验。此外,对于回归分析略有了解的读者可能也会想到异方差问题。此时,可以使用 balancetable 命令。

该命令与 ttable2, ttable3 等命令的核心命令存在差异。ttest, ttable3 等命令都是调用 Stata 官方命令 ttestmedian 等非参数检验方法,进而使用循环语句实现一次性处理多个变量的目的。而 balancetable 命令则是基于回归分析来检验组间差异的。

例如,对于 nlsw88.dta 数据而言,我们可以用前文介绍的 ttestttable2 命令检验 wage 在已婚 (married=1) 和未婚 (married=0) 两个样本组间的均值差异:

  1. . ttable2 wage, by(married)


  2. --------------------------------------------------------------------------

  3. Variables G1(single) Mean1 G2(married) Mean2 MeanDiff

  4. --------------------------------------------------------------------------

  5. wage 804 8.081 1442 7.592 0.489*

  6. --------------------------------------------------------------------------

其实,我们也完全可以使用 regress 命令,通过 OLS 估计来实现上述目的:

  1. . regress wage married, noheader

  2. ------------------------------------------------------------------------------

  3. wage | Coef. Std. Err. t P>|t| [95% Conf. Interval]

  4. -------------+----------------------------------------------------------------

  5. married | -0.489 0.253 -1.93 0.054 -0.985 0.008

  6. _cons | 8.081 0.203 39.83 0.000 7.683 8.479

  7. ------------------------------------------------------------------------------

这里,常数项的估计系数 _cons = 8.081 其实就是 E[Wage|married=0],也就是解释变量 (married) 取值为 0 时,被解释变量 (wage) 的样本均值;而 married 的系数 -0.489 则是两个样本组的 wage 均值之差,即 E[Wage|married=1] - E[Wage|married=0] = -0.489。

了解了上述背景后,就很容易理解如下范例的含义了:

  1. sysuse "nlsw88.dta", clear


  2. *-待对比变量组

  3. global xx "wage hours ttl_exp "


  4. *-基本表格

  5. . balancetable union $xx using "tab1.xlsx", replace

  6. shellout "tab1.xlsx" //打开输出的文件,在推文中截图呈现


  7. *-设定列名

  8. . balancetable union $xx using "tab2.xlsx", replace ///

  9. ctitles("Union" "Non-Union" "Difference")

  10. shellout "tab2.xlsx"


  11. *-异方差,p-value

  12. . balancetable union $xx using "tab3.xlsx", replace ///

  13. vce(robust) pval ///

  14. ctitles("Union" "Non-Union" "Difference")

  15. shellout "tab3.xlsx"


  16. *-三个组:两两对比

  17. *gen white = (race==1) // Control 组

  18. gen black = (race==2) // Treat A

  19. gen other = (race==3) // Treat B

  20. balancetable (mean if race==1) (mean if race==2) (mean if race==3) ///

  21. (diff black if race!=3) /// // White v.s. Black

  22. (diff other if race!=2) /// // White v.s. other

  23. (diff black if race!=1) /// // black v.s. other

  24. $xx using "tab4.xlsx", ///

  25. ctitles("Mean White" "Mean Black" "Mean Other" "Black vs White" "Other vs White" "Black vs Other")


  26. shellout "tab4.xlsx" // 打开自动输出的表格

受限于篇幅,这里仅展示上例中 tab4.xlsx 的输出效果:

连享会-balancetable 自动输出的表格-tab4.xlsx

3. 小结

我们分别介绍了运用 ttestmedianttable2ttable3balancetable 等五个命令进行组间 均值中位数 差异的检验。他们各有千秋。

  • 官方命令ttestmedian 虽然可以采用多种方法进行不同的均值或中位数检验,但无法一次性对多个变量进行批量检验;而且汇报的结果要么过于详细,要么过于精简,往往无法满足我们在论文中的呈现要求。如果我们采用复制、粘贴的方式整理表格,不仅工作量大、容易出错,还无法实现检验结果的自动化输出。如此一来,当研究样本发生微小变动之后,检验的结果也随之发生了变化,我们又要重复上述复制、粘贴的过程,这样做显然是不明智的。

  • ttable2 命令能够批量对多个变量进行组间均值差异检验,检验结果的输出与大多数期刊论文的要求基本一致。但是,ttable2 只能执行标准的均值差异 T 检验,无法执行非配对样本非同方差下的 T 检验。ttable2也无法汇报 检验的 t 统计量或者 p 值。此外,ttable2也无法进行组间均值中位数差异检验。

  • ttable3 命令是 ttable2 的升级版。它增加了组间中位数差异检验的功能。对于组间均值差异的 T 检验,ttable3 还可以执行非配对样本非同方差下的检验。此外,ttable3还增加了一些新的选项实现更为灵活的功能。比如,通过tvalue或者pvalue选项汇报检验的 t 统计量或者 p 值。

  • balancetable 以基于回归分析来检验组间均值差异,因此,可以很方便地控制异方差,或得到各类形式的稳健性标准误 (如聚类调整后的标准误)。同时,该命令也只支持一次性对多个组别进行两两对比,只是语法上稍显繁复。

  • 上述命令的结果都可以使用 estoutlogout 等命令输出到 WordExcel 中,以便直接插入论文中。

附录:文中涉及的命令集合

  1. *--------------

  2. *-ttest 命令

  3. *--------------


  4. sysuse "nlsw88.dta", clear //调用内置数据集nlsw88

  5. *对married进行频数统计

  6. tab married

  7. *利用ttest对单个变量wage进行组间均值差异检验

  8. ttest wage, by(married)

  9. *通过unequal选项进行非配对样本非同方差的检验

  10. ttest wage, by(married) unequal

  11. *通过level选项更改置信水平为99%

  12. ttest wage, by(married) unequal level(99)



  13. *--------------

  14. *-median 命令

  15. *--------------


  16. *利用median对单个变量wage进行组间中位数差异检验

  17. median wage, by(married)

  18. *通过exact选项计算Fisher's exact test方法下的显著性水平

  19. median wage, by(married) exact



  20. *--------------

  21. *-ttable2 命令

  22. *--------------


  23. *利用ttable2对多个变量进行组间均值差异检验

  24. ttable2 wage ttl_exp tenure age, by(married)

  25. *通过format选项控制显示格式

  26. ttable2 wage ttl_exp tenure age, by(married) format(%6.2f)

  27. *对race进行频数统计

  28. tab race

  29. *通过if设定样本范围,比较白人和黑人的均值差异

  30. ttable2 wage ttl_exp tenure age if race==1 | race==2, by(race)

  31. *通过if设定样本范围,比较白人和其他人种的均值差异

  32. ttable2 wage ttl_exp tenure age if race==1 | race==3, by(race)



  33. *--------------

  34. *-ttable3 命令

  35. *--------------


  36. *首先,用ttable2实现组间均值差异检验

  37. ttable2 wage ttl_exp tenure age, by(married)

  38. *然后,用ttable3实现组间均值差异检验

  39. ttable3 wage ttl_exp tenure age, by(married)

  40. *添加media选项,进行组间中位数差异检验

  41. ttable3 wage ttl_exp tenure age, by(married) media

  42. *添加tvalue选项,为结果添加t_value

  43. ttable3 wage ttl_exp tenure age, by(married) tvalue

  44. *添加pvalue选项,为结果添加p_value

  45. ttable3 wage ttl_exp tenure age, by(married) pvalue

  46. *添加notitle选项,将标题删除

  47. ttable3 wage ttl_exp tenure age, by(married) notitle

  48. *添加nostar选项,将*号删除

  49. ttable3 wage ttl_exp tenure age, by(married) nostar



  50. *--------------------

  51. *- balancetalbe 命令

  52. *--------------------


  53. sysuse "nlsw88.dta", clear


  54. *-待对比变量组

  55. global xx "wage hours ttl_exp "


  56. *-基本表格

  57. . balancetable union $xx using "tab1.xlsx", replace

  58. shellout "tab1.xlsx" //打开输出的文件,在推文中截图呈现


  59. *-设定列名

  60. . balancetable union $xx using "tab2.xlsx", replace ///

  61. ctitles("Union" "Non-Union" "Difference")

  62. shellout "tab2.xlsx"


  63. *-异方差,p-value

  64. . balancetable union $xx using "tab3.xlsx", replace ///

  65. vce(robust) pval ///

  66. ctitles("Union" "Non-Union" "Difference")

  67. shellout "tab3.xlsx"


  68. *-三个组:你们酌情修改一下这个例子,用 industry 或 race 变量作为分组变量

  69. *gen white = (race==1) // Control 组

  70. gen black = (race==2) // Treat A

  71. gen other = (race==3) // Treat B

  72. balancetable (mean if race==1) (mean if race==2) (mean if race==3) ///

  73. (diff black if race!=3) /// // White v.s. Black

  74. (diff other if race!=2) /// // White v.s. other

  75. (diff black if race!=1) /// // black v.s. other

  76. $xx using "tab4.xlsx", replace ///

  77. ctitles("Mean White" "Mean Black" "Mean Other" "Black vs White" "Other vs White" "Black vs Other")


  78. . shellout "tab4.xlsx"

关于我们

  • Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。

  • 公众号推文同步发布于 CSDN-Stata连享会 、简书-Stata连享会 和 知乎-连玉君Stata专栏。可以在上述网站中搜索关键词StataStata连享会后关注我们。

  • 点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。

  • Stata连享会 精彩推文1  || 精彩推文2

联系我们

  • 欢迎赐稿: 欢迎将您的文章或笔记投稿至Stata连享会(公众号: StataChina),我们会保留您的署名;录用稿件达五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。

  • 意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。

  • 招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。

  • 联系邮件: StataChina@163.com

往期精彩推文


欢迎加入Stata连享会(公众号: StataChina)

一起学空间计量……

诚邀助教-2019暑期Stata现场班 (6.10截止)

2019暑期Stata现场班,7.17-26日,北京,连玉君+刘瑞明 主讲

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存