【更新于2019.04.27】
本文已有更新版,请朋友们移步到:https://www.jianshu.com/p/bad7471ab73b
------------------------下为原文-------------------------------------
〇、概念讲解
安慰剂检验来源于医学,简单地说:
前期步骤:给实验组吃药,对照组不吃药。结果实验组症状改善,这个结果来源于两种可能性。第一种:药物有疗效。第二种:病人的心理因素的作用,药物本身没有效果。
如何排除第二种可能性的干扰?
此时需要做安慰剂检验(placebo test)。就是给实验组的测试对象吃药,给对照组的测试对象吃和药一模一样的糖,看看对照组是否有疗效。若实验组有疗效而对照组无疗效,则可以用来作为支持药物有疗效的依据。
(参见:https://en.wikipedia.org/wiki/Placebo-controlled_study)
一、问题描述
数据为公司年度面板
y为因变量,x为自变量,控制变量集为cv
要验证当x的取值随机时,x对y的处理效应不存在
二、stata代码
/*-思路:产生两个观测序号,初始序号与随机序号,从数据集中拆分出变量随机
序号与x,按规则“obs_id=random_id”进行匹配,从而将变量x随机赋值到
某个obs*/
下面为1000次place test的代码:
forvalue i=1/1000{
use $dta\tp, clear //调入数据
xtset stkcd year //按公司年排好序
g obs_id= _n //初始序号
gen x= runiform() //生成随机数
sort x //按新生成的随机数排序
g random_id= _n //产生随机序号
save tt, replace //临时保存以备调用
keep random_id x //保留随机序号与自变量x
save tt1,replace //拆分出来
use tt, clear
drop random_id
rename obs_id random_id //匹配字段为obs_id,merge之前重命名
merge 1:1 random_id using tt1 //实现随机赋值
qui reg y $cv x, r //进行回归,y为因变量,x为自变量,$cv为控制变量
g _b_x= _b[x] //提取x的回归系数
g _se_x= _se[x] //提取x的标准误
keep _b_x _se_x
duplicates drop _b_x, force
save _b_x`i', replace //把系数和标准误存起来
}
use _b_x1, clear
forvalue i=2/1000{
append using _b_x`i'
} //合并1000次回归的系数及标准误
gen tvalue=coeff/serror
kdensity tvalue, xtitle("t值") ytitle("分布") ///
saving(placebo test:虚拟x变量的系数t值的分布)
//此时查看虚拟x的回归t值的分布是否以0为轴呈对称的倒U型,若是则表明虚拟x对y没有处理效应