我正在使用市场模型在R中进行简单的事件研究。我正在使用eventstudies包,其中一个步骤是计算异常返回,ar <- es$z.e - esMean
。
该软件包的作者提供了xts对象(StockPriceReturns),Events(SplitDates)和Market(Other Returns)的示例。这看起来如下:
> library(eventstudies)
> data(StockPriceReturns)
> data(SplitDates)
> head(SplitDates)
unit when
5 BHEL 2011-10-03
6 Bharti.Airtel 2009-07-24
8 Cipla 2004-05-11
9 Coal.India 2010-02-16
10 Dr.Reddy 2001-10-10
11 HDFC.Bank 2011-07-14
> head(StockPriceReturns)
Bajaj.Auto
2010-07-01 0.5277396
2010-07-02 -1.7309383
2010-07-05 -0.2530097
2010-07-06 -0.3167551
2010-07-07 -1.2771502
2010-07-08 -0.2827092
有了这些数据,我想做一个事件研究 - 见下面的R代码:
# 10-day window around the event
es <- phys2eventtime(z=StockPriceReturns, SplitDates, width = 10)
es.cmr <- constantMeanReturn(es$z.e[which(attributes(es$z.e)$index%in%-30:-11), ], residual = FALSE)
ar <- es$z.e - es.cmr
ar <- window(ar, start = -1, end = 10)
car <- remap.cumsum(ar, is.pc = FALSE, base = 0)
rowMeans(car, na.rm = TRUE)
所以,如果我运行ar <- es$z.e - es.cmr
,它会返回:
> ar <- es$z.e - es.cmr
Error in `-.default`(es$z.e, es.cmr) : non-conformable arrays
我已经查看了原始函数(可在他们的GitHub获得)来找出这个错误,但我没有想法如何调试它。我希望有人能帮助我解决这个问题。
关于marketModel:是否有人知道如何使用eventstudies包的marketModel
函数执行相同操作。因为在这里我不能写es.mm(见下文),因为错误消息:ROW(firm.returns) == NROW(market.returns) is not TRUE
es.mm <- marketModel(firm.returns = es$z.e[which(attributes(es$z.e)$index%in%-30:-11), ], market.returns = OtherReturns[, "NiftyIndex"], residual = FALSE)
非常感谢你的帮助。