XTS的日期来自不同的来源。用R来计算beta

时间:2012-08-03 19:27:47

标签: r finance xts quantmod

我对R有点新鲜。我想我的错误对经验丰富的人来说是微不足道的。

我正在尝试编写一个R计划来计算一些股票的beta值。股票代码从Input.csv读取,数据从雅虎下载。然后代码循环遍历每个股票的beta计算,并输出一个总结回归的csv。

当所有时期都假设单一无风险利率时,我得到了代码,但我相信我可能需要在规范超额收益时使用每个月的实际无风险利率。我在这一步遇到了麻烦。从FRED(GS20)成功下载了xts,但是当从安全性和市场回报中减去回报时,它产生的xts为零长度。这会杀死该计划。

我相信这可能是因为FRED和雅虎之间的日期格式不同。我注意到getSymbols命令忽略了from-to日期。任何帮助将不胜感激。

require(PerformanceAnalytics)
require(quantmod)
require(car)

setwd("R Projects/Beta Test")

proxy <- read.csv("Input.csv",header=FALSE)[,1]
summary <- as.data.frame(matrix(0, ncol = 5, nrow = 0))

mar <- getSymbols("^GSPC", src = "yahoo", from = as.Date("2006-01-01"),
                  to = as.Date("2011-12-31"),auto.assign=FALSE)
riskFree <- getSymbols("GS20", src = "FRED", from = as.Date("2006-12-01"),
                       to = as.Date("2011-12-31"),auto.assign=FALSE)

for (n in proxy){

    sec <- getSymbols(n, src = "yahoo", from = as.Date("2006-01-01"),
                      to = as.Date("2011-12-31"),auto.assign=FALSE)

    #Monthly Returns
    #ERROR PRODUCED HERE
    sec.xsmonthly <- monthlyReturn(to.monthly(sec),type="log") - riskFree
    mar.xsmonthly <- monthlyReturn(to.monthly(mar),type="log") - riskFree

    sec.reg <- lm(sec.xsweekly ~ mar.xsmonthly + lag(mar.xsmonthly,-1))

    summary[n,1] <- coef(sec.reg)[1]
    summary[n,2] <- coef(sec.reg)[2]
    summary[n,3] <- coef(sec.reg)[3]
    summary[n,5]<-summary(sec.reg)$r.squared
}

summary[,4] <- summary[,2]+summary[,3]

colnames(summary) <- c("Alpha","Beta","Beta-Lag","Sum Beta","R-Squared")
write.csv(summary,file="output.csv")

1 个答案:

答案 0 :(得分:1)

请注意,getSymbols.FRED没有fromto个参数,因为无法使用日期范围查询FRED。问题是FRED日期在每个月的开始时对齐,to.monthly的输出在每个月末对齐。解决此问题的一种方法是在循环之前在to.monthly上调用riskFree

mar <- getSymbols("^GSPC", from="2006-01-01", to="2011-12-31", auto.assign=FALSE)
riskFree <- getSymbols("GS20", src="FRED", auto.assign=FALSE)

riskFree <- Cl(to.monthly(riskFree))
mar.xsmonthly <- monthlyReturn(to.monthly(mar),type="log") - riskFree