緣起
- 之前寫了一個stata如何做placebo test的文章,本來只是寫給自己看,記錄自己的學(xué)習(xí)過程怒见,沒想到瀏覽上千俗慈,也是有點(diǎn)意外加激動。
- 有些朋友說根據(jù)我寫的代碼遣耍,改到自己的項(xiàng)目里闺阱,跑不出來結(jié)果,正好今天有學(xué)弟問我這個問題舵变,于是我把代碼重寫了一次酣溃,這次用stata官方給的auto數(shù)據(jù)寫的,應(yīng)該沒有bug了纪隙,有問題歡迎留言評論赊豌。
- 上次的文章鏈接:
http://www.reibang.com/p/ef4f920494d
(該文粗略講了安慰劑的原理,并提供一版自明性相對差點(diǎn)的stata代碼绵咱,本文在這篇文章的基礎(chǔ)上碘饼,修改了stata代碼。)
實(shí)現(xiàn)
假設(shè)我的數(shù)據(jù)集是auto.dta
因變量為price
自變量為rep78
控制變量為headroom weight length
回歸模型為OLS麸拄,即主回歸代碼為reg rep78 headroom weight length
下面是1000次placebo test的代碼
forvalue i=1/1000{
sysuse auto, clear //調(diào)入數(shù)據(jù)
*- 思路:打亂rep78,即將rep78的全部取值拿出暫存派昧,然后隨機(jī)賦給每一個樣本
*- 打亂rep78,即將rep78的全部取值拿出暫存
g obs_id= _n //初始樣本序號
gen random_digit= runiform() //生成隨機(jī)數(shù)
sort random_digit //按新生成的隨機(jī)數(shù)排序
g random_id= _n //產(chǎn)生隨機(jī)序號
preserve
keep random_id rep78 //保留虛擬的rep78
rename rep78 random_rep78
rename random_id id //重命名為id,以備與其他變量合并(merge)
label var id 原數(shù)據(jù)與虛擬處理變量的唯一匹配碼
save random_rep78, replace
restore
drop random_digit random_id rep78 //刪除原來的rep78
rename obs_id id //重命名為id拢切,以備與random_rep78合并(merge)
label var id 原數(shù)據(jù)與虛擬處理變量的唯一匹配碼
save rawdata, replace
*- 合并,回歸秆吵,提取系數(shù)
use rawdata, clear
merge 1:1 id using random_rep78,nogen
reg price random_rep78 headroom weight length
g _b_random_rep78= _b[random_rep78] //提取x的回歸系數(shù)
g _se_random_rep78= _se[random_rep78] //提取x的標(biāo)準(zhǔn)誤
keep _b_random_rep78 _se_random_rep78
duplicates drop _b_random_rep78, force
save placebo`i', replace //把第i次placebo檢驗(yàn)的系數(shù)和標(biāo)準(zhǔn)誤存起來
}
*- 縱向合并1000次的系數(shù)和標(biāo)準(zhǔn)誤
use placebo1, clear
forvalue i=2/1000{
append using placebo`i' //縱向合并1000次回歸的系數(shù)及標(biāo)準(zhǔn)誤
}
gen tvalue= _b_random_rep78/ _se_random_rep78
kdensity tvalue, xtitle("t值") ytitle("分布") saving(placebo_test)
*-刪除臨時(shí)文件
forvalue i=1/1000{
erase placebo`i'.dta
}
*-mark:后續(xù)有時(shí)間再將它封裝成程序【完】
文獻(xiàn)范例
- 周茂淮椰、陸 毅、杜 艷纳寂、 姚 星主穗,2018:《開發(fā)區(qū)設(shè)立于地區(qū)制造業(yè)升級》,《中國工業(yè)經(jīng)濟(jì)》第3期毙芜。
image.png