緣起
- 之前寫了一個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)
*-刪除臨時文件
forvalue i=1/1000{
erase placebo`i'.dta
}
*-mark:后續(xù)有時間再將它封裝成程序【完】
文獻(xiàn)范例
- 周茂蛮瞄、陸 毅、杜 艷谆扎、 姚 星挂捅,2018:《開發(fā)區(qū)設(shè)立于地區(qū)制造業(yè)升級》,《中國工業(yè)經(jīng)濟(jì)》第3期堂湖。
image.png