美文网首页
Stata:多个变量组间均值\中位数差异检验

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

作者: stata连享会 | 来源:发表于2019-05-30 10:31 被阅读0次

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

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

    2020寒假Stata现场班 (北京, 1月8-17日,连玉君-江艇主讲),「+助教招聘」

    2020寒假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: 外部命令的搜索、安装与使用。

    *-下载/更新 ttable2 和 balancetable 命令
    . ssc install ttable2, replace 
    . ssc install balancetable, replace 
    *-下载/更新 ttable3 命令
    . net install ttable3, from("https://raw.githubusercontent.com/statachina/ttable3/master/") replace
    

    2.1 ttest 命令

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

    基本语法如下:

    ttest varname  [if] [in],  ///
       by(groupvar) unequal  welch level(#) 
    

    具体解释如下:

    • varname:是要检验的数值型变量。具体通过 T 检验比较变量 varname 在选项 by(groupvar) 确定的两组之间的均值差异。
    • groupvar:可以是数值型,也可以是字符串型。但在 [if][in] 限定的样本范围内,其分组的类别必须为两组。
    • unequal :进行非配对样本非同方差的 T 检验。
    • level(#):设置置信水平,默认的置信水平是 (95) 。

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

    *-调用内置数据集 nlsw88
    . sysuse nlsw88.dta, clear
    (NLSW, 1988 extract)
    
    *-对married进行频数统计
    . tab married
    
        married |      Freq.     Percent        Cum.
    ------------+-----------------------------------
         single |        804       35.80       35.80
        married |      1,442       64.20      100.00
    ------------+-----------------------------------
          Total |      2,246      100.00
    
    *-利用ttest对单个变量wage进行组间均值差异检验
    . ttest wage, by(married)
    
    Two-sample t test with equal variances
    ------------------------------------------------------------------------------
       Group |     Obs        Mean    Std. Err.   Std. Dev.   [95% Conf. Interval]
    ---------+--------------------------------------------------------------------
      single |     804    8.080765     .223456    6.336071    7.642138    8.519392
     married |   1,442    7.591978    .1421835    5.399229    7.313069    7.870887
    ---------+--------------------------------------------------------------------
    combined |   2,246    7.766949    .1214451    5.755523    7.528793    8.005105
    ---------+--------------------------------------------------------------------
        diff |            .4887873    .2531718               -.0076882    .9852627
    ------------------------------------------------------------------------------
        diff = mean(single) - mean(married)                           t =   1.9307
    Ho: diff = 0                                     degrees of freedom =     2244
    
        Ha: diff < 0                 Ha: diff != 0                 Ha: diff > 0
     Pr(T < t) = 0.9732         Pr(|T| > |t|) = 0.0537          Pr(T > t) = 0.0268
    

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

    *-通过unequal选项进行非配对样本非同方差的检验
    . ttest wage, by(married) unequal
    
    Two-sample t test with unequal variances
    ------------------------------------------------------------------------------
       Group |     Obs        Mean    Std. Err.   Std. Dev.   [95% Conf. Interval]
    ---------+--------------------------------------------------------------------
      single |     804    8.080765     .223456    6.336071    7.642138    8.519392
     married |   1,442    7.591978    .1421835    5.399229    7.313069    7.870887
    ---------+--------------------------------------------------------------------
    combined |   2,246    7.766949    .1214451    5.755523    7.528793    8.005105
    ---------+--------------------------------------------------------------------
        diff |            .4887873     .264856               -.0307541    1.008329
    ------------------------------------------------------------------------------
        diff = mean(single) - mean(married)                           t =   1.8455
    Ho: diff = 0                     Satterthwaite's degrees of freedom =   1452.2
    
        Ha: diff < 0                 Ha: diff != 0                 Ha: diff > 0
     Pr(T < t) = 0.9674         Pr(|T| > |t|) = 0.0652          Pr(T > t) = 0.0326
    

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

    *-通过level选项更改置信水平为 99%
    . ttest wage, by(married) unequal level(99)
    
    Two-sample t test with unequal variances
    ------------------------------------------------------------------------------
       Group |     Obs        Mean    Std. Err.   Std. Dev.   [99% Conf. Interval]
    ---------+--------------------------------------------------------------------
      single |     804    8.080765     .223456    6.336071     7.50381    8.657721
     married |   1,442    7.591978    .1421835    5.399229    7.225252    7.958704
    ---------+--------------------------------------------------------------------
    combined |   2,246    7.766949    .1214451    5.755523    7.453861    8.080037
    ---------+--------------------------------------------------------------------
        diff |            .4887873     .264856               -.1943345    1.171909
    ------------------------------------------------------------------------------
        diff = mean(single) - mean(married)                           t =   1.8455
    Ho: diff = 0                     Satterthwaite's degrees of freedom =   1452.2
    
        Ha: diff < 0                 Ha: diff != 0                 Ha: diff > 0
     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 的官方命令,基本语法如下:

    median varname [if] [in] [weight], ///
           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 ,无法拒绝两组工资中位数相同的原假设。

    *-利用median对单个变量wage进行组间中位数差异检验
    . median wage, by(married)
    
    Median test
    
       Greater |
      than the |        married
        median |    single    married |     Total
    -----------+----------------------+----------
            no |       393        730 |     1,123 
           yes |       411        712 |     1,123 
    -----------+----------------------+----------
         Total |       804      1,442 |     2,246 
    
              Pearson chi2(1) =   0.6277   Pr = 0.428
    
       Continuity corrected:
              Pearson chi2(1) =   0.5599   Pr = 0.454
    

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

    *-通过exact选项计算Fisher's exact test方法下的显著性水平
    . median wage, by(married) exact
    
    Median test
    
       Greater |
      than the |        married
        median |    single    married |     Total
    -----------+----------------------+----------
            no |       393        730 |     1,123 
           yes |       411        712 |     1,123 
    -----------+----------------------+----------
         Total |       804      1,442 |     2,246 
    
              Pearson chi2(1) =   0.6277   Pr = 0.428
               Fisher's exact =                 0.454
       1-sided Fisher's exact =                 0.227
    
       Continuity corrected:
              Pearson chi2(1) =   0.5599   Pr = 0.454
    

    Notes:

    • median命令虽然进行了中位数差异的检验,但并没有汇报两组各自的中位数及其差异。这与我们在期刊论文中要求的汇报结果有一定差异。
    • median命令每次只能对一个变量进行检验,无法披露对多个变量进行检验,也面临着复制、粘贴等手工整理结果的困扰。

    2.3 ttable2 命令

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

    基本语法如下:

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

    解释:

    • varlist:是待检验的一组变量名称。
    • groupvar:可以是数值型,也可以是字符串型。需要注意的是,多数情况下,groupvar 只有有两个取值。
      当其有多个取值时,需要保证在使用 [if][in] 限定样本范围后,groupvar 只有两个取值。
    • format:用以控制检验结果的输出格式。

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

    *-利用ttable2对多个变量进行组间均值差异检验
    . ttable2 wage ttl_exp tenure age, by(married)
    
    --------------------------------------------------------------------------
    Variables   G1(single)       Mean1     G2(married)    Mean2      MeanDiff
    --------------------------------------------------------------------------
    wage          804             8.081       1442         7.592      0.489*
    ttl_exp       804            12.920       1442        12.320      0.600***
    tenure        799             6.254       1432         5.824      0.431*
    age           804            39.219       1442        39.117      0.102
    --------------------------------------------------------------------------
    

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

    *-通过format选项控制显示格式
    . ttable2 wage ttl_exp tenure age, by(married) format(%6.2f)
    
    --------------------------------------------------------------------------
    Variables   G1(single)       Mean1     G2(married)    Mean2      MeanDiff
    --------------------------------------------------------------------------
    wage          804            8.08         1442        7.59       0.49*
    ttl_exp       804           12.92         1442       12.32       0.60***
    tenure        799            6.25         1432        5.82       0.43*
    age           804           39.22         1442       39.12       0.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) 两组。

    *-对race进行频数统计
    . tab race
    
           race |      Freq.     Percent        Cum.
    ------------+-----------------------------------
          white |      1,637       72.89       72.89
          black |        583       25.96       98.84
          other |         26        1.16      100.00
    ------------+-----------------------------------
          Total |      2,246      100.00
    
    *-通过if设定样本范围,比较白人和黑人的均值差异
    . ttable2 wage ttl_exp tenure age if (race==1|race==2), by(race)
    
    --------------------------------------------------------------------------
    Variables   G1(white)        Mean1     G2(black)      Mean2      MeanDiff
    --------------------------------------------------------------------------
    wage          1637            8.083       583          6.845      1.238***
    ttl_exp       1637           12.469       583         12.719     -0.250
    tenure        1627            5.808       578          6.502     -0.693***
    age           1637           39.272       583         38.811      0.461***
    --------------------------------------------------------------------------
    
    *-通过if设定样本范围,比较白人和其他人种的均值差异
    . ttable2 wage ttl_exp tenure age if race==1 | race==3, by(race)
    
    --------------------------------------------------------------------------
    Variables   G1(white)        Mean1     G2(other)      Mean2      MeanDiff
    --------------------------------------------------------------------------
    wage          1637            8.083       26           8.551     -0.468
    ttl_exp       1637           12.469       26          12.599     -0.130
    tenure        1627            5.808       26           4.949      0.860
    age           1637           39.272       26          39.308     -0.035
    --------------------------------------------------------------------------
    

    Note:

    • ttable3可以批量对多个变量进行检验。
    • ttable3的输出结果添加了标识显著性水平的*号,显示格式可以通过format()选项控制,基本接近期刊论文的要求。
    • ttable3只能进行标准的 T 检验,无法执行非匹配样本非同方差的 T 检验。
    • ttable3无法输出进行统计推断的 t 统计量或者 p 值,这与期刊论文的要求有差异。

    连享会计量方法专题……

    2.4 ttable3 命令

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

    基本语法如下:

    ttable3 varlist [if] [in], by(groupvar) ///
      [ format(%fmt) unequal welch median   ///
        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 四个变量上的均值差异,检验的结果是一模一样的。

    *-首先,用ttable2实现组间均值差异检验
    . ttable2 wage ttl_exp tenure age, by(married)
    
    --------------------------------------------------------------------------
    Variables   G1(single)       Mean1     G2(married)    Mean2      MeanDiff
    --------------------------------------------------------------------------
    wage          804             8.081       1442         7.592      0.489*
    ttl_exp       804            12.920       1442        12.320      0.600***
    tenure        799             6.254       1432         5.824      0.431*
    age           804            39.219       1442        39.117      0.102
    --------------------------------------------------------------------------
    
    *-然后,用ttable3实现组间均值差异检验
    . ttable3 wage ttl_exp tenure age, by(married)
    
    Two-sample t test with equal variances
    --------------------------------------------------------------------------
    Variables   G1(single)       Mean1     G2(married)    Mean2      MeanDiff   
    --------------------------------------------------------------------------
    wage          804             8.081       1442         7.592      0.489*
    ttl_exp       804            12.920       1442        12.320      0.600***
    tenure        799             6.254       1432         5.824      0.431*
    age           804            39.219       1442        39.117      0.102
    --------------------------------------------------------------------------
    

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

    *-添加media选项,进行组间中位数差异检验
    . ttable3 wage ttl_exp tenure age, by(married) media
    
    Nonparametric equality-of-medians test
    --------------------------------------------------------------------------
    Variables   G1(single)       Median1   G2(married)    Median2    Diff       
    --------------------------------------------------------------------------
    wage          804          6.357         1442       6.216       0.628
    ttl_exp       804         13.625         1442      12.833       8.958***
    tenure        799          3.833         1432       3.750       0.063
    age           804         39.000         1442      39.000       0.357
    --------------------------------------------------------------------------
    

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

    *-添加tvalue选项,为结果添加t_value
    . ttable3 wage ttl_exp tenure age, by(married) tvalue
    
    Two-sample t test with equal variances
    ------------------------------------------------------------------------------------
    Variables   G1(single)       Mean1     G2(married)    Mean2      MeanDiff   t-Value
    ------------------------------------------------------------------------------------
    wage          804             8.081       1442         7.592      0.489      1.931*
    ttl_exp       804            12.920       1442        12.320      0.600      2.964***
    tenure        799             6.254       1432         5.824      0.431      1.771*
    age           804            39.219       1442        39.117      0.102      0.760
    ------------------------------------------------------------------------------------
    
    *-添加pvalue选项,为结果添加p_value
    . ttable3 wage ttl_exp tenure age, by(married) pvalue
    
    Two-sample t test with equal variances
    ------------------------------------------------------------------------------------
    Variables   G1(single)       Mean1     G2(married)    Mean2      MeanDiff   p-Value
    ------------------------------------------------------------------------------------
    wage          804             8.081       1442         7.592      0.489      0.054*
    ttl_exp       804            12.920       1442        12.320      0.600      0.003***
    tenure        799             6.254       1432         5.824      0.431      0.077*
    age           804            39.219       1442        39.117      0.102      0.447
    ------------------------------------------------------------------------------------
    
    *-添加notitle选项,将标题删除
    . ttable3 wage ttl_exp tenure age, by(married) notitle
    --------------------------------------------------------------------------
    Variables   G1(single)       Mean1     G2(married)    Mean2      MeanDiff   
    --------------------------------------------------------------------------
    wage          804             8.081       1442         7.592      0.489*
    ttl_exp       804            12.920       1442        12.320      0.600***
    tenure        799             6.254       1432         5.824      0.431*
    age           804            39.219       1442        39.117      0.102
    --------------------------------------------------------------------------
    
    *-添加nostar选项,将*号删除
    . ttable3 wage ttl_exp tenure age, by(married) nostar
    
    Two-sample t test with equal variances
    --------------------------------------------------------------------------
    Variables   G1(single)       Mean1     G2(married)    Mean2      MeanDiff   
    --------------------------------------------------------------------------
    wage          804             8.081       1442         7.592      0.489
    ttl_exp       804            12.920       1442        12.320      0.600
    tenure        799             6.254       1432         5.824      0.431
    age           804            39.219       1442        39.117      0.102
    --------------------------------------------------------------------------
    

    2.5 balancetable 命令

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

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

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

    . ttable2 wage, by(married)
    
    --------------------------------------------------------------------------
    Variables   G1(single)       Mean1     G2(married)    Mean2      MeanDiff
    --------------------------------------------------------------------------
    wage          804             8.081       1442         7.592      0.489*
    --------------------------------------------------------------------------
    

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

    . regress  wage married, noheader
    ------------------------------------------------------------------------------
            wage |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
         married |     -0.489      0.253    -1.93   0.054       -0.985       0.008
           _cons |      8.081      0.203    39.83   0.000        7.683       8.479
    ------------------------------------------------------------------------------
    

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

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

    sysuse "nlsw88.dta", clear
    
    *-待对比变量组
      global xx "wage hours ttl_exp "
    
    *-基本表格
    . balancetable union $xx using "tab1.xlsx", replace
      shellout "tab1.xlsx"  //打开输出的文件,在推文中截图呈现
      
    *-设定列名
    . balancetable union $xx using "tab2.xlsx", replace ///
          ctitles("Union" "Non-Union" "Difference")
      shellout "tab2.xlsx"
      
    *-异方差,p-value 
    . balancetable union $xx using "tab3.xlsx", replace ///
          vce(robust) pval ///
          ctitles("Union" "Non-Union" "Difference")
      shellout "tab3.xlsx"
          
    *-三个组:两两对比
      *gen white = (race==1) // Control 组
      gen black = (race==2)  // Treat A
      gen other = (race==3)  // Treat B
      balancetable (mean if race==1) (mean if race==2) (mean if race==3) ///
         (diff black if race!=3) ///  // White v.s. Black
         (diff other if race!=2) ///  // White v.s. other
         (diff black if race!=1) ///  // black v.s. other
         $xx using "tab4.xlsx",  ///
         ctitles("Mean White" "Mean Black" "Mean Other" "Black vs White" "Other vs White" "Black vs Other")
        
    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 中,以便直接插入论文中。

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

    *--------------
    *-ttest 命令
    *--------------
    
    sysuse "nlsw88.dta", clear  //调用内置数据集nlsw88
    *对married进行频数统计
    tab married
    *利用ttest对单个变量wage进行组间均值差异检验
    ttest wage, by(married)
    *通过unequal选项进行非配对样本非同方差的检验
    ttest wage, by(married) unequal
    *通过level选项更改置信水平为99%
    ttest wage, by(married) unequal level(99)
    
    
    *--------------
    *-median 命令
    *--------------
    
    *利用median对单个变量wage进行组间中位数差异检验
    median wage, by(married)
    *通过exact选项计算Fisher's exact test方法下的显著性水平
    median wage, by(married) exact
    
    
    *--------------
    *-ttable2 命令
    *--------------
    
    *利用ttable2对多个变量进行组间均值差异检验
    ttable2 wage ttl_exp tenure age, by(married)
    *通过format选项控制显示格式
    ttable2 wage ttl_exp tenure age, by(married) format(%6.2f)
    *对race进行频数统计
    tab race
    *通过if设定样本范围,比较白人和黑人的均值差异
    ttable2 wage ttl_exp tenure age if race==1 | race==2, by(race)
    *通过if设定样本范围,比较白人和其他人种的均值差异
    ttable2 wage ttl_exp tenure age if race==1 | race==3, by(race)
    
    
    *--------------
    *-ttable3 命令
    *--------------
    
    *首先,用ttable2实现组间均值差异检验
    ttable2 wage ttl_exp tenure age, by(married)
    *然后,用ttable3实现组间均值差异检验
    ttable3 wage ttl_exp tenure age, by(married)
    *添加media选项,进行组间中位数差异检验
    ttable3 wage ttl_exp tenure age, by(married) media
    *添加tvalue选项,为结果添加t_value
    ttable3 wage ttl_exp tenure age, by(married) tvalue
    *添加pvalue选项,为结果添加p_value
    ttable3 wage ttl_exp tenure age, by(married) pvalue
    *添加notitle选项,将标题删除
    ttable3 wage ttl_exp tenure age, by(married) notitle
    *添加nostar选项,将*号删除
    ttable3 wage ttl_exp tenure age, by(married) nostar
    
    
    *--------------------
    *- balancetalbe 命令
    *--------------------
    
    sysuse "nlsw88.dta", clear
    
    *-待对比变量组
      global xx "wage hours ttl_exp "
    
    *-基本表格
    . balancetable union $xx using "tab1.xlsx", replace
      shellout "tab1.xlsx"  //打开输出的文件,在推文中截图呈现
      
    *-设定列名
    . balancetable union $xx using "tab2.xlsx", replace ///
          ctitles("Union" "Non-Union" "Difference")
      shellout "tab2.xlsx"
      
    *-异方差,p-value 
    . balancetable union $xx using "tab3.xlsx", replace ///
          vce(robust) pval ///
          ctitles("Union" "Non-Union" "Difference")
      shellout "tab3.xlsx"
          
    *-三个组:两两配对检验
      *gen white = (race==1) // Control 组
      gen black = (race==2)  // Treat A
      gen other = (race==3)  // Treat B
      balancetable (mean if race==1) (mean if race==2) (mean if race==3) ///
         (diff black if race!=3) ///  // White v.s. Black
         (diff other if race!=2) ///  // White v.s. other
         (diff black if race!=1) ///  // black v.s. other
         $xx using "tab4.xlsx", replace ///
         ctitles("Mean White" "Mean Black" "Mean Other" "Black vs White" "Other vs White" "Black vs Other")
        
    . shellout "tab4.xlsx"  
    

    连享会计量方法专题……

    关于我们

    • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
    • 推文同步发布于 CSDN简书知乎Stata专栏。可在百度中搜索关键词 「Stata连享会」查看往期推文。
    • 点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
    • 欢迎赐稿: 欢迎赐稿。录用稿件达 三篇 以上,即可 免费 获得一期 Stata 现场培训资格。
    • E-mail: StataChina@163.com
    • 往期精彩推文:一网打尽

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/wrxmtctx.html