逐步回归:为动物园系列

时间:2018-01-18 11:39:49

标签: r linear-regression zoo rollapply

我正在尝试使用rollapply()和step()生成滚动逐步回归,但是注意到生成的动物园系列的日期范围是滞后的。您可以在下面找到使用两年“数据”(2016-01-01:2017-12-31)以及回归参数估算的365天回顾期的插图。

在第一种情况下,会生成正确的日期范围(2016-12-30至2017-12-31期间的'动物园'系列)。在第二种情况下,生成滞后日期范围(2016-07-01至2017-07-02期间的“动物园”系列)。第二种情况下的日期范围不可能,因为回归需要365天的观察,数据从2016-01-01开始。在我看来,得到的滚动参数是正确的,但它们的相应日期标记不是。

感谢所有帮助,谢谢。

library(zoo)

date <- seq(as.Date("2016-01-01"), as.Date("2017-12-31"), by="days")
y <- rnorm(length(date))
x1 <- rnorm(length(date))
x2 <- rnorm(length(date))
z <- rnorm(length(date))
x3 <- z+5
all_vars <- cbind.data.frame(date, y, x1, x2, x3)


# First case: rolling regression that works, i.e. correct date range is 
# generated

rolling_reg_works <- rollapply(zoo(all_vars[,-1], order.by = date), 
width=365, FUN=function(z){
t = lm(formula=y~x1+x2+x3, data=as.data.frame(z))
return(t$coef)
}, by.column=FALSE, align="right")

str(rolling_reg_works)


# Second case: rolling regression that doesn't work, i.e. lagged date range 
# is generated

rolling_reg_doesnt_work <- rollapply(zoo(all_vars[,-1], order.by = date), 
width=365, FUN=function(z){
t = step(lm(formula=y~x1+x2+x3, data=as.data.frame(z)), direction = 
"backward", k=2)
return(t$coef)
}, by.column = FALSE)

str(rolling_reg_doesnt_work)

1 个答案:

答案 0 :(得分:0)

在第二种情况下,回归中缺少

align =“right”。多么令人尴尬的菜鸟错误!

案件结案。