爱吃大米饭123
发布于

进阶版 Stata 代码模板:从因果推断到结果导出,实证论文拔高必备

进阶版 Stata 代码模板:从因果推断到结果导出,实证论文拔高必备

导读:掌握了基础数据处理和 OLS 回归,想让实证分析更有说服力?这篇进阶推文涵盖 13 类高级计量模型 + 稳健性检验 + 结果导出全流程,包括 DID、PSM、GMM、空间计量等热门方法,帮你轻松解决因果识别难题,让论文结果更规范、更具可信度!

一、离散选择与受限因变量模型:应对特殊被解释变量

被解释变量是二元选择(0/1)、有序分类或截断数据?这两类模型能精准适配,还能直接输出边际效应,方便解读经济意义。

*----- (一)离散选择模型 -----*
* 1. Logit回归(二元选择变量)
logit Y X1 X2 X3
* 2. Probit回归
probit Y X1 X2 X3
* 3. 边际效应(直观展示变量影响程度)
margins, dydx(*)
* 4. 有序Logit(有序分类被解释变量)
ologit Y X1 X2 X3
* 5. 多项Logit(多分类被解释变量,设定基准组)
mlogit Y X1 X2 X3, base(0)

*----- (二)受限因变量模型 -----*
* 1. Tobit模型(被解释变量有上下限)
tobit Y X1 X2 X3, ll(0) ul(100)  // ll=下限,ul=上限
* 2. Heckman两阶段(解决样本自选择问题)
heckman Y X1 X2 X3, select(Z1 Z2 Z3) twostep  // Z为选择方程工具变量

二、面板数据高级模型:充分利用面板数据优势

面板数据能控制个体异质性,这里的固定效应、随机效应模型,以及豪斯曼检验,帮你精准选择合适的估计方法,还有面板 Logit、Tobit 适配特殊数据类型。

*----- 1. 混合OLS(基准模型)-----*
reg Y X1 X2 X3

*----- 2. 固定效应模型(控制个体固定效应)-----*
xtreg Y X1 X2 X3, fe

*----- 3. 随机效应模型 -----*
xtreg Y X1 X2 X3, re

*----- 4. 双向固定效应(控制个体+时间效应)-----*
xtreg Y X1 X2 X3 i.year, fe

*----- 5. 豪斯曼检验(选择固定/随机效应)-----*
xtreg Y X1 X2 X3, fe
estimates store fe
xtreg Y X1 X2 X3, re
estimates store re
hausman fe re

*----- 6. 面板Logit(面板数据+二元被解释变量)-----*
xtlogit Y X1 X2 X3, fe

*----- 7. 面板Tobit(面板数据+受限被解释变量)-----*
xttobit Y X1 X2 X3, ll(0)

三、因果推断核心方法:解决内生性与识别问题

实证分析的关键是因果识别!这部分涵盖工具变量、DID、PSM、RDD 等主流方法,帮你有效解决内生性、自选择等问题,让因果关系更可信。

(一)工具变量法(IV):解决内生解释变量问题

*----- 1. 2SLS回归(核心估计)-----*
ivregress 2sls Y X2 X3 (X1 = Z1 Z2), first  // X1为内生变量,Z1/Z2为工具变量

*----- 2. 弱工具变量检验(工具变量有效性)-----*
estat firststage

*----- 3. 过度识别检验(工具变量外生性)-----*
estat overid

*----- 4. 内生性检验(判断是否需要IV)-----*
estat endogenous

(二)动态面板 GMM:处理滞后效应与内生性

*----- 1. 差分GMM -----*
xtabond Y L.Y X1 X2 X3, lags(1) twostep

*----- 2. 系统GMM(更高效,适用于短面板)-----*
xtabond2 Y L.Y X1 X2 X3, gmm(L.Y, lag(2 4)) ///
    iv(X2 X3) robust twostep  // 滞后项为GMM工具变量,X2/X3为外生IV

*----- 3. AR检验(序列相关检验)-----*
// 结果中自动显示AR(1)和AR(2),AR(1)显著、AR(2)不显著为佳

*----- 4. Sargan/Hansen检验(工具变量有效性)-----*
// 结果中自动显示,不拒绝原假设为佳

(三)双重差分法(DID):政策效应评估利器

*----- 1. 传统DID(2×2面板,政策前后+处理/控制组)-----*
reg Y treat##post X1 X2 i.year, cluster(id)  // treat=处理组标识,post=政策后标识

*----- 2. 多期DID(政策分批次实施)-----*
xtreg Y treat X1 X2 i.year, fe cluster(id)

