* 模型1:不包含二次项
tobit y x $covars, ll(0)
* 模型1的边际效应
margins, at(x==(-1.92(0.1)1.315)) atmeans predict(ystar(0,.)) saving(margins_without_quad, replace)
* 模型2:包含二次项
tobit y x c.x#c.x $covars, ll(0)
* 模型2的边际效应
margins, at(x==(-1.92(0.1)1.315)) atmeans predict(ystar(0,.)) saving(margins_with_quad,replace)
// 载入包含二次项的边际效应数据
use margins_with_quad, clear
gen model = 1
// 检查边际效应变量名并重命名
describe
rename _margin dydx_x_quad
save margins_with_quad, replace
// 载入不包含二次项的边际效应数据
use margins_without_quad, clear
gen model = 2
// 检查边际效应变量名并重命名
describe
rename _margin dydx_x_no_quad
save margins_without_quad, replace
// 合并两个数据集
use margins_with_quad, clear
append using margins_without_quad
// 绘制边际效应曲线
twoway (rarea _ci_lb _ci_ub _at1 if model==1, color(blue%30) lwidth(none) xlab(-2(0.5)1.5)) ///
(line dydx_x_quad _at2 if model==1, lcolor(blue) lwidth(medium) lpattern(solid)) ///
(rarea _ci_lb _ci_ub _at1 if model==2, color(red%30) lwidth(none) ) ///
(line dydx_x_no_quad _at1 if model==2, lcolor(red) lwidth(medium) lpattern(dash)), ///
legend(order(2 "有二次项模型" 4 "无二次项模型")) ///
title("") ///
xtitle("x") ytitle("E(y*|y>0)")
graph export "边际效应比较.pdf", replace
知识点:
1. margins输出结果可以存储为dta
2. twoway rarea专门用来绘制置信区间
3. _ci_lb _ci_ub分别是margins结果中的置信区间下限和上限
4. _at1是模型中第一个自变量的取值,在本例中即变量x在(-1.92(0.1)1.315)范围内的取值。跑模型时想要计算边际效应的自变量位于第*个,画图时使用对应的_at*即可。