【问题标题】:Rolling regression and prediction by date with lm() and predict()使用 lm() 和 predict() 按日期滚动回归和预测
【发布时间】:2019-07-28 09:41:21
【问题描述】:

所以我根据以下问题 + 最佳答案使用 lm() 和 predict() 进行滚动回归,它与我的数据完美配合

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

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

【问题讨论】:

    标签: r loops regression lm predict


    【解决方案1】:

    考虑在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)
    

    【讨论】:

    • 我认为我们越来越近了,但结果只给了我每个唯一数据的调整后 R2 值,而不是基于 lm() 使用数据的每行的预测值包括上一个日期,有什么建议可以解决这个问题吗?
    • 查看更新。我忘了在predict() 调用中过滤,只在lm 中过滤。
    • 在 lm.fit(x,y,offset = offset,singular.ok=singular.ok,...) 中的 rolling_models 行错误之后我现在收到一个错误:0(非NA) 案例
    • 当然!第一个唯一日期之前没有任何记录。我调整了unique 呼叫以将其排除在外。
    • 太棒了!有效!我正在寻找的最后一件事是要清理的数据,我需要它出现在这三列中,调整后的 R2、预测和 SE,但现在它是每个唯一日期的矩阵。只是寻找那些列和与我的数据相同的行数,有什么解决方法吗?
    猜你喜欢
    • 2016-10-28
    • 2012-04-11
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2022-11-19
    • 1970-01-01
    • 2018-02-02
    相关资源
    最近更新 更多