无偏性检验原理
Stata回归的系数值只是某个样本的观测值,不一定是真值(事实上恰好等于真值的概率极小),但较大概率会落在真值的附近,且分布有一定规律。
对于回归系数结果的无偏性,我们可以通过在整体中反复抽样进行检验,观测结果分布。
检验思路
在Excel中随机生成一列x(自变量),一列u(干扰项),然后令y=1.6x+u,这样生成x,y两列相关性很高但并非完全线性的数据,其中u刻画了其他因素的冲击。
Stata代码
此检验需要做多次循环,而恰好Stata写循环又比较鬼畜,下面给出完整代码:
//随机指定treat变量
forvalue i=1/200{ //循环200次
clear
import excel "C:\Users\Desktop\计量助教\有效性检验\有效性检验.xlsx", firstrow //调入数据,换path
gen random_digit1=ceil(runiform(1,1000)) //生成1到1000随机数(可能重复)
g new_treat=0
sort random_digit1 //根据随机数random_digit1排序
gen s=_n
replace new_treat=1 if s<51 //样本容量50 /*(51-1)*/
//合并,回归,提取系数//
//g x = post*new_treat
reg y x if new_treat==1 //筛选lable为1的样本部分
g _b_new_treat = _b[x] //提取x的回归系数
g _se_new_treat = _se[x] //提取x的标准误
g _t_new_treat=_b_new_treat/_se_new_treat //计算得到p值
g _p_new_treat = 2*ttail(e(df_r), abs(_t_new_treat)) //计算得出pvalue
keep _b_new_treat _se_new_treat _t_new_treat _p_new_treat
duplicates drop _b_new_treat, force
save placebo`i', replace //把第i次placebo检验的系数和标准误存起来
}
//纵向合并200次的系数和标准误
use placebo1, clear
forvalue i=2/200{
append using placebo`i' //纵向合并200次回归的系数及标准误
}
//t值,p值作图
gen p值=_p_new_treat
gen 估计系数=_b_new_treat
twoway scatter p值 估计系数 , color(*.5)|| kdensity 估计系数 ,tline(1.6 , lp(dash) lc(black) ) tlabel(1.6 , add labsize(*.75)) //1.6是基准回归中的系数真值
* 删除临时文件 *
forvalue i=1/200{
erase placebo`i'.dta
}
* 保存结果 *
save result2.dta,replace
代码注释已经较为详细,只要把数据路径换掉就可以跑。
结果
选取1000个观测值,第一次跑200遍,每次随机抽取50个观测值:
下面还有每次抽取400个,跑50次循环结果:
可以明显看出,样本容量较大时更容易发现真值,或者说从分布结果来看距离真值更近。
阅读量:2009
点赞量:0
收藏量:0