Stata:无需工具变量的IV估计-kinkyreg-

发布时间:2021-10-03 阅读 4877

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

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

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

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

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

⛳ Stata 系列推文:

江   鑫 (安徽大学),jiangxin199566@foxmail.com
曹昊煜 (兰州大学),caohy19@lzu.edu.cn

编者按:本文主要摘译自下文,特此致谢!
Source:Kripfganz S, Kiviet J F. kinkyreg: Instrument-free inference for linear regression models with endogenous regressors[J]. Community (contributed Stata program. Mimeo in preparation, 2020. -PDF-


目录


1. 背景介绍

众所周知,工具变量在解决内生性问题中发挥着重要作用。在具有内生变量的模型中,标准回归方法是通过使用工具变量来利用恰好或过度识别的正交性条件。在恰好识别的模型中,如果不强加其他不可测试的假设,正交性假设就无法识别。虽然对过度识别限制的正式测试是可能的,其解释仍然取决于一组初始的不可测试的恰好识别正交性条件的有效性。

我们编写了 kinkyreg 命令,用于 kinky 最小二乘 (KLS) 推理,该程序采用了另一种识别方法。通过利用内生性可接受程度界限形式的非正交条件,可以构建不需要工具变量的可行测试程序。 KLS 置信区间比从工具变量估计获得的置信区间提供更多信息,尤其是当工具较弱时。此外,该方法有助于标准工具变量推断的敏感性分析。特别是,它允许评估以前无法测试的仅识别排除限制的有效性。进一步,基于 KLS 的检验包括异方差、函数形式和序列相关检验。

2. 理论模型

2.1 线性回归模型

考虑如下线性回归模型:

其中, x1i 为内生变量,x2i 为外生变量的向量,εi(0,σε2),并且

该模型可以推广到多个内生回归量 (Kiviet, 2020)。OLS 是不一致的,因为 E[x1εi]=ρσ1σε0,对于非零内生相关性 Corr(x1i,εi)=ρ0

2.2 Kinky 最小二乘估计

虽然 2SLS 使用正交条件 E[ziεi]=0,但 KLS 使用非正交条件 E[x1iεi]=ρσ1σε (除了外生变量X2i 的正交条件)。对于给定的相关性 ρσε 可以一致地估计为:

其中,σ^ε,OLS2=N1i=1Nε^i,OLS2ε^i,OLS 代表OLS残差。方差估计值 σ^12σ^12 和 Σ^2 很容易从数据中获得。

KLS 估计修正 OLS 估计的不一致性:

Kiviet (2020) 推导出 KLS 估计量的方差-协方差矩阵 σε2V(ρ,κx,κε) 的解析表达式,作为回归量峰态 κx 和误差项峰态的函数 κϵκx 的估计值可以从数据中获得,κ^ε(ρ)=N1i=1N[ε^i(ρ)/σ^ε(ρ)]4ε^i(ρ)表示KLS 残差。

对于 V(ρ,κx,κε) 的易处理表达式,Kiviet (2020) 假设所有回归量的峰态 κX 相同。 通过选择 κ^X 作为个体峰度估计的最大值,我们获得 (渐近) 保守置信区间。与内生性相关的 ρ 未知,但假设位于区间 ρ[r1,ru] 中。KLS 估计量 β^(r) 是针对一系列值 r[rl,ru] 计算的,受如下可行性限制:

对于显著性水平 α,在 ρ[r1,ru] 范围内的 KLS 置信区间的并集具有至少 1α 的渐近覆盖率。

3. 命令介绍

*命令安装
cnssc install kinkyreg, replace
*命令语法
kinkyreg depvar [varlist1] (varlist2 [= varlist_iv]) [if] [in] [, options]
  • varlist1 代表一系列外生变量;
  • varlist2 代表一系列内生变量;
  • varlist_iv 代表一系列排除的工具变量。

options 选择项及其含义如下:

  • 模型:

    • endogeneity(numlist):指定内生性相关值;
    • range(#_1 #_2):内生变量的准许范围;
    • stepsize(#):考虑内生性的处理步骤;
    • ekurtosis(#):指定误差项的峰度;
    • xkurtosis(#):指定右侧变量的峰度;
    • noconstant:除去常数项。
  • 汇报项:

    • correlation(#):回归输出的特定内生性;
    • level(#):设置置信水平,默认值为 95%;
    • small:进行自由度调整并报告小样本统计量;
    • inference(varlist):为 KLS 推断指定变量;
    • lincom(#: exp):为 KLS 推断指定线性组合,可以多次指定;
    • twoway(twoway_spec):指定双向图的选项,可以多次指定;
    • coefplot(coefplot_spec):指定系数图的选项,可以多次指定;
    • ciplot(ciplot_spec):指定置信区间图的选项,可以多次指定;
    • namestub(namestub):为双向图名称设置前缀;
    • ivperfect:不检查内生变量和外生工具变量之间的共线性;
    • coeflegend:显示图例而不是统计数据;
    • nograph:不绘图;
    • noheader:不输出标题;
    • notable:不输出系数表;
    • novstore:不要为每个网格点存储方差-协方差矩阵,很少使用;
    • display_options:控制列和列格式、行间距、行宽、省略变量的显示以及基本和空单元格,及因子变量标签。

4. Stata 实操

下面调用数据集,举个栗子,使用 kinkyreg 得出估计系数和置信区间:

4.1 假设 iq 为内生变量

. use http://www.stata-press.com/data/imeus/griliches.dta, clear
. set scheme s1color
. kinkyreg lw s expr tenure rns smsa _I* (iq = age mrt), range(-0.75 0.75) small inference(iq s)

可以使用 correlation(#) 轻松获得特定内生相关性的 KLS 回归输出。假设轻度到中度的测量误差是内生性的来源,一个合理的选择可能是 r[0.4,0]

. kinkyreg, correlation(-0.4)

Kinky least squares estimation                    Number of obs   =        758
Postulated endogeneity of iq = -0.4000
------------------------------------------------------------------------------
          lw |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
          iq |   .0178505   .0016046    11.12   0.000     .0147003    .0210006
           s |    .018874   .0090898     2.08   0.038     .0010293    .0367187
        expr |    .036647   .0074092     4.95   0.000     .0221016    .0511925
      tenure |   .0355367   .0085142     4.17   0.000     .0188221    .0522514
         rns |  -.0527647   .0315098    -1.67   0.094    -.1146233    .0090939
        smsa |   .1196815   .0301968     3.96   0.000     .0604005    .1789625
   _Iyear_67 |  -.0638234   .0543385    -1.17   0.241    -.1704981    .0428514
   _Iyear_68 |   .0872164   .0509777     1.71   0.088    -.0128607    .1872935
   _Iyear_69 |   .1878763   .0498298     3.77   0.000     .0900528    .2856998
   _Iyear_70 |   .1661179   .0556755     2.98   0.003     .0568184    .2754174
   _Iyear_71 |   .1882715   .0490242     3.84   0.000     .0920295    .2845134
   _Iyear_73 |   .3048592     .04619     6.60   0.000     .2141811    .3955373
       _cons |   3.255792   .1420164    22.93   0.000     2.976992    3.534592
------------------------------------------------------------------------------

工具变量的排除性检验:

. estat exclusion, twoway(, ylabel(0.01 0.05 0.1, grid)) notable

估计结果展示如下图:

4.2 假设 kww 为内生变量

系数与置信区间估计:

. kinkyreg lw s expr tenure rns smsa _I* age mrt (kww = iq), ///
>          range(-0.75 0.75) small inference(kww s)

结果展示如下:

工具变量的排除检验:

. estat exclusion, twoway(, ymtick(0.05 0.1, grid))

Endogeneity of kww compatible with valid exclusion
-----------------------------------------------
             |     Corr.  [95% Confid. Bounds] 
-------------+---------------------------------
          iq | -.3183786  -.5207143  -.1120693 
-----------------------------------------------

交互项的排除检验:

. estat exclusion c.expr#c.expr c.tenure#c.tenure c.age#c.age ///
>       c.expr#c.tenure c.expr#c.age c.tenure#c.age,          ///
>       twoway(, ymtick(0.05 0.1, grid)) nojoint notable

边际效应:tenure 变量边际效应的 KLS 估计为 βtenure +βc.tenure\#c.age age,可以使用 lincom() 选项生成选定的年龄值。

. kinkyreg lw s expr tenure rns smsa _I* age mrt c.tenure#c.age (kww), ///
>     range(-0.75 0.75) small lincom(1: tenure+c.tenure#c.age*20)      ///
>     lincom(2: tenure+c.tenure#c.age*30) ///
>     twoway(, ytitle("marginal effect of tenure") ylabel(-0.15(0.05)0.2) ///
>     ytick(0, grid) legend(off)) twoway(1, title("age = 20"))            ///
>     twoway(2, title("age = 30"))

Kinky least squares estimation                    Number of obs   =        758

结果展示如下:

线性假设检验:原假设是对于更高的年龄,tenureexpr 边际效应相等会被拒绝。

. estat test tenure+c.tenure#c.age*20=expr, twoway(, title("age == 20") ///
>       ylabel(0(0.2)1) name(kinkyreg_test1))

. estat test tenure+c.tenure#c.age*30=expr, twoway(, title("age == 30") ///
>       ymtick(0.05 0.1, grid) name(kinkyreg_test2))

Ramsey 回归规范误差测试 (RESET):RESET 是对内生性校正拟合值 (默认选项 xb) 或右侧变量 (选项 rhs) 的排除性检验。

. estat reset, twoway(, ymtick(0.05 0.1, grid) legend(rows(1)) ///
>       name(kinkyreg_reset_xb))

. estat reset, rhs order(2 3) twoway(, ymtick(0.05 0.1, grid)  ///
>       name(kinkyreg_reset_rhs))

结果展示如下:

Breusch-Pagan 异方差检验:原假设是不存在条件异方差性,minp 选项显示单个显著性检验中的最小 p 值。

. estat hettest () (iq) (c.expr#c.expr c.tenure#c.tenure c.age#c.age      ///
>   c.expr#c.tenure c.expr#c.age), xb rhs twoway(, ymtick(0.05 0.1, grid) ///
>   name(kinkyreg_hett))

. estat hettest () (iq) (c.expr#c.expr c.tenure#c.tenure c.age#c.age      /// 
>   c.expr#c.tenure c.expr#c.age), rhs minp twoway(, ylabel(0(0.2)1)      ///
>   ymtick(0.05 0.1, grid) name(kinkyreg_hett_minp))

4.3 具有 2 个内生变量的 KLS 估计

系数估计与置信区间:

. *未限制显示范围:
. kinkyreg lw s expr tenure rns smsa _I* age mrt c.tenure#c.age (iq kww), ///
>          endogeneity(-0.2 .) range(-0.75 0.75) small inference(s)       ///
>          twoway(s,name(kinkyreg_s1))

Kinky least squares estimation                    Number of obs   =        758

. *使用选项 yrange() 限制显示范围:
. kinkyreg lw s expr tenure rns smsa _I* age mrt c.tenure#c.age (iq kww),  ///
>          endogeneity(-0.2 .) range(-0.75 0.75) small inference(s)        ///
>          twoway(s, yrange(-0.2 0.2) name(kinkyreg_s2)) 

Kinky least squares estimation                    Number of obs   =        758

曲面图和等高线图:

set scheme s1mono

forvalues endo = -40/0{
  quietly kinkyreg lw s expr tenure rns smsa _I* age mrt c.tenure#c.age ///
  (iq kww), endogeneity (`=`endo'/100' .) range(-0.4 0) small nograph   
  matrix b = (nullmat(b), e(b_kls)[., "s"])
  estat test s, nograph
  matrix p = (nullmat(p), r(p_kls))             
}

frame create kinkyreg
frame change kinkyreg
quietly svmat double b, name(s)
svmat double p, name(p)
generate double endo_kww = -0.4 + 0.01 * (_n - 1)

quietly reshape long s p, i(endo_kww) j(endo_iq)
recast double endo_iq

quietly replace endo_iq = (endo_iq - 41) / 100
label var s "s coefficient estimate"
label var p "p-value"
label var endo_kww "postulated endogeneity of kww"
label var endo_iq "postulated endogeneity of iq"

surface endo_iq endo_kww s, plotregion(lpattern(blank)) ytitle(endog. kww) ///
        nodraw name(surface_s)
surface endo_iq endo_kww p, plotregion(lpattern(blank)) ytitle(endog. kww) ///
        nodraw name(surface_p) 
twoway contour s endo_kww endo_iq, ccuts(-0.06(0.01)0.03) nodraw name(contour_s)
twoway contour p endo_kww endo_iq, ccuts(0.01 0.05 0.1) nodraw name(contour_p)
graph combine surface_s surface_p contour_s contour_p, altshrink	

4. 结论

kinkyreg 程序包提供了新工具,用于 (主要是图形) 在具有任意数量内生变量的线性回归模型中进行无工具变量推断。KLS 推理有利于基于工具变量的敏感性检查。KLS 方法通常比基于工具变量的方法产生更窄的置信区间,但仅与可接受的内生相关性的所选界限一样好。因此,将 KLS 视为对基于工具变量法的补充而不是替代更为合理的。

5. 参考资料

  • Kripfganz S, Kiviet J F. kinkyreg: Instrument-free inference for linear regression models with endogenous regressors[J]. Community (contributed Stata program. Mimeo in preparation, 2020. -PDF-
  • Kiviet J F. Testing the impossible: identifying exclusion restrictions[J]. Journal of Econometrics, 2020, 218(2): 294-316. -PDF-
  • Kiviet J. Instrument-free inference under confined regressor endogeneity; derivations and applications[J]. 2019. -PDF-
  • Mander A. 3D surface plots[J]. Stata Technical Bulletin, 2000, 9(51). -Link-

6. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 工具变量, m
安装最新版 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