Stata:一文读懂事件研究法Event Study
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
连享会 · 因果推断实用计量方法
作者:刘欣妍 (香港中文大学)
邮箱:liuxinyan@link.cuhk.edu.hk
编者按:本文主要摘译自下文,特此致谢!Source:Ullah S, Zaefarian G, Ahmed R, et al. How to apply the event study methodology in STATA: An overview and a step-by-step guide for authors[J]. 2021. -Link1- -Link2-
目录
1. 事件分析法
2. 数据准备工作
3. 数据分析过程
4. 与 DID 的区别
5. 参考文献
6. 相关推文
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
1. 事件分析法
事件分析法 (Event Study Methodology, ESM) 是一种用于研究重大事件对公司层面变量短期影响的计量方法。在以往研究中,该方法主要应用于金融领域,且主要用来衡量某一特定事件对公司股票价格的影响。但是在最近的研究中,由于具有逻辑清晰,分析过程简单等优点,该方法越来越多的受到研究者的关注,也开始逐渐被应用于其他领域研究。
尤其近期,新冠疫情的发生造成了一系列影响,十分符合事件分析法的背景设定,因此许多文章采用了该方法进行了分析 (例如,Naidu 和 Ranjeeni,2021;Heyden 和 Heyden,2021)。关于事件分析法,大致可分为以下几步:
数据准备工作:定义事件、选择事件发生日期、选取样本范围、确定事件窗口、确定估计窗口; 数据分析过程:计算时间距离、定义事件和估计窗口、估计正常表现、估计异常表现、显著性检验、全部事件检验。
在下文中,我们将对事件分析法的逐步过程和 Stata 实现进行讲解。
2. 数据准备工作
第一步:定义事件
事件是指可能对感兴趣的因变量产生影响的相关政策或措施。在金融领域,事件通常集中于公司的兼并收购行为等,在市场营销领域,事件通常为新产品的推出、不良宣传、或召回等。近期比较受到学者关注的事件为自贸区成立和新冠疫情的爆发等。
第二步:选择事件发生日期
在确定了研究事件后,下一步就是确定事件发生日期,同时这一步也是 ESM 方法的基础。在该步中,最常见问题是一个事件的发生会有多个日期,比如当一个产品即将推出时,公司可能会提前通过一些途径让消费者得知该信息,之后又通过一些官方途径正式公布该产品。信息的提前泄露会让研究者难以判断消费者是何时得知产品信息的,这也为我们的研究带来了困难。在这种情况下,通常的建议是研究者可采用产品第一次进入市场的日期作为事件发生的日期 (Fama 等 1969;McWilliams 和 Siegel,1997;Sorescu 等,2017)。
第三步:选取样本范围
在选择样本时,需要秉持两个原则:一是样本的时间范围需要覆盖整个事件窗口 (事件窗口的定义将在下一步具体讲述);二是样本所覆盖的时间范围需要保证没有其他事件的干扰。在这一步中,需要特别注意的是第二个原则,即为了识别更加干净,需要保证这段时间内有且仅有我们感兴趣的事件发生。这个原则就对数据提出了极高的要求,并且在大多数情况下都会有样本量不足的问题。一个可能的解决办法是可以采用频率更高的数据,如日度数据。
第四步:确定事件窗口 (event window)
事件窗口通常会选择事件发生日期前后的几天、几周、或几月。在这一步,一个重要的原则是事件窗口覆盖的时间也应该尽可能的缩短,来排除同时期其他事件的干扰。至此,我们可以将事件发生的时间记作 day 0,事件发生前的 90 天记作 -90 days, 事件发生后的 90 天记作 +90 days,那么该分析的事件窗口即为 [-90 days, 90 days]。
第五步:确定估计窗口 (estimation window)
除了事件窗口外,我们还需要确定估计窗口。为了说明事件窗口与估计窗口的区别,我们先来回顾一下事件分析法的整体思路。事件分析法衡量一个事件产生影响的思路是:在一定时间范围内,计算这段时间里出现的日异常收益率 (该期实际收益率减去预期收益率、或正常收益率) 以及其累计值。其中,预期收益率的计算分以下两步:一是利用估计窗口期的相关数据和选定的收益率模型估计相应的参数;二是根据估计参数和事件窗口的数据来计算事件窗口期的预期收益率。一般情况下,估计窗口为事件发生前一段时间,并且估计窗口与事件窗口不可有交集。
3. 数据分析过程
接下来,我们通过 Stata 实操来详细讲解数据分析过程,其中数据来源普林斯顿大学。
*数据准备工作
cap mkdir "D:\lxh"
cap cd "D:\lxh"
*将数据下载到 lxh 文件夹
*https://gitee.com/arlionn/data/raw/master/data01/eventdates.dta
*https://gitee.com/arlionn/data/raw/master/data01/stockdata.dta
use eventdates, clear
sort company_id
by company_id: gen eventcount=_N
by company_id: keep if _n==1
keep company_id eventcount
save eventcount.dta, replace
use stockdata.dta, clear
sort company_id
merge company_id using eventcount
tab _merge
keep if _merge==3
drop _merge
expand eventcount
drop eventcount
sort company_id date
by company_id date: gen set=_n
sort company_id set
save stockdata2.dta, replace
use eventdates, clear
sort company_id
by company_id: gen set=_n
sort company_id set
save eventdates2.dta, replace
use stockdata2, clear
merge company_id set using eventdates2
tab _merge
list company_id if _merge==2
keep if _merge==3
drop _merge
egen group_id = group(company_id set)
第六步:计算距离事件发生的天数
*首先对面板数据按照id和日期进行排序
sort company_id date
/*产生一个新变量datenum,
在每个id内部对日期进行编号(比如1Jan2020是1,2Jan2020是2,3Jan2020是3)
这一步有利于接下来进行事件窗口的定义*/
by company_id: gen datenum = _n
/*产生一个新变量target,代表了事件发生的日期,
因为在上一步我们已经进行了编号,因此这一步中,
如果事件发生的日期是2Jan2020,那么target产生的值就会是2*/
by company_id: gen target=datenum if date==event_date
*产生一个新变量td,填充了每个id内事件发生的日期编号
egen td=min(target), by(company_id)
/*最终dif变量代表了距离事件发生的天数,0代表事件发生当天,
负值代表事件发生前,正值代表事件发生后*/
gen dif=datenum-td
第七步:定义事件和估计窗口
*我们选择事件发生的前两天和后两天作为事件发生的窗口
by company_id: gen event_window=1 if dif>=-2 & dif<=2
*计算每个id内部属于事件窗口内的个数
egen count_event_obs=count(event_window), by(company_id)
*选择估计窗口样本,原则是选择事件发生前且不与事件窗口重合的样本
by company_id: gen estimation_window=1 if dif<-30 & dif>=-60
*同理,计算每个id内部属于估计窗口的个数
egen count_est_obs=count(estimation_window), by(company_id)
*以下两步将事件窗口和估计窗口的缺失值替换成0值
replace event_window=0 if event_window==.
replace estimation_window=0 if estimation_window==.
/*这里我们需要在做回归之前,
将不满足我们所定义的事件窗口长度(5天)的样本去掉*/
drop if count_event_obs < 5
*同理,我们也需要将不符合估计窗口长度(30天)的样本去掉
drop if count_est_obs < 30
第八步:估计正常表现
*创建一个新的变量储存我们估计的正常表现值
gen predicted_return=.
*为每个公司创建一个新的变量
egen id=group(company_id)
/*在这一步,我们利用估计窗口,循环估计每个id正常表现值,
该正常变现值是通过回归在估计窗口内的Y与X得到,
并将其进一步在事件窗口中进行预测*/
local N = 354 //这里的N代表上一步创建的id的最大值
forvalues i=1(1)`N'{
l id company_id if id==`i' & dif==0
*得到估计窗口中的正常回报率
reg ret market_ret if id==`i' & estimation_window==1
*估计在事件窗口内计算正常回报率
predict p if id==`i'
replace predicted_return = p if id==`i' & event_window==1
drop p
}
第九步:估计异常表现
sort id date
*异常收益率是实际收益率与不发生事件的估计收益率的差值
gen abnormal_return=ret-predicted_return if event_window==1
*另一个指标是累计异常收益率
by id: egen cumulative_abnormal_return = total(abnormal_return)
第十步:显著性检验
在这一步里,我们需要通过 检验来判断异常收益率是否显著异于 0。该检验的公式如下:
其中, 代表异常收益率, 代表异常收益率的标准差。如果得到的值大于 1.96,那么我们可以在 5% 的显著性水平上拒绝原假设,即平均异常收益率显著异于 0。
sort id date
*计算公式中所需要的AR_SD
by id: egen ar_sd = sd(abnormal_return)
local event_window_days = 5
gen test =(1/sqrt(`event_window_days'))*(cumulative_abnormal_return/ar_sd)
第十一步:全部事件的稳健性检验
在最后,除了看每个公司内部的异常收益率,我们还可以进行一个全样本的稳健性检验。同样我们希望 值小于 0.05,这样就可以在 5% 的显著性水平上拒绝异常收益率 =0 的原假设。
. reg cumulative_abnormal_return if dif==0, robust
Linear regression Number of obs = 354
F(0, 353) = 0.00
Prob > F = .
R-squared = 0.0000
Root MSE = .08025
------------------------------------------------------------------------------
| Robust
cumulative~n | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
_cons | 0.033 0.004 7.69 0.000 0.024 0.041
------------------------------------------------------------------------------
4. 与 DID 的区别
可以发现,事件分析法和双重差分法都可以用来估计某一事件的发生造成的影响,那么两者有什么区别呢?事件分析法 (ESM) 和双重差分 (DID) 的区别主要在两个方面:
ESM 是一重差分 (事件前和事件后),DID 是双重差分 (i.事件前后差分;ii. 处理组和控制组之间的差分); 更加实用的判别方法是,如果研究中既有处理组又有对照组,那么 DID 是合适的研究设计;如果只有处理组,并且处理组的数据是时间序列数据,那么 ESM 则是合适的研究方法。
5. 参考文献
Naidu D, Ranjeeni K. Effect of coronavirus fear on the performance of Australian stock returns: Evidence from an event study[J]. Pacific-Basin Finance Journal, 2021(3):101520. -Link- Heyden K J, Heyden T. Market reactions to the arrival and containment of COVID-19: an event study[J]. Finance research letters, 2021, 38: 101745. -PDF-
6. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh 事件, m
安装最新版lianxh
命令:
ssc install lianxh, replace
专题:专题课程 ⏩ 直播课:事件史-生存分析专题 专题:Stata教程 事件研究法笔记:Stata连享会 专题:Stata绘图 Stata:用-mapch-命令绘制“事件链” 专题:回归分析 Stata:短期事件研究法(Event_Study)教程
课程推荐:因果推断实用计量方法
主讲老师:丘嘉平教授
🍓 课程主页:https://gitee.com/lianxh/YGqjp
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。