楼主: chenxi0160
24259 24

(求助)如何用统计软件计算CAR?(事件研究法) [推广有奖]

21
zclyyy 发表于 2017-4-23 20:41:51 |只看作者 |坛友微信交流群
多谢分享哈哈哈哈

使用道具

22
gfree 发表于 2018-1-16 17:54:30 |只看作者 |坛友微信交流群
回帖子会涨经验吗?

使用道具

jose.liupei 发表于 2011-3-15 02:52
这个文档的p11-p12有介绍SUMMARY OF EVENT STUDY METHODOLOGY,excel就可以做。。。希望对你有所帮助
里面的介绍也太粗略了

使用道具

24
viola_lili 发表于 2018-12-8 04:38:46 |只看作者 |坛友微信交流群
有人踩吗

使用道具

在连玉君老师的公众号找到的stata的命令,我也正在做这个,还在数据清洗阶段,
先分享给您,希望对您有帮助,如有新进展可以一起交流!谢谢 !

*For number of trading days:
   sort company_id date
   by company_id: gen datenum=_n  /*定义新的日期变量,取值为 1,2,3,...*/
   by company_id: gen target=datenum if date==event_date  /*标定事件日*/
   egen td=min(target), by(company_id) /*扩充target的观察值*/
    gen dif=datenum-td                  /*以事件日0为基准定义日期*/

list date  event_date datenum target td dif in 1/20

*For calendar days:
   gen difc=date-event_date



*Construct the event window
   * 定义事件窗口
   by company_id: gen event_window=1 if (dif>=-2 & dif<=2)
   egen count_event_obs=count(event_window), by(company_id)
   * 定义估计窗口
   by company_id: gen estimation_window=1 if (dif<-30 & dif>=-60)
   egen count_est_obs=count(estimation_window), by(company_id)

   * 0 和 1 区分事件窗口和非事件窗口
   replace event_window=0 if event_window==.
   replace estimation_window=0 if estimation_window==.   


* Companies do not have a sufficient number of observations.

   tab company_id if count_event_obs<5
   drop if count_event_obs < 5

   tab company_id if count_est_obs<30
   drop if count_est_obs < 30



