Stata:回归后假设检验一览

发布时间:2021-07-24 阅读 4726

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

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

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

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

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

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者: 王维怡 (厦门大学)
邮箱: wangwyda@163.com


目录


1. 简介

我们在回归后可能需要对单个或多个变量的回归系数进行假设检验。

按待检验约束的个数,假设检验可以分为单变量检验和多变量联合检验;按假设形式,假设检验可以分为线性假设和非线性假设。

以 CD 生产函数为例:

其中,Yt 为生产率,Lt 为劳动投入,Kt 为资本投入,SOEt 为是否是国有企业的哑变量。

假如在使用生产数据对模型 (1) 进行回归之后,我们想检验以下假设:

检验产权性质对生产率是否有影响 (单变量检验) ,则原假设是:

检验劳动投入、资本投入对生产率的联合影响 (多变量联合检验) ,则原假设是:

检验生产技术是否是规模报酬不变 (多个变量系数的线性组合) ,则原假设是:

Stata 提供了多个回归后命令 (postestimation commands) 进行系数检验:

  • test 单变量系数检验 (线性假设)
  • testnl 单变量系数检验 (非线性假设)
  • lincom 多变量系数联合检验 (线性假设)
  • nlcom 多变量系数联合检验 (非线性假设)

其中, testtestnl 用法相似, lincomnlcom 用法相似,区别只在于 testlincom 只支持检验线性表达式, testnlnlcom 可检验非线性表达式。因此,以下将分别介绍这四个命令的使用方式。

Note: 可以使用 ihelp 命令获取 Stata 的 PDF 说明书内容。

. ssc install ihelp 
. ihelp test    // 将在默认浏览器中打开 test 命令的 PDF 说明书

2. 单个系数的检验

2.1 单个系数线性假设:test

test 基于方差-协方差矩阵估计作 Wald 检验,既可以在 OLS 回归后,也可以在 logit 等非线性回归后使用。

首先,简单介绍 test 命令的基本语法:

 test (exp) [(exp) ...] , ///
    accumulate notest constant minimum coef

具体解释如下:

  • exp 待检验的假设表达式 (参数约束条件),检验多个表达式时使用 () 分隔
  • accumulate 与之前检验的参数假设合并进行联合检验
  • notest 屏幕上不显示检验结果
  • constant 将回归常数项纳入检验
  • coef 显示受约束系数

我们以 Stata 内置数据集 nlsw88.dta 为例进行演示。先进行 OLS 回归分析,考察哪些因素会影响工资。

* 调用内置数据集 nlsw88
. sysuse nlsw88, clear
(NLSW, 1988 extract)

* OLS:哪些因素影响工资
. reg wage age married i.race tenure ttl_exp 

   Source |       SS           df       MS      Number of obs   =     2,231
----------+----------------------------------   F(6, 2224)      =     36.25
    Model |  6601.00473         6  1100.16745   Prob > F        =    0.0000
 Residual |  67500.8229     2,224  30.3510894   R-squared       =    0.0891
----------+----------------------------------   Adj R-squared   =    0.0866
    Total |  74101.8276     2,230  33.2295191   Root MSE        =    5.5092
---------------------------------------------------------------------------
     wage |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
----------+----------------------------------------------------------------
      age |     -0.149      0.039    -3.87   0.000       -0.224      -0.073
  married |     -0.603      0.249    -2.42   0.016       -1.093      -0.114
          |
     race |
   black  |     -1.556      0.274    -5.68   0.000       -2.093      -1.018
   other  |      0.451      1.089     0.41   0.679       -1.685       2.587
          |
   tenure |      0.049      0.026     1.89   0.059       -0.002       0.100
  ttl_exp |      0.307      0.031     9.85   0.000        0.246       0.368
    _cons |     10.258      1.531     6.70   0.000        7.256      13.260
---------------------------------------------------------------------------