*----- 3. 平行趋势检验(DID核心假设)-----*
reg Y treat##ib2015.year X1 X2, cluster(id)  // ib2015设定2015年为基准年
coefplot, keep(*.year#1.treat) vertical yline(0)  // 可视化趋势

*----- 4. 事件研究法(精准捕捉政策动态效应)-----*
gen rel_time = year - treat_year  // 相对时间变量
reg Y ib(-1).rel_time X1 X2 i.year i.id, cluster(id)  // ib(-1)设定政策前1期为基准

*----- 5. 安慰剂检验(排除其他混淆因素)-----*
set seed 12345  // 设定随机种子,结果可重复
gen random_treat = runiform() < 0.5  // 随机生成处理组
reg Y random_treat##post X1 X2, cluster(id)

(四)倾向得分匹配(PSM):解决自选择问题

*----- 1. 估计倾向得分 -----*
pscore treat X1 X2 X3, pscore(pscore_var)  // treat=处理组标识,X为协变量

*----- 2. 平衡性检验(匹配后协变量无系统性差异)-----*
pstest X1 X2 X3, treated(treat)

*----- 3. 近邻匹配(最常用匹配方法)-----*
psmatch2 treat, outcome(Y) pscore(pscore_var) neighbor(1) common  // neighbor(1)=1:1匹配

*----- 4. 核匹配 -----*
psmatch2 treat, outcome(Y) pscore(pscore_var) kernel common

*----- 5. PSM-DID(结合PSM和DID,双重保障)-----*
psmatch2 treat, outcome(Y) pscore(pscore_var) common  // 先匹配
// 在匹配后的样本上运行DID

(五)断点回归(RDD):利用断点天然实验

*----- 1. 精确RDD(断点处完全分离)-----*
rdrobust Y running_var, c(cutoff)  // running_var=驱动变量,cutoff=断点值

*----- 2. 最优带宽选择 -----*
rdbwselect Y running_var, c(cutoff)

*----- 3. McCrary检验(断点处样本密度是否连续)-----*
DCdensity running_var, breakpoint(cutoff) generate(Xj fhat)

*----- 4. 平衡性检验(断点两侧协变量无差异)-----*
rdrobust X1 running_var, c(cutoff)
rdrobust X2 running_var, c(cutoff)

四、其他高级模型:应对特殊研究场景

(一)门槛回归:检验变量的非线性效应

*----- 1. 单门槛模型 -----*
xthreg Y X1 X2, rx(threshold_var) qx(X1) thnum(1) grid(400) bs(300)
// rx=门槛变量,qx=核心解释变量,thnum=门槛数量,bs=bootstrap次数

*----- 2. 双门槛模型 -----*
xthreg Y X1 X2, rx(threshold_var) qx(X1) thnum(2) grid(400) bs(300)

*----- 3. 门槛效应检验 -----*
// Bootstrap结果中自动显示,判断是否存在门槛

(二)空间计量模型:处理空间相关性

*----- 1. 创建空间权重矩阵 -----*
spmat import W using "weight_matrix.txt", replace  // 导入外部权重矩阵

*----- 2. Moran's I检验(空间相关性检验)-----*
spatgsa Y, weights(W) moran

*----- 3. 空间滞后模型(SAR)-----*
spregress Y X1 X2 X3, ml dvarlag(W)

*----- 4. 空间误差模型(SEM)-----*
spregress Y X1 X2 X3, ml errorlag(W)

*----- 5. 空间杜宾模型(SDM,包含滞后解释变量)-----*
spregress Y X1 X2 X3, ml dvarlag(W) ivarlag(W: X1 X2 X3)

*----- 6. 空间效应分解(直接效应、间接效应)-----*
estat impact

(三)时间序列模型:分析时间维度数据

*----- 1. ADF单位根检验(平稳性检验)-----*
dfuller Y, lags(2)

*----- 2. EG协整检验(两变量协整)-----*
reg Y X
predict e, residual  // 提取残差
dfuller e  // 残差平稳则存在协整关系

*----- 3. ARIMA模型(时间序列预测与分析)-----*
arima Y, arima(1,1,1)  // (p,d,q)分别为自回归、差分、移动平均阶数

*----- 4. VAR模型(多变量时间序列)-----*
var Y X, lags(1/2)  // 滞后1-2期

*----- 5. 格兰杰因果检验 -----*
var Y X, lags(1/2)
vargranger

五、调节效应与中介效应:深入分析作用机制

*----- (一)调节效应 -----*
// 1. 交互项回归(连续变量×连续变量)
reg Y c.X1##c.M X2 X3  // c.表示连续变量

// 2. 分组回归(调节变量为分类变量)
reg Y X1 X2 X3 if M == 0
estimates store low
reg Y X1 X2 X3 if M == 1
estimates store high
suest low high
test [low_mean]X1 = [high_mean]X1  // 检验两组系数差异

// 3. 简单斜率检验(可视化调节效应)
margins, dydx(X1) at(M=(1 5 10))
marginsplot

*----- (二)中介效应 -----*
// 1. 逐步回归法(经典方法)
reg Y X control_vars  // 第一步:总效应
reg M X control_vars  // 第二步:X对中介变量M的影响
reg Y X M control_vars  // 第三步:放入X和M,看间接效应

// 2. Sobel检验
sgmediation Y, mv(M) iv(X) cv(control_vars)

// 3. Bootstrap中介效应(更稳健)
bootstrap, reps(1000): sgmediation Y, mv(M) iv(X)

六、稳健性检验:让结果更可靠

稳健性检验是实证论文的 "加分项",这里整理了 7 种常用方法,从替换变量、改变样本到更换估计方法,全方位验证结果的可靠性。

*----- 1. 替换核心解释变量 -----*
reg Y X1_alternative X2 X3 i.year i.id, cluster(id)

*----- 2. 替换被解释变量 -----*
reg Y_alternative X1 X2 X3 i.year i.id, cluster(id)

*----- 3. 改变样本范围 -----*
reg Y X1 X2 X3 if year >= 2010 & year <= 2020

*----- 4. 剔除特殊样本(如直辖市、异常观测值)-----*
reg Y X1 X2 X3 if province != "Beijing"

*----- 5. 调整缩尾比例(如5%水平)-----*
winsor2 X1, replace cuts(5 95)
reg Y X1 X2 X3

*----- 6. 更换估计方法 -----*
xtreg Y X1 X2 X3, fe  // 原方法:固定效应
xtgls Y X1 X2 X3, panels(h)  // 稳健性方法:可行广义最小二乘

*----- 7. 分样本回归(按企业规模、地区等分组)-----*
reg Y X1 X2 X3 if large_firm == 1
reg Y X1 X2 X3 if large_firm == 0

七、结果导出:规范呈现论文表格与图表

分析做完,怎么把结果整理成规范的论文格式?这部分代码能一键导出描述性统计表、相关系数矩阵、回归结果(Word/LaTeX 格式),还有系数图,直接对接论文写作!

*----- 先安装必要命令(若未安装)-----*
ssc install estout
ssc install outreg2

*----- 1. 导出描述性统计表 -----*
estpost sum Y X1 X2 X3
esttab using "desc_stats.rtf", cells("mean sd min max") replace

*----- 2. 导出相关系数矩阵 -----*
estpost correlate Y X1 X2 X3, matrix
esttab using "corr_matrix.rtf", unstack not noobs compress replace

*----- 3. 导出回归结果(多模型对比,Word格式)-----*
reg Y X1 X2 X3
estimates store m1  // 模型1:基准OLS
reg Y X1 X2 X3 i.year
estimates store m2  // 模型2:加入年份固定效应
xtreg Y X1 X2 X3, fe
estimates store m3  // 模型3:固定效应

esttab m1 m2 m3 using "results.rtf", ///
    b(3) se(3) r2 ar2 scalar(N) ///  保留3位小数,显示R²、调整R²、样本量
    star(* 0.1 ** 0.05 *** 0.01) ///  显著性标注
    mtitles("OLS" "Year FE" "Firm FE") replace  // 模型名称

*----- 4. 导出LaTeX格式结果(适配论文排版)-----*
esttab m1 m2 m3 using "results.tex", ///
    b(3) se(3) r2 ar2 scalar(N) ///
    star(* 0.1 ** 0.05 *** 0.01) ///
    mtitles("OLS" "Year FE" "Firm FE") replace

*----- 5. 导出系数图 -----*
coefplot m1 m2 m3, drop(_cons) xline(0)
graph export "coefplot.png", replace width(2000)

*----- 6. 使用outreg2导出(支持追加模型)-----*
reg Y X1 X2 X3
outreg2 using "results.doc", replace ctitle("Model 1") ///
    addtext(Year FE, NO, Firm FE, NO)
    
xtreg Y X1 X2 X3, fe
outreg2 using "results.doc", append ctitle("Model 2") ///
    addtext(Year FE, NO, Firm FE, YES)

八、循环与批量处理:提升分析效率

需要对多个变量、多个年份批量回归?循环命令能帮你自动完成重复操作,节省大量时间!

*----- 1. foreach循环(对变量列表循环)-----*
foreach var in X1 X2 X3 {
    reg Y `var'
    estimates store model_`var'  // 存储每个模型结果
}

*----- 2. forvalues循环(对数值范围循环,如年份)-----*
forvalues i = 2010/2020 {
    reg Y X1 X2 X3 if year == `i'
    estimates store year_`i'
}

*----- 3. 批量回归(对多个解释变量分别回归)-----*
foreach var of varlist X1 X2 X3 X4 X5 {
    reg Y `var' controls  // controls为控制变量
}

*----- 4. 批量导出(对多个被解释变量分别导出结果)-----*
foreach outcome in Y1 Y2 Y3 {
    reg `outcome' X1 X2 X3
    outreg2 using "results_`outcome'.doc", replace
}


浏览 (54)
点赞
收藏
删除
评论