对R中的组进行回归和预测

时间:2011-04-05 14:43:51

标签: list r time-series regression plyr

我从实验中得到以下data.frame d

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

在过去8年中,对于每个级别的f,y大约每月测量一次(t的确切日期)。有时每月有两项措施,有时几个月没有采取任何措施。

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

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

  1. 使用loess()函数(y ~ t)f
  2. 的每个级别进行回归
  3. 预测y每月的第一天以及f的每个级别
  4. 我认为第一点是通过使用Hadleys回答this问题来解决的:

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

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

    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(= dates)

    非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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