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

文摘   教育   2024-11-08 10:02   中国  

👇 连享会 · 推文导航 | www.lianxh.cn

🍓 课程推荐:2024 机器学习与因果推断专题
主讲老师:司继春 (上海对外经贸大学) ;张宏亮(浙江大学)
课程时间:2024 年 11 月 9-10 日 ;16-17日
课程咨询:王老师 18903405450(微信)

 课程特色 · 2024机器学习与因果推断

  • 懂原理、会应用。本次课程邀请了两位老师合作讲授,目的在于最大限度地实现理论与应用的有机结合。为期四天的课程,分成两个部分:第一部分讲解常用的机器学习算法和适用条件,以及文本分析和大语言模型;第二部分通过精讲 4-6 篇发表于 Top 期刊的论文,帮助大家理解各类机器学习算法的应用场景,以及它们与传统因果推断方法的巧妙结合。
  • 以 Top 期刊论文为范例。目前多数人的困惑是不清楚如何将传统因果推断方法与机器学习结合起来。事实上,即便是 MIT 和 Harvard 的大牛们也都在「摸着石头过河」。为此,通过论文精讲和复现来学习这部分内容或许是目前最有效的方式了。张宏亮老师此前在浙江大学按照这一模式教授了「因果推断和机器学习」课程,效果甚佳:学生们能够逐渐建立起研究设计的理念,并在构造识别策略时适当地嵌入机器学习方法。

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

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

图 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)

第十步:显著性检验

在这一步里,我们需要通过 检验来判断异常收益率是否显著异于 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
------------------------------------------------------------------------------
图 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

  • 专题:Stata教程
    • 事件研究法笔记:Stata连享会
  • 专题:Stata绘图
    • Stata:用-mapch-命令绘制“事件链”
  • 专题:回归分析
    • Stata:短期事件研究法(Event_Study)教程



🍓 课程推荐:2024 机器学习与因果推断专题
主讲老师:司继春 (上海对外经贸大学) ;张宏亮(浙江大学)
课程时间:2024 年 11 月 9-10 日 ;16-17日
课程咨询:王老师 18903405450(微信)

尊敬的老师 / 亲爱的同学们:

连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。 请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。 我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!

New! Stata 搜索神器:lianxh 和 songbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
  . ssc install lianxh
  . ssc install songbl
👉  使用:
  . lianxh DID 倍分法
  . songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


连享会
连玉君老师团队分享,主页:lianxh.cn。白话计量,代码实操;学术路上,与君同行。
 最新文章