使用lm()和predict()按日期滚动进行回归和预测

时间:2019-03-06 16:32:05

标签: r loops regression lm predict

所以我正在基于以下问题+最佳答案对lm()和predict()进行滚动回归,并且它与我的数据配合得很好

https://stackoverflow.com/a/38041406/9932223

我的问题是我不想在每行之后都放一个新的lm()。我的数据在每个日期都有多行,而在每个日期并不总是具有相同的行数。如果我想在每个日期的行集的末尾添加一个新的lm()(并继续使用之前所有日期的所有以前的数据),我将如何修改此代码?

1 个答案:

答案 0 :(得分:0)

考虑在lapply调用内调用该方法,以迭代lm调用中用于数据帧过滤的日期的唯一值:

# ORDER BY DATE ASC
dat <- with(dat, dat[order(Date),])

bundle <- function(curr_date) {
  # REPLACING subset WITH FILTER FOR ALL DATES BEFORE CURRENT DATE
  fit <- lm(y ~ x1 + x2 + x3, data = dat[dat$Date < curr_date,], model = FALSE)

  # REPLACE FILTER FOR ALL DATES ON CURRENT DATE
  pred <- predict(fit, newdata = dat[dat$Date == curr_date,], se.fit = TRUE)

  # RETURN DATA FRAME OF RESULTS
  data.frame(date = curr_date,
             adj_r = summary(fit)$adj.r.squared, 
             fit = pred$fit, 
             se_fit = pred$se.fit)
}

# LAPPLY CALL 
rolling_models_df_list <- lapply(unique(dat$Date)[-1], bundle)