我试图对任意数量的股票进行股票收益的滚动回归 . 下面的代码返回我想要的两个股票的结果,但我想扩展我的代码,以便每个股票在“基准”股票上回归 . 以下面的数据为例,选择Google作为基准股票,并在Google上对FB,APPL和NFLX进行滚动回归 . 什么是实现这一目标的好方法?我宁愿留在整齐,但欢迎任何解决方案 .
library(tidyquant)
FANG <- tq_get(c("FB","AAPL","NFLX","GOOGL"), get = "stock.prices", from = " 2018-01-01")
returnsFANG=FANG %>% group_by(symbol) %>%
tq_transmute(select = close,
mutate_fun = periodReturn,
period = "daily",
col_rename = "Daily.Returns")%>%
spread(symbol,Daily.Returns)
returnRegression = function(data) {
coef(lm(AAPL ~ NFLX, data = timetk::tk_tbl(data, silent = TRUE)))
}
regressionCoef=returnsFANG %>% select(c(date,AAPL,NFLX))%>%
tq_mutate(mutate_fun = rollapply,
width = 60,
FUN = returnRegression,
by.column = FALSE,
col_rename = c("Intercept", "Slope"))
使用此问题的解决方案R / Rolling Regression with extended Data Frame我能够使用以下代码获得解决方案的大部分内容
xnames=names(returnsFANG)[c(-1,-2)]
n <- nrow(returnsFANG)
w <- 60
slope = function(ix, xname) summary(lm(AAPL ~., returnsFANG[c("AAPL", xname)], subset = ix))$coefficients[2,1]
slopeReturns=as.data.frame(sapply(xnames, function(xname) rollapply(1:n, w, slope, xname = xname )))
我不知道如何保留日期列,以便它出现在slopeReturns数据框中 . 这将如何实现?