R 计算股票的 beta(使用 PerformanceAnalytics CAPM.beta() 函数或 lm() 函数产生意外结果)

R calculating a stock's beta (using PerformanceAnalytics CAPM.beta() function or lm() function producing unexpected results)

我正在尝试使用 PerformanceAnalytics CAPM.beta() 函数在 R 中量化股票的 beta(基准标记与 SPY),结果甚至不接近我在网上看到的值 Yahoo/Google金融。代码:

require(PerformanceAnalytics)

start_date <- "2013-08-24"

acad <- getSymbols("ACAD", from = start_date, auto.assign = F)
spy <- getSymbols("SPY", from = start_date, auto.assign = F)

CAPM.beta(acad[,6], spy[,6])

对于上面的例子,Yahoo/Finviz/Google 都列出了 ACAD 的 beta 在 2.6 到 3.0 以上。虽然我不确定每个站点的回顾期是多少,但更改上述代码中的值会产生小于 1 的 1、2、3 年回顾的 beta 值。

同样,通过尝试使用 lm() 计算 beta,我得到 ACAD ~ SPY 2 年回顾的 0.39 beta:

m <- lm(acad[,6] ~ spy[,6] + 0)
beta <- coef(m)[1]
beta

我错过了什么?

Beta 是根据 returns 计算的,通常是每月一次。当使用 lm.

时,您 do 想要模型中的截距项 (alpha) 拟合
start_date <- "2012-07-01"
acad <- getSymbols("ACAD", from = start_date, auto.assign = F)
spy <- getSymbols("SPY", from = start_date, auto.assign = F)

r<-function(x) {m<-to.monthly(x[,6])[,4];diff(m)/lag(m)}

coef(lm(r(acad)[2:37]~r(spy)[2:37]))
#> (Intercept) r(spy)[2:37] 
#>  0.08601629   2.62485092 

在这种情况下,针对 36 个月的调整后月末收盘计算出的 Beta 约为 2.6。