Stata:一文读懂事件研究法Event Study

发布时间:2021-07-10 阅读 2084

Stata连享会   主页 || 视频 || 推文 || 知乎

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装命令如下:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:刘欣妍 (香港中文大学)
邮箱: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. 事件分析法

事件分析法 (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)

除了事件窗口外,我们还需要确定估计窗口。为了说明事件窗口与估计窗口的区别,我们先来回顾一下事件分析法的整体思路。事件分析法衡量一个事件产生影响的思路是:在一定时间范围内,计算这段时间里出现的日异常收益率 (该期实际收益率减去预期收益率、或正常收益率) 以及其累计值。其中,预期收益率的计算分以下两步:一是利用估计窗口期的相关数据和选定的收益率模型估计相应的参数;二是根据估计参数和事件窗口的数据来计算事件窗口期的预期收益率。一般情况下,估计窗口为事件发生前一段时间,并且估计窗口与事件窗口不可有交集。

图 1:事件分析法包含的所有概念的时间线
图 1:事件分析法包含的所有概念的时间线

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)

第十步:显著性检验

在这一步里,我们需要通过 t 检验来判断异常收益率是否显著异于 0。该检验的公式如下:

其中,AR 代表异常收益率,ARSD 代表异常收益率的标准差。如果得到的值大于 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) 

第十一步:全部事件的稳健性检验

在最后,除了看每个公司内部的异常收益率,我们还可以进行一个全样本的稳健性检验。同样我们希望 p 值小于 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
------------------------------------------------------------------------------
图 2:事件分析法全部过程的概况
图 2:事件分析法全部过程的概况

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

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh