Stata:回归后假设检验一览
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
连享会 · 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
多变量系数联合检验 (非线性假设)
其中, test
与 testnl
用法相似, lincom
与 nlcom
用法相似,区别只在于 test
和 lincom
只支持检验线性表达式, testnl
和 nlcom
可检验非线性表达式。因此,以下将分别介绍这四个命令的使用方式。
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 = -.1 , test
命令返回 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) 对加入工会的影响,因为模型里含有 married 与 age 的交乘项,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. 小结
我们介绍了使用 test
、 testnl
、 lincom
、 nlcom
四个命令进行回归后系数检验。对这四个命令做一个简单的小结:
test
进行 Wald 检验,输出 F 值和 p 值;可以在线性回归和非线性回归之后使用;只能检验线性假设;支持变量系数简写,例如 age 变量的系数 _b[age] 简写为 age 。tesnl
是与test
对应的、检验非线性假设的命令;不支持变量系数简写。lincom
进行双尾 t 检验,输出系数、标准误、 z 值、 p 值和置信区间,还支持以 odds ratio , relative risk ratio 等形式展示结果;可以在线性回归和非线性回归之后使用;只能检验线性假设;支持变量系数简写。nlcom
是与lincom
对应的、检验非线性假设的命令;不支持变量系数简写。总之,四个命令中, test
和lincom
命令较为重要,理解这两个命令的用法之后就不难理解testnl
和nlcom
的用法,testnl
和nlcom
只不过是将适用对象扩展到非线性假设而已。虽然 test
与lincom
检验方法不同,前者进行 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 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。