Скользящая регрессия и прогноз по дате с помощью lm () и прогнозирования () - PullRequest
0 голосов
/ 06 марта 2019

Итак, я делаю регрессионную регрессию с помощью lm () и предиката () на основе следующего вопроса + топ-ответа, и он отлично работает с моими данными

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

Моя проблемав том, что я не хочу новую подгонку lm () после каждой строки.Мои данные имеют несколько строк для каждой даты и не всегда одинаковое количество строк для каждой даты.Если я хочу, чтобы новый lm () подходил в конце набора строк каждой даты (и продолжал использовать все предыдущие данные за все предыдущие даты), как бы я изменил этот код?

1 Ответ

0 голосов
/ 06 марта 2019

Рассмотрите возможность вызова метода внутри 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)
...