此后我们需要使用不同的变量来衡量原本的x和y检验结果的稳健性。具体的代码为:
global x_robust l_index_all l_index_01 l_index_02 l_index_03 // x的可替代变量
local vars $x_robust // 定义循环变量 x_robust
foreach x of local vars{ // 进行循环
reg $Y `x' $X_CON , r // 循环的时候替换x
}运行完此段程序过后,即可得到使用x_robust中所有变量(此处共四个)进行回归的结果(因此此处会得到四个回归结果),并按照正常基础回归结果的地方分析结果即可。需要注意的是由于此处涉及循环,因此需复制到do文件中运行,不能直接在命令窗口粘贴。
此外,为使得结果更加具有可读性,同时便于写文章的时候进行编辑,我们通常需要对所得结果进行再整理或者导出到文档,具体的代码为:
global x_robust l_index_all l_index_01 l_index_02 l_index_03
cap erase "xrobust.txt" // 删除原有的txt文件 -- 暂时可以不管
local vars $x_robust
foreach x of local vars{ // 进行循环
qui reg $Y `x' $X_CON , r
qui outreg2 using "xrobust.xls", append bdec(3) tdec(2) ctitle(`y') // 导出到excel
est store xrobust_`x' // 记录结果
}
同理,运行下边这段代码,我们可以得到y的稳健性回归结果。
global y_robust H_1 H_2 H_3 H_4 // 稳健性检验 - y
cap erase "yrobust.txt"
local vars $y_robust
foreach y of local vars{
qui reg `y' $X $X_CON , r
qui outreg2 using "yrobust.xls", append bdec(3) tdec(2) ctitle(`y')
est store yrobust_`y'
}
所谓的异质性分析,其实就是,对不同的分类群体进行分组回归,并且对比分组回归的结果。在开始分组回归之前,我们首先需要对样本进行分组。常见的分组方式有包括,根据收入、性别、年龄(个体);或是东中西、南北、是否沿海、是否直辖、是否少数民族(地区)等,而分类的方式则可以参照我的另一篇笔记。
sort w_fsave // 按照受教育水平排序(升序)
gen group_fsave = group(4) // 按照储蓄水平四等分运行此代码,可以将样本按照储蓄水平进行四等分,并生成group_fsave变量,其中group_fsave取值越低表明个体储蓄越少。
和稳健性检验类似,我们这里使用循环加条件语句的方式进行份样本的回归,并将所得的回归结果进行储存和导出操作。
cap erase "groupsave.txt"
forvalues i = 1/4{
qui reg $Y $X $X_CON if group_fsave == `i', r // if 后为对满足条件的样本进行回归
qui outreg2 using "groupsave.xls", append bdec(3) tdec(2) ctitle(`y')
est store groupsave_`i'
}
最后,附上完整的do文件代码,需要样例数据可私戳。
use "robust_example.dta", clear // 数据导入
global Y H_1 // 被解释变量
global X l_index_all // 解释变量
global X_CON age married size w_fincome w_fsave // 控制变量集
* --- 基础回归
reg $Y $X $X_CON
* --- 稳健性检验
global x_robust l_index_all l_index_01 l_index_02 l_index_03 // x的可替代变量
cap erase "xrobust.txt" // 删除原有的txt文件 -- 暂时可以不管
local vars $x_robust // 定义循环变量 x_robust
foreach x of local vars{ // 进行循环
qui reg $Y `x' $X_CON , r // 循环的时候替换x
qui outreg2 using "xrobust.xls", append bdec(3) tdec(2) ctitle(`y') // 导出到excel
est store xrobust_`x' // 记录结果
}
cap erase "yrobust.txt"
local vars $y_robust
foreach y of local vars{
qui reg `y' $X $X_CON , r
qui outreg2 using "yrobust.xls", append bdec(3) tdec(2) ctitle(`y')
est store yrobust_`y'
}
sort w_fsave // 按照受教育水平排序(升序)
gen group_fsave = group(4) // 将受教育水平四等分
cap erase "groupsave.txt"
forvalues i = 1/4{
qui reg $Y $X $X_CON if group_fsave == `i', r
qui outreg2 using "groupsave.xls", append bdec(3) tdec(2) ctitle(`y')
est store groupsave_`i'
}