大家好我想问一下,有没有办法一次性多次返回滚动窗口回归,一个数据框中的因变量和另一个数据框中的回归量?我试图结合rollapply和sapply功能来做到这一点 . 到目前为止,我似乎无法使其工作 .
对于金融背景:我想要做的是计算Fama-Macbeth回归的回归量 . 使用滚动窗口向前滚动1个月以更新回归量 . 与最初的1973年Fama-macbeth不同,估计期延长了4年 .
我附上了下面的示例脚本所需的.csv文件的链接,它包含来自雅虎财经的每日价格数据,以便你们可以更好地了解我想要做的事情 .
library(xts)
library(quantmod)
library(lmtest)
library(sandwich)
library(MASS)
library(tseries)
data.AMZN
date
data.AMZN
data.AMZN
data.AMZN
names(data.AMZN)
paste(c("AMZN.Open","AMZN.High","AMZN.Low",
"AMZN.Close","AMZN.Volume","AMZN.Adjusted"))
data.AMZN[c(1:3,nrow(data.AMZN)),]
data.YHOO
date
data.YHOO
data.YHOO
data.YHOO
names(data.YHOO)
paste(c("YHOO.Open","YHOO.High","YHOO.Low",
"YHOO.Close","YHOO.Volume","YHOO.Adjusted"))
data.YHOO[c(1:3,nrow(data.YHOO)),]
data.mkt
date
data.mkt
data.mkt
data.mkt
names(data.mkt)[1:6]
paste(c("GSPC.Open","GSPC.High","GSPC.Low",
"GSPC.Close","GSPC.Volume","GSPC.Adjusted"))
data.mkt[c(1:3,nrow(data.mkt))]
rets
rets$YHOO
names(rets)[1]
mktrets
names(mktrets)[1]
rets
rets.df = as.data.frame(rets)
mktrets
mktrets.df = as.data.frame(mktrets)
# combining this funtion : do 252 days rolling window linear regression,
#for a single asset as dependent variable and the other as regressor, in the same data frame
coeffs
width=252,
FUN=function(X)
{
roll.reg=lm(AMZN~YHOO,#YHOO is supposed to be GSPC, just an illustration.
data=as.data.frame(X))
return(summary(roll.reg)$coef)
},
by.column=FALSE)
#With this funtion : it does linear regressions for multiple assets in a different data frame at once
#and put it in a matrix.
Coefficients = sapply(1:ncol(rets),function(x) {
summary(lm(rets[,x]~mktrets[,1]))$coefficients
}
)
#I need to the rolling regressions with different data frames because
#in the real application,i need to assign a unique and specific regressor to
#each dependent variable
也许问题太多了,但我真的需要这样做 . 任何关于如何做到这一点或任何其他方式的建议将非常感激 .
多谢你们 .