【问题标题】:Make regressions and predictions for groups in R对 R 中的组进行回归和预测
【发布时间】:2011-07-30 01:15:58
【问题描述】:

我有以下来自实验的 data.frame d

- Variable y (response, continuous)
- Factor f (500 levels)
- Time t (posixct)

在过去 8 年中,对于 f 的每个级别,y 大约每月测量一次(确切日期以 t 为单位)。有时每月有 2 次措施,有时几个月过去了没有任何措施。

很抱歉没有提供示例数据,但编造不规则的时间序列超出了我的 R 知识范围。 ;)

我想对这些数据执行以下操作:

  1. 使用loess() 函数(y ~ t)f 的每个级别进行回归
  2. 预测y每个月的第一天和f的每个级别

我认为我通过使用 Hadleys 回答 this 问题解决了第一点:

models <- dlply(d, "f", function(df) loess(y ~ as.numeric(t), data = df))

所以,现在我有一个models(类list),每个级别都有一个模型f。 我还为f 的每个级别创建了我想预测y 的时间,如下所示:

dates <- seq(min(t),max(t),"months")

但现在我被困在如何对每个模型进行预测。像这样的东西应该可以工作(伪代码):

for each f in models
    p.f <- predict(models(f),dates)
    p.f.complete <- r.bind(p.f.comlete,p.f)
next f

因此,我想要这个data.frame:

  • y.predicted
  • f
  • t.predicted(= 日期)

任何帮助将不胜感激。

【问题讨论】:

    标签: list r time-series regression plyr


    【解决方案1】:

    最复杂的事情是把函数设为predict 并使用lapply。这并不难做到。

    dates <- data.frame(t = dates)
    y.predicted <- lapply(models, function (x) predict(x, newdata = dates))
    

    如果你想 rbind y.predicted 只需使用

    y.predicted <- do.call(rbind, y.predicted)
    

    HTH

    【讨论】:

    • 感谢您的回答,效果很好!为了从列表中创建一个 data.frame,我只使用了melt(y.predicted)
    【解决方案2】:

    已编辑

    关键是使用 ldply() 和 predict()。以下是使用虚拟数据的示例:

    library(plyr)
    d <- data.frame(
            f = rep(LETTERS[1:5], each=20),
            t = rep(1:20, 5),
            y = runif(100))
    
    models <- dlply(d, "f", function(df) loess(y ~ as.numeric(t), data = df))
    predict(models[[1]])
    
    x <- ldply(models, predict)
    colnames(x) <- c("f", 1:20)
    x
    

    【讨论】:

    • 感谢您的回答。这几乎是我想要的,但它不包括对dates 的预测。这就是为什么我将 lselzer 的答案评为正确答案。
    猜你喜欢
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2021-03-02
    • 2015-10-13
    相关资源
    最近更新 更多