如何绘制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的取值范围不会宽到让曲线明显显现。
同时给你两个实用建议:
- 修正代码中的小错误:你没有提取方差矩阵,需要先加
matrix V = e(V);另外矩阵引用错误,scalar b1 = b[1,1]应该改成scalar b1 = b1[1,1],scalar b2 = b2[1,2]同理,否则Stata会找不到对应矩阵。 - 用
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
相关产品推荐
相关产品推荐

