You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绘制ivreg2的IV交互项结果?置信区间呈线性是否正常?

IV模型边际效应图置信区间呈线性是否正常?

问题描述

我设定了如下IV模型,希望绘制x1对y的边际效应随x2变化的图形:
ivreg2 y= (x1 x1#x2 = z1 z1#x2), endog(x1 x1#x2)
其中x1和x2为连续变量,z1为二元变量。我尝试了以下Stata代码绘制,但发现置信区间呈线性,请问这是否正常?

generate baseline = 1 if e(sample)

matrix b1 = e(b1)
matrix b2 = e(b2)
scalar b1 = b[1,1]
scalar b2 = b[1,2]

scalar varb1 = V[1,1]
scalar varb2 = V[2,2]
scalar covb1b2 = V[1,2]

generate MVL = x2

gen conbl = b1 + b2 * MVL
gen consl = sqrt(varb1 + varb2 * (MVL^2) + 2 * covb1b2 * MVL) 
gen al = 1.65 * consl
gen upperl = conbl + al
gen lowerl = conbl - al

graph twoway line conbl MVL, lpattern(solid) clwidth(medium) clcolor(black) || line upperl MVL, clpattern(longdash) clwidth(thin) clcolor(gs8) sort || line lowerl MVL, clpattern(longdash) clwidth(thin) clcolor(gs8) sort ||, yscale(noline) xscale(noline) yline(0, lcolor(black)) xtitle("x2", size(3)) xsca(titlegap(2)) ysca(titlegap(2)) ytitle("Marginal Effect of x1", size(3)) scheme(s2mono) graphregion(fcolor(white)) legend(off)

解答

这种情况是正常的,原因如下:

  • 你的模型中x1对y的边际效应本身就是线性形式:ME(x1) = b1 + b2*x2,这是一条直线。
  • 边际效应的方差是关于x2的二次函数:Var(ME) = Var(b1) + x2²*Var(b2) + 2*x2*Cov(b1,b2),但标准误是这个方差的平方根。如果x2的取值范围较窄,二次项的影响会被压缩,视觉上标准误的变化就接近线性,最终置信区间看起来就是直线。只有当x2取值范围极大时,置信区间才会显现出轻微的曲线,但大部分实证研究中x2的取值范围不会宽到让曲线明显显现。

同时给你两个实用建议:

  1. 修正代码中的小错误:你没有提取方差矩阵,需要先加matrix V = e(V);另外矩阵引用错误,scalar b1 = b[1,1]应该改成scalar b1 = b1[1,1],scalar b2 = b2[1,2]同理,否则Stata会找不到对应矩阵。
  2. 用margins命令替代手动计算,更高效且不易出错:
    ivreg2 y= (x1 x1#x2 = z1 z1#x2), endog(x1 x1#x2)
    * 生成x2的21个等距取值点,覆盖全范围
    margins, dydx(x1) at(x2=(min(x2) (max(x2)-min(x2))/20 max(x2)))
    * 绘制边际效应图
    marginsplot, yline(0) scheme(s2mono) graphregion(fcolor(white)) legend(off) xtitle("x2") ytitle("Marginal Effect of x1")
    
    这个命令会自动计算边际效应和正确的置信区间,省去手动计算系数、方差和协方差的麻烦。

内容的提问来源于stack exchange,提问作者redha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:44:53