【问题标题】:R calculating a stock's beta (using PerformanceAnalytics CAPM.beta() function or lm() function producing unexpected results)R 计算股票的贝塔(使用 PerformanceAnalytics CAPM.beta() 函数或 lm() 函数产生意外结果)
【发布时间】:2015-11-18 02:36:36
【问题描述】:

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

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 的 2.6 到 3.0 以上的测试版。虽然我不确定每个网站的回溯期是多少,但更改上述代码中的值会在 1、2、3 年的回溯中产生小于 1 的 beta 值。

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

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

我错过了什么?

【问题讨论】:

    标签: r stocks performanceanalytics


    【解决方案1】:

    Beta 是根据回报计算的,通常是每月一次。您确实希望在使用 lm 时拟合模型中的截距项 (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。

    【讨论】:

      猜你喜欢
      • 2019-10-12
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      相关资源
      最近更新 更多