* 估计正常回报率

   cap drop predicted_return
   gen predicted_return=.    /*用于存放正常回报率的变量*/
   cap drop id
   egen id=group(company_id) /*重新定义公司代码为 1,2,3...,便于执行循环程序*/
   qui tab id
   local N = r(r)            /*记录公司数目*/

   forvalues i=1(1)`N' {
     *list id company_id if id==`i' & dif==0
     * 在估计窗口内估计市场模型
     qui reg ret market_return if (id==`i' & estimation_window==1)
     * 得到全样本范围内的正常回报率,即 market_return 的全样本拟合值
     predict p if id==`i'   
     * 在事件窗口内计算正常回报率
     replace predicted_return = p if (id==`i' & event_window==1)
     drop p
   }


* Abnormal and Cumulative Abnormal Returns

* Abnormal Returns  
   gen abnormal_return = ret - predicted_return if event_window==1

* CAR_1: sum of each firm (时序加总)
   sort id date
   by id: egen CAR_id = sum(abnormal_return)
   list id date dif abnormal_return CAR_id  if  (event_window==1 & id==1)

* CAR_2: sum according distance from event day  
   cap drop CAR_date
   gen CAR_date = .
   qui tab id
   local N = r(r)
   sort id date
   forvalues id = 1(1)`N'{
     replace CAR_date = sum(abnormal_return) if (id==`id'&event_window==1)
   }
   list id date dif abnormal_return CAR_date  if  (event_window==1 & id ==1)




* 检验个别公司的累积超常收益率是否显著

  cap drop ar_sd
  cap drop test_id
  cap drop sig
  cap drop pvalue

  * 计算 t 值
  sort id date
  by id: egen ar_sd = sd(abnormal_return)
  gen test_id =(1/sqrt(5))*(CAR_id /ar_sd)

  * 计算 p 值
  gen pvalue = normal(test_id)
  replace pvalue = 1 - pvalue if test_id>0
  replace pvalue = pvalue*2    /*双尾检定*/

  * 标明显著水平
  gen     sig = "*"   if pvalue <= 0.1
  replace sig = "**"  if pvalue <= 0.05
  replace sig = "***" if pvalue <= 0.01

  * 列示结果
  gsort -sig
  list company_id CAR_id test_id pvalue sig if dif==0&sig!=""

  gsort -sig
  list company_id CAR_id test_id sig if dif==-1 & sig!=""
  list company_id CAR_id test_id sig if dif==-2 & sig!=""
  list company_id CAR_id test_id sig if dif==0  & sig!=""
  list company_id CAR_id test_id sig if dif==1  & sig!=""
  list company_id CAR_id test_id sig if dif==2  & sig!=""

*Note: this test uses the sample standard deviation.
*      A less conservative alternative is to
*      use the population standard deviation.
*      To derive this from the sample standard deviation produced by Stata,
*      multiply ar_sd by the square root of n-1/n;
*      in our example, by the square root of 4/5.



* 样本总体的累积超常回报率是否显著?

  * All sample firms, full event window
  reg CAR_id if dif==0, robust



* 逐日累加累积超常回报率是否显著?
  * 方法 1
  preserve
     keep if abs(dif)<3
         bysort dif: reg CAR_date, robust noheader
  restore

  * 方法 2
  forvalues i = -2(1)2{
    dis in g "date = " in y `i'
    reg CAR_date if dif==`i', robust noheader
  }

  * 方法 2a
  mat A = J(5,4,0)
  forvalues i = -2(1)2{
    qui reg CAR_date if dif==`i', robust
    local b = _b[_cons]
    mat V = e(V)
    local se= sqrt(V[1,1])
    local t = `b'/`se'
    mat A[`=`i'+3',1] = (`i',`b',`se',`t')
  }
  mat colnames A = date coef se t
  mat list A


* 绘图显示逐日累加 累积超常回报率

preserve
  keep id date dif event_window CAR_date
  keep if event_window == 1
   cap drop CAR_t
   keep if event_window == 1
   sort dif
   by dif: egen CAR_t = mean(CAR_date)
   keep  dif CAR_t
   duplicates drop
   twoway connect CAR_t dif
restore

* 符号检定法

  * J3 = [N^+/N - 0.5]*(2*sqrt{N}) -- N(0,1)

* 整体检验  
preserve
  keep if event_window == 1
  qui count if abnormal_return > 0
  local Np = r(N)
  local N  = _N
  local J3 = (`Np'/`N' - 0.5)*2*sqrt(`N')
  local pvalue = normal(`J3')
  if `J3' > 0{
    local pvalue = 1- `pvalue'
  }
  local pvalue = `pvalue'*2

  dis in g "  J3" _col(8) " = " in y %6.4f `J3' _n   ///
      in g "p-value = "         in y %6.4f `pvalue'
restore


* 逐日检验
mat A = J(5,4,0)
forvalues i = -2(1)2{
  qui count if (dif==`i' & abnormal_return>0  & event_window==1)
  local Np = r(N)      /*超常回报率为正的公司数目*/
  qui count if (dif==`i' & abnormal_return!=. & event_window==1)
  local N  = r(N)      /*公司总数*/
  local J3 = (`Np'/`N' - 0.5)*2*sqrt(`N')
  local pvalue = normal(`J3')
  if `J3' > 0{
    local pvalue = 1- `pvalue'
  }
  local pvalue = `pvalue'*2  
  mat A[`=`i'+3',1] = (`J3', `pvalue', `Np', `N')
}

mat colnames A = J3 p-value N+ N
mat list A


使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-6-15 20:52