R 使用不同列(自变量)执行多重滚动回归

R 使用不同列(自变量)执行多重滚动回归,r,regression,multiple-columns,xts,rolling-computation,R,Regression,Multiple Columns,Xts,Rolling Computation,如何在单独的回归中,以y1为因变量,以y2、y3等为自变量进行多重滚动回归: 见下例: library(xts) df=data.frame(y1=rnorm(300),y2=rnorm(300),y3=rnorm(300),y4=rnorm(300),y5=rnorm(300),y6=rnorm(300)) data <- xts(df, Sys.Date()-300:1) 但是现在我想测试y1~y3、y1~y4等等。我有一个总共120列的数据集 下面的帖子很接近,但我无法重现编码:

如何在单独的回归中,以y1为因变量,以y2、y3等为自变量进行多重滚动回归:

见下例:

library(xts)

df=data.frame(y1=rnorm(300),y2=rnorm(300),y3=rnorm(300),y4=rnorm(300),y5=rnorm(300),y6=rnorm(300))
data <- xts(df, Sys.Date()-300:1)
但是现在我想测试y1~y3、y1~y4等等。我有一个总共120列的数据集

下面的帖子很接近,但我无法重现编码:

如何调整rollingb以完成工作

@Yannis Vassiliadis提供的解决方案是有效的,但是接下来的问题是如何将所有系数beta很好地取消列在矩阵中 /data.frame与xts中的相应日期一致?

这个怎么样

roll_lm <- lapply(2:ncol(data), function(x) rollapply(zoo(data[, c(1, x)]),
                          width=20,
                          FUN = function(Z)
                          { Z = as.data.frame(Z);
                            t = lm(formula=Z[, 1]~Z[, 2]);
                            return(t$coef)
                          },
                          by.column=FALSE, align="right"))
您可以使用purrr中的map沿y1~y2和y1~y3行构建公式列表。然后在lm中使用这些公式中的每一个


取消上市的最佳方式是什么?我用的是输出,你可以用roll_lm,我想你的意思是namesroll_lm@M_Sunny,是的!你说得对,我在传输代码时忘了更新名称。有没有办法只提取日期为xts的data.frame中的系数?coefplot::multipotmodels,plot=FALSE
plot(rollingb)
roll_lm <- lapply(2:ncol(data), function(x) rollapply(zoo(data[, c(1, x)]),
                          width=20,
                          FUN = function(Z)
                          { Z = as.data.frame(Z);
                            t = lm(formula=Z[, 1]~Z[, 2]);
                            return(t$coef)
                          },
                          by.column=FALSE, align="right"))
names(roll_lm) <- paste0("y1~y",2:6) 
roll_lm2 <- plyr::rbind.fill.matrix(roll_lm) 
roll_lm3 <- cbind(roll_lm2, rep(names(roll_lm), each = 281)) # just to keep track of the names
# these are the packages we are using
library(purrr)
library(useful)
library(coefplot)

# here's your data
df=data.frame(y1=rnorm(300),y2=rnorm(300),y3=rnorm(300),y4=rnorm(300),y5=rnorm(300),y6=rnorm(300))

# keep track of the response variable
response <- 'y1'
# we'll assume all the other variables are predictors
predictors <- setdiff(names(df), response)

# fit a bunch of models
models <- predictors %>% 
    # for each predictor build a formula like y1 ~ y2
    map(~build.formula(response, .x)) %>% 
    # for each of those fit a model
    map(lm, data=df)

# plot them for good measure
multiplot(models)