【问题标题】:How to calculate mean adjusted abnormal return如何计算平均调整后的异常收益
【发布时间】:2019-12-14 03:28:51
【问题描述】:

我想计算几家公司的平均调整后回报。 我有月度数据。我想计算过去 12 个月的滚动平均值。之后,我需要从每月回报中减去滚动平均值。

一开始我使用quantmodlapply 来计算收益:

library(quantmod)

stocks=new.env()

startDate=as.Date("2008-07-31")

endDate=as.Date("2019-06-30")

tickers=c("ADS.DE","DAI.DE","BMW.DE")

getSymbols(tickers,src="yahoo",env=stocks,from=startDate,to=endDate)

stocksL=as.list(stocks)

returns.daily=lapply(stocksL, function(x) diff(log(Cl(x))))

returns.montly=lapply(returns.daily, apply.monthly, sum, na.rm=TRUE)

在下一步中,我必须计算每个月过去 12 个月的滚动平均值。我的估计期是从 2009-07-31 到 2019-06-30。 之后,我必须从每个月的回报中减去滚动平均值。

【问题讨论】:

    标签: r loops return mean


    【解决方案1】:

    您可以使用rollapply() 函数。假设您要计算每个月的年均回报率,代码将是:

    
    library(zoo)
    
    returns.rolling=lapply(returns.montly, 
                           function(x) rollapply(x, width = 12, FUN = mean))
    
    aR = Map("-",returns.montly, lapply(returns.rolling, stats::lag))
    
    

    【讨论】:

    • 谢谢!它似乎工作。现在我有两个列表:returns.monthly 和returns.rolling。第二步,计算异常收益。我必须从returns.monthly 中减去returns.rolling。我试过功能图:aR=Map("-",returns.monthly,returns.rolling)。问题是 R 减去了同一个月的值。我必须减去上个月。例如 2009-07-31:2009-07-31(来自returns.monthly)- 2009-06-30(来自returns.rolling)。如何选择上个月?
    • 我用你的地图代码更新了答案,但使用了stats::lag()函数来确保你减去上个月的滚动回报。
    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多