
目的:衡量一类“事件”(如并购公告、分红、回购、政策冲击、ESG争议、突发监管)对资产价格的短期信息含量。
核心思路:用“实际收益 − 基准收益”得到异常收益(AR),在事件窗累加得到CAR,再进行统计检验。
Ri,t:标的i 在t 日的实际收益
R^i,t:基准/期望收益(由模型估计)
AR(异常收益):ARi,t=Ri,t−R^i,t
CAR(累积异常收益):CARi,[τ1,τ2]=t=τ1∑τ2ARi,t
AAR/CAAR:横向平均(对所有样本N),AAR 为平均 AR,CAAR 为平均 CAR。
定义事件与样本:公告日t=0,处理同日多事件/重复事件的去重规则。
设定窗口:
估计窗(模型拟合用):如[−120,−20]
事件窗(效应检验):如[−3,+3]、[−1,+1]、[0,+2]
选择基准模型(三选一或多模型稳健性):
均值调整:R^i,t=Rˉi(估计窗均值)
市场模型:Ri,t=αi+βiRm,t+εi,t
因子模型(FF3/5、Momentum、Quality 等)
估计R^i,t → 计算 AR、CAR
统计检验:t 检验、Patell、BMP、广义符号检验、跨截面回归等
稳健性:改事件窗、换模型、去并发事件、行业/规模分组
报告:表格与图形(AAR/CAAR 走势、直方图、桶图)
估计窗:足够长以稳健估计 (\alpha,\beta),又要避开信息泄露期(常见 ([-120,-20]) 或 ([-250,-30]))。
事件窗:根据市场反应速度与公告时点(盘中/收盘后)。常用 ([-1,+1])、([-3,+3])、([0,+2])。
信息泄露与滞后:若行业常有提前泄露或后续澄清,适当延长到 ([-5,+5]) 或 ([-10,+10])。
多事件叠加:若样本有高频公告,建议去重/排除重叠,或采用面板回归/多事件控制。
R^i,t=Rˉi,Rˉi=Test1t∈Est∑Ri,t
优点:简单、对小样本友好
缺点:忽略系统性风险与市场波动
Ri,t=αi+βiRm,t+εi,t(t∈Est)
用估计窗 OLS 得 α^i,β^i,再预测事件窗期望收益
优点:控制市场走势;最常用
注意:选择合适的市场指数(本地/行业加权)
Ri,t−Rf,t=αi+βmMKTt+βsSMBt+βhHMLt(+βrRMWt+βcCMAt)+εi,t
优点:控制更多风险维度
缺点:数据需求高;短估计窗稳定性下降
实务建议:主结果用市场模型,附录做因子模型稳健性。
单样本 t:ARˉt/(s(ARt)/);CAR 同理
假设 AR 独立同分布,但现实有异方差/相关性问题
先在估计窗标准化残差,再事件窗聚合;控制个股波动差异
在 Patell 基础上考虑事件窗波动上升(公告期方差增大)
非参数法,不依赖正态,对极端值鲁棒
CARi,[τ1,τ2]=δ0+δ1Xi+δ2Zi+ηi
用公司特征、治理、规模、ESG 等解释 CAR
标准误可按行业或事件日期聚类
稳健性
换事件窗:([-1,+1])、([-2,+2])、([-3,+3])
换基准模型:均值→市场→因子
去并发事件:排除窗口内二次公告;或在回归中加控制变量/虚拟变量
行业/规模/流动性分组;异常值 winsorize
常见坑
把事件窗数据用于估计窗 → 严重上偏
忽略停牌/涨跌停 → 实际成交收益与理论不同
thin trading(小市值/冷门股) → 用对数收益并测试流动性敏感性
幸存者偏差(仅保留仍上市个股) → 预先定义样本框架
表 1 事件样本描述:样本量、行业分布、公告时间(盘前/盘后)
表 2 基准模型估计:α^,β^、R2(估计窗)
表 3 AAR/CAAR 与检验统计:不同窗口、不同检验(t/Patell/BMP/符号)
表 4 异质性与跨截面回归:以公司特征/事件特征解释 CAR
图 1 CAAR 随时间演化:[−10,+10] 累积曲线
附录:去并发事件规则、数据清洗与对齐、极端值处理
import pandas as pd
import statsmodels.api as sm
# prices_i: 个股收盘价,mkt: 市场指数(同频),dates 对齐
df = pd.read_csv("panel_prices.csv", parse_dates=["date"])
df = df.sort_values(["tic","date"])
df["ret"] = df.groupby("tic")["price"].pct_change()
df["mkt_ret"] = df.groupby("mkt")["mkt_px"].pct_change()
# 定义窗口
event_day = pd.to_datetime("2024-05-15")
est = (df["date"]>=event_day-pd.Timedelta(days=120)) & (df["date"]<=event_day-pd.Timedelta(days=20))
evt = (df["date"]>=event_day-pd.Timedelta(days=1)) & (df["date"]<=event_day+pd.Timedelta(days=1))
# 单只股票示例
g = df[df["tic"]=="AAPL"]
X = sm.add_constant(g.loc[est, "mkt_ret"].dropna())
y = g.loc[est, "ret"].dropna()
beta = sm.OLS(y, X).fit()
# 预测事件窗期望收益
pred = beta.predict(sm.add_constant(g.loc[evt, "mkt_ret"]))
ar = g.loc[evt, "ret"].iloc[:len(pred)].values - pred.values
car = ar.sum()
print("CAR[-1,+1] =", car)

* 数据:tic date ret mkt_ret
tsset tic date, daily
preserve
keep if inrange(date, td(15may2024)-120, td(15may2024)-20)
by tic: reg ret mkt_ret
est store est1
restore
gen window = .
replace window = -1 if inrange(date, td(15may2024)-1, td(15may2024)-1)
replace window = 0 if date==td(15may2024)
replace window = 1 if inrange(date, td(15may2024)+1, td(15may2024)+1)
* 预测期望收益
statsby _b _se, by(tic): reg ret mkt_ret if inrange(date, td(15may2024)-120, td(15may2024)-20)
tempfile coef
save `coef'
merge m:1 tic using `coef'
gen pred = _b_cons + _b_mkt_ret*mkt_ret
gen ar = ret - pred if inrange(window,-1,1)
collapse (sum) CAR=ar, by(tic)

注:课程作业建议把代码、参数、窗口与数据版本信息写入附录,确保可复现。
事件日选盘前还是公告日? 以正式公告披露时点为准;盘后公告通常在次日反应。结果不显著怎么办? 尝试缩短/拉长事件窗、采用 Patell/BMP、换市场/因子模型,或做行业/规模分层。并发事件影响大? 设规则剔除,或在面板回归中加入并发事件虚拟变量。
选题—识别—数据—回归—稳健性—写作—引用 全流程梳理,产出:1 页任务单 + 方法复现路径 + 图表与排版规范清单
提交后,我们将在 24 小时内回邮(包含题目、数据源、软件栈、DDL 等)。
严格按照学校要求完成,从审阅资料到论文代写交稿严格把关,100%原创论文,TurnitinUK查重检测,E-convier向您做无抄袭担保!
论文导师24小时待命,严格审核订单时间,100%确保在约定时限前交付,专业的客服体系,保证随叫随到,保证及时修改
E-convier超过1800名英语母语professional writers,其中95%是英国本地导师,并具有Maste或者PhD以上学位
E-convier为了保护您的个人信息和论文安全,所有资料全部通过银行级SSL256数据加密,永远做到让您高枕无忧
E-convier论文代写,2008年创办,10年知名品牌!
论文定制只需三步——随时随地管理您的订单!