使用 lm() 和 predict() 按日期滚动回归和预测
Rolling regression and prediction by date with lm() and predict()
所以我正在根据以下问题 + 最佳答案使用 lm() 和 predict() 进行滚动回归,它与我的数据完美配合
我的问题是我不希望在每一行之后都适合一个新的 lm()。我的数据每个日期都有多行,每个日期的行数并不总是相同。如果我想在每个日期的行集的末尾添加一个新的 lm()(并继续使用之前所有日期的所有先前数据),我将如何修改此代码?
考虑在 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)
所以我正在根据以下问题 + 最佳答案使用 lm() 和 predict() 进行滚动回归,它与我的数据完美配合
我的问题是我不希望在每一行之后都适合一个新的 lm()。我的数据每个日期都有多行,每个日期的行数并不总是相同。如果我想在每个日期的行集的末尾添加一个新的 lm()(并继续使用之前所有日期的所有先前数据),我将如何修改此代码?
考虑在 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)