查看原文
其他

Stata:回归后假设检验一览

连享会 连享会 2023-02-21

👇 连享会 · 推文导航 | www.lianxh.cn


连享会 · 2022 面板数据因果推断专题

   

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


目录

  • 1. 简介

  • 2. 单个系数的检验

    • 2.1 单个系数线性假设:test

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

  • 3. 多个系数组合的检验

    • 3.1 系数的线性组合:lincom

    • 3.2 系数的非线性组合:nlcom

  • 4. 小结

  • 5. 参考资料

  • 6. 相关推文



温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:

1. 简介

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

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

以 CD 生产函数为例:

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

假如在使用生产数据对模型 (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

  • 专题:Stata教程
    • Stata检验:AIC-BIC-MSE-MAE-等信息准则的计算
  • 专题:Stata命令
    • Stata:异方差和自相关稳健F检验和t检验-T316
    • ebalance:基于熵平衡法的协变量平衡性检验
    • gcrobustvar:基于VAR的稳健性Granger因果检验
    • 品头论足-distcomp:组间分布差异检验
    • reldist-相对分布:分布差异分析和检验
  • 专题:数据处理
    • Stata:多变量均值和中位数差异检验
  • 专题:回归分析
    • 稳健性检验!稳健性检验!
    • aoeplacebo:地理安慰剂检验
    • Stata: 如何检验分组回归后的组间系数差异?
  • 专题:面板数据
    • Stata面板:suest支持面板数据的似无相关检验
    • Stata面板:Granger-因果检验
    • Sargan+Hansen:过度识别检验及Stata实现
  • 专题:IV-GMM
    • IV专题: 内生性检验与过度识别检验
  • 专题:倍分法DID
    • 多期DID之安慰剂检验、平行趋势检验
    • 多期DID:平行趋势检验图示
  • 专题:断点回归RDD
    • Stata: 断点回归 (RDD) 中的平滑性检验
  • 专题:内生性-因果推断
    • 安慰剂检验!安慰剂检验!
    • xtgranger:面板格兰杰因果检验-C103
    • locmtest:非线性模型的内生性检验
    • suest:跨模型比较与广义豪斯曼检验
    • 第三种内生性:衡量偏误(测量误差)如何检验-dgmtest?
    • Stata新命令:konfound - 因果推断的稳健性检验
  • 专题:交乘项-调节
    • Stata:虚拟变量交乘项生成和检验的简便方法
    • Stata:调节中介效应检验.md
    • utest:检验U型和倒U形关系
  • 专题:时间序列
    • Stata: 单位根检验就这么轻松

课程推荐:面板数据因果推断
主讲老师:徐轶青 (斯坦福大学)
🍓 课程主页https://gitee.com/arlionn/Course

New! Stata 搜索神器:lianxhsongbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉  使用:
. lianxh DID 倍分法
. songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


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

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