将 AR(1) 项添加到 R 中的多元回归
Adding AR(1) term to multiple regressions in R
我是运行 503个独立的回归,每个回归都有一个独立的因变量,有3个自变量和1个AR(1)项。
数据:
# fake data
set.seed(333)
df <- data.frame(seq(as.Date("2017/1/1"), as.Date("2017/2/19"), "days"),
matrix(runif(50*506), nrow = 50, ncol = 506))
names(df) <- c("Date", paste0("var", 1:503), c("mktrf", "smb", "hml"))
我使用名为 lagpad 的函数如下创建 AR(1) 过程:
lagpad <- function(x, k=1) {
i<-is.vector(x)
if(is.vector(x)) x<-matrix(x) else x<-matrix(x,nrow(x))
if(k>0) {
x <- rbind(matrix(rep(NA, k*ncol(x)),ncol=ncol(x)), matrix(x[1:(nrow(x)-k),], ncol=ncol(x)))
}
else {
x <- rbind(matrix(x[(-k+1):(nrow(x)),], ncol=ncol(x)),matrix(rep(NA, -k*ncol(x)),ncol=ncol(x)))
}
if(i) x[1:length(x)] else x
}
然后我存储回归所需的变量:
所有 dep var
x = df[,505:507]
所有独立变量
y <- df[,2:504]
AR(1) 过程
y_lag <- lagpad(y, -1)
适合所有模型
list_models_AR= lapply(y, function(y)
with(x, lm(y ~ mktrf + smb + hml + y_lag, na.action = na.exclude)))
在这种情况下,我无法弄清楚如何使用 lapply
,因为需要调用 y_lag 的多个组件, 每个回归一个。
我不确定你的滞后项,它似乎实际上是下一个 y-column。如果是这样,您可以创建 502 个模型,如下所示:
list_models_AR= lapply(1:(ncol(y)-1), function(i) lm(y[,i]~x[,1] + x[,2] + x[,3] +y[,i+1], na.action=na.exclude))
我是运行 503个独立的回归,每个回归都有一个独立的因变量,有3个自变量和1个AR(1)项。
数据:
# fake data
set.seed(333)
df <- data.frame(seq(as.Date("2017/1/1"), as.Date("2017/2/19"), "days"),
matrix(runif(50*506), nrow = 50, ncol = 506))
names(df) <- c("Date", paste0("var", 1:503), c("mktrf", "smb", "hml"))
我使用名为 lagpad 的函数如下创建 AR(1) 过程:
lagpad <- function(x, k=1) {
i<-is.vector(x)
if(is.vector(x)) x<-matrix(x) else x<-matrix(x,nrow(x))
if(k>0) {
x <- rbind(matrix(rep(NA, k*ncol(x)),ncol=ncol(x)), matrix(x[1:(nrow(x)-k),], ncol=ncol(x)))
}
else {
x <- rbind(matrix(x[(-k+1):(nrow(x)),], ncol=ncol(x)),matrix(rep(NA, -k*ncol(x)),ncol=ncol(x)))
}
if(i) x[1:length(x)] else x
}
然后我存储回归所需的变量:
所有 dep var
x = df[,505:507]
所有独立变量
y <- df[,2:504]
AR(1) 过程
y_lag <- lagpad(y, -1)
适合所有模型
list_models_AR= lapply(y, function(y) with(x, lm(y ~ mktrf + smb + hml + y_lag, na.action = na.exclude)))
在这种情况下,我无法弄清楚如何使用 lapply
,因为需要调用 y_lag 的多个组件, 每个回归一个。
我不确定你的滞后项,它似乎实际上是下一个 y-column。如果是这样,您可以创建 502 个模型,如下所示:
list_models_AR= lapply(1:(ncol(y)-1), function(i) lm(y[,i]~x[,1] + x[,2] + x[,3] +y[,i+1], na.action=na.exclude))