我对 R 有点陌生。我想我的错误对于有经验的人来说是微不足道的。
我正在尝试编写一个 R 程序来计算许多股票的贝塔值。股票代码读取自Input.csv
,数据是从yahoo下载的。然后,代码循环执行每只股票的 beta 计算,并输出总结回归的 csv。
当在所有时期都假设单一无风险利率时,我的代码可以工作,但我相信在标准化超额收益时,我可能需要使用每个月的实际无风险利率。我在这一步遇到了麻烦。 xts 已成功从 FRED (GS20) 下载,但是当从证券和市场回报中减去回报时,它会生成零长度的 xts。这会杀死该程序。
我相信这可能是因为 FRED 和 Yahoo 之间的日期格式不同。我注意到 getSymbols 命令忽略了从-到日期。任何帮助,将不胜感激。
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")