Сделать регрессии и прогнозы для групп в R - PullRequest
1 голос
/ 05 апреля 2011

У меня есть следующие data.frame d из эксперимента:

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

В последние 8 лет y измерялось примерно раз в месяц (точная дата в t) для каждого уровня f,Иногда есть 2 измерения в месяц, иногда пара месяцев проходит без каких-либо мер.

Извините за то, что не предоставил пример данных, но составление нерегулярных временных рядов выходит за рамки моего знания R.;)

Я хотел бы сделать следующее с этими данными:

  1. сделать регрессию, используя функцию loess() (y ~ t), для каждого уровня f
  2. делает прогноз y для первого дня каждого месяца и каждого уровня f

Первый пункт, который, я думаю, я решил, используя ответ Хэдлиса на это вопрос:

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 (= даты)

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

Отредактированный

Ключом является использование ldply () с функцией предиката (). Вот пример использования фиктивных данных:

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 голос
/ 05 апреля 2011

Самое сложное, что нужно сделать, это сделать функцию predict и использовать lapply.Что не очень сложно сделать.

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

, если вы хотите использовать y.predicted, просто используйте

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

HTH

...