如果要检验年龄 (age) 系数是否等于 -0.1 ,使用 test 命令。从检验结果可以看到, Stata 指出检验的原假设是 ( 1) age = -.1test 命令返回 F 值和 p 值。在本例中, p 值等于 0.2039 ,无法拒绝原假设。

. * 检验 age 系数是否等于 -0.1
. test _b[age] = -0.1

 ( 1)  age = -.1

       F(  1,  2224) =    1.62
            Prob > F =    0.2039

    * Note: test 命令支持系数简写,可以简写成
    *       test age = -0.1

如果要检验种族 (race) 对工资是否有影响,因为 race 是虚拟变量,取值 1 、 2 、 3 分别对应白人、黑人、其他种族,需要同时检验 race 取 2 和 3 的系数是否联合等于 0 。从检验结果可以看到, p 值在 1% 水平显著,可以拒绝原假设。

* 检验 race 对工资的影响
. test (_b[2.race] = 0) (_b[3.race] = 0)  // 使用 () 分隔多个表达式

 ( 1)  2.race = 0
 ( 2)  3.race = 0

       F(  2,  2224) =   16.41
            Prob > F =    0.0000

   * Note: test 命令支持系数简写,可以简写成
   *       test 2.race 3.race

test 还可以检验简单的等式,例如,检验黑人 (2.race) 系数的 1.1 倍是否等于其他种族 (3.race) 的系数。从检验结果可以看到, p 值在 10% 水平显著。

* 黑人系数的 1.1 倍是否等于其他种族的系数
. test _b[2.race] * 1.1 = _b[3.race]

 ( 1)  1.1*2.race - 3.race = 0

       F(  1,  2224) =    3.78
            Prob > F =    0.0520

   * Note: test 命令支持系数简写,可以简写成
   *       test 2.race * 1.1 = 3.race

2.2 单个系数非线性假设:testnl

如果要检验的参数假设是非线性的,需要使用 testnl 命令,此命令的基本用法与 test 相似。在这里延续上例作简单介绍。

例如,检验年龄 (age) 系数的平方是否等于0.1。从检验结果可以看到, testnl 输出卡方值和 p 值。在本例中, p 值等于 0.2882,无法拒绝原假设。

. testnl _b[age]^2 = 0.01         

  (1)  _b[age]^2 = 0.01

               chi2(1) =        1.13
           Prob > chi2 =        0.2882

Note:

  • testnl 命令不支持变量系数简写,需要写完整的表达式,例如 _b[age]
  • testnl 也可以用于检验线性假设,如果要同时检验一组假设,其中既有线性假设,也有非线性假设时,使用 testnl 可以兼容所有假设。

3. 多个系数组合的检验

3.1 系数的线性组合:lincom

lincom 命令的基本语法如下:

lincom exp, ///
    or rrr irr hr level(#)

具体解释如下:

  • lincom 命令的使用方法与 test 命令基本相似,都是检验表达式 exp 的显著性,区别在于 test 进行的是 Wald 检验,而 lincom 进行的是双尾 t 检验,在大样本时二者结果非常接近。
  • or 以「比值比」 (odds ratio) 形式输出检验结果,适合 logit 回归后使用。
  • rrr 以「相对风险比」 (relative risk ratio) 形式输出检验结果,适合 mlogit 回归之后使用。
  • irr 以「发生率比」 (incidence-rate ratio) 形式输出检验结果,适合 poisson 回归后使用。
  • hr 以「风险比」 (hazard ratio) 形式输出检验结果,适合 stcox 和 streg 回归后使用。
  • level(#) 设定置信水平,默认为 95% 。
  • lincom 检验的表达式 exp 中不能包含等号,需要将所有项移到等号左边。

下面,我们仍以 Stata 内置数据集 nlsw88.dta 为例进行演示。首先进行 logit 回归分析,检验是否加入工会的影响因素。

* 调用内置数据集 nlsw88
. sysuse nlsw88, clear
(NLSW, 1988 extract)

* logit: 哪些因素与加入工会相关
. logit union wage age married i.race , nolog

Logistic regression                             Number of obs =  1,878
                                                LR chi2(5)    =  60.55
                                                Prob > chi2   = 0.0000
Log likelihood = -1016.3517                     Pseudo R2     = 0.0289

----------------------------------------------------------------------
   union |   Coef.   Std. Err.     z    P>|z|     [95% Conf. Interval]
---------+------------------------------------------------------------
    wage |   0.084      0.013    6.67   0.000        0.059       0.108
     age |   0.013      0.018    0.71   0.479       -0.023       0.048
 married |  -0.119      0.115   -1.03   0.303       -0.345       0.107
         |                                                            
    race |                                                            
  black  |   0.492      0.123    3.99   0.000        0.250       0.734
  other  |   0.483      0.447    1.08   0.281       -0.394       1.359
         |
   _cons |  -2.356      0.732   -3.22   0.001       -3.791      -0.920
----------------------------------------------------------------------

检验年龄 (age) 系数是否等于 0 ,使用 lincom 命令,注意检验的表达式中不能包含等号。从检验结果可以看到,相比 test 命令, lincom 返回的结果更为详细,包含系数、标准误、 z 值、 p 值、置信区间,并且这些结果与 logit 回归中 age 的系数结果完全一致,因为二者都是进行双尾 t 检验。

. * 检验 age 系数是否等于 0
. lincom _b[age]

 ( 1)  [union]age = 0

--------------------------------------------------------------------
 union |  Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------+------------------------------------------------------------
   (1) |  0.013      0.018     0.71   0.479       -0.023       0.048
--------------------------------------------------------------------

lincom 命令的一个优势在于其可以选择以「比值比」「相对风险比」「发生率比」等形式展示检验结果,只需要在 lincom 后加上 or rrr irr 等选项即可。

这里以「比值比」为例,检验黑人已婚女性与基准组 (白人未婚女性) 相比,加入工会的比值比,在 lincom 命令后加上 or 选项。从检验结果可以看出,加上 or 选项后 lincom 命令输出的系数 (coef.) 变成了比值比 (odds ratio) 。在本例中, p 值在 5% 水平显著,可以拒绝原假设。

. * 检验黑人已婚女性与基准组 (白人未婚女性) 相比,加入工会的比值比
. lincom _b[2.race] + _b[married] , or    // 已婚黑人

( 1)  [union]married + [union]2.race = 0

-------------------------------------------------------------------
union | Odds Ratio   Std. Err.    z    P>|z|  [95% Conf. Interval]
-------+-----------------------------------------------------------
  (1) |      1.452      0.270   2.00   0.045     1.008       2.092
-------------------------------------------------------------------
* Note: lincom 命令支持系数简写,可以简写成
*       lincom 2.race + married

如果回归中存在涉及连续变量的交乘项,使用 lincom 对该交乘项进行检验时,需要指定连续变量的取值。以下仍以 logit 回归为例,考虑加入工会的影响因素,在回归中加入年龄 (age) 与是否已婚 (married) 的交乘项,其中 age 是连续变量,married 是 0-1 变量。

. * 调用内置数据集 nlsw88
. sysuse nlsw88, clear
(NLSW, 1988 extract)

. * 包含连续变量交乘项的回归
. logit union i.race wage c.age##i.married , nolog

Logistic regression                             Number of obs   =  1,878
                                                LR chi2(6)      =  60.55
                                                Prob > chi2     = 0.0000
Log likelihood = -1016.3516                     Pseudo R2       = 0.0289

------------------------------------------------------------------------
        union |  Coef.   Std. Err.     z    P>|z|   [95% Conf. Interval]
--------------+---------------------------------------------------------
         race |                                                         
       black  |  0.492      0.123    3.99   0.000      0.250       0.734
       other  |  0.482      0.447    1.08   0.281     -0.395       1.359
              |                                                         
         wage |  0.084      0.013    6.67   0.000      0.059       0.108
          age |  0.013      0.030    0.42   0.676     -0.046       0.071
              |                                                         
      married |                                                         
     married  | -0.134      1.479   -0.09   0.928     -3.033       2.764
              |                                                         
married#c.age |                                                         
     married  |  0.000      0.038    0.01   0.992     -0.073       0.074
              |                                                         
        _cons | -2.346      1.195   -1.96   0.050     -4.688      -0.004
------------------------------------------------------------------------

假如现在要检验是否已婚 (married) 对加入工会的影响,因为模型里含有 marriedage 的交乘项,married 对加入工会的影响包含两个系数—— 单独 married 变量的系数和交乘项的系数。在使用 lincom 检验时,需要指定 age 的取值,假如我们取年龄变量的样本均值:

. qui sum age
. local age_avg=r(mean)    // 计算 age 样本均值,并存入暂元
. lincom _b[1.married] + `age_avg'*_b[1.married#c.age] , or

 ( 1)  [union]1.married + 39.15316*[union]1.married#c.age = 0

---------------------------------------------------------------------
 union | Odds Ratio   Std. Err.     z    P>|z|   [95% Conf. Interval]
-------+-------------------------------------------------------------
   (1) |      0.888      0.103   -1.03   0.303      0.708       1.114
---------------------------------------------------------------------

从以上检验结果可以看到,当年龄为样本均值 39.15 岁时,已婚女性与基准组未婚女性相比,加入工会的比值比是 0.888 ,但没有达到传统显著水平。

3.2 系数的非线性组合:nlcom

如果要检验的系数假设是非线性的,需要使用 nlcom 命令,其基本用法与 lincom 相似。在这里延续上例简单介绍。

例如,检验工资 (wage) 与黑人女性 (2.race) 系数之比是否等于1。从检验结果可以看出, p 值小于 0.01 ,拒绝了原假设。

. * 检验 wage 与 2.race 系数之比是否等于 1
. nlcom _b[wage] / _b[2.race] - 1

       _nl_1:  _b[wage] / _b[2.race] - 1

--------------------------------------------------------------------
 union |    Coef.   Std. Err.      z    P>|z|   [95% Conf. Interval]
-------+------------------------------------------------------------
 _nl_1 |   -0.830      0.046   -18.05   0.000     -0.920      -0.740
--------------------------------------------------------------------

Note:

  • lincom 相同, nlcom 检验的表达式中也不能含有等号,要把所有项移到等号左边。
  • nlcom 不支持变量系数简写,要写成完整形式,例如 _b[wage]

4. 小结

我们介绍了使用 testtestnllincomnlcom 四个命令进行回归后系数检验。对这四个命令做一个简单的小结:

  • test 进行 Wald 检验,输出 F 值和 p 值;可以在线性回归和非线性回归之后使用;只能检验线性假设;支持变量系数简写,例如 age 变量的系数 _b[age] 简写为 age
  • tesnl 是与 test 对应的、检验非线性假设的命令;不支持变量系数简写。
  • lincom 进行双尾 t 检验,输出系数、标准误、 z 值、 p 值和置信区间,还支持以 odds ratio , relative risk ratio 等形式展示结果;可以在线性回归和非线性回归之后使用;只能检验线性假设;支持变量系数简写。
  • nlcom 是与 lincom 对应的、检验非线性假设的命令;不支持变量系数简写。
  • 总之,四个命令中, testlincom 命令较为重要,理解这两个命令的用法之后就不难理解 testnlnlcom 的用法,testnlnlcom 只不过是将适用对象扩展到非线性假设而已。
  • 虽然 testlincom 检验方法不同,前者进行 Wald 检验,后者进行双尾 t 检验,但检验结论基本一致。

5. 参考资料

  • Stata Manual: 20 Estimation and Postestimation Commands. -PDF-
  • 洪永淼. 高级计量经济学[M]. 高等教育出版社, 2011.
  • 陈强. 高级计量经济学及 Stata 应用[M]. 高等教育出版社, 2014.

6. 相关推文

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

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

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

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

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

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

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