2

d実験から次のdata.frameがあります。

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

過去8年間で、yはfの各レベルについておよそ月に1回(tの正確な日付)測定されました。1か月に2つのメジャーがある場合もあれば、メジャーなしで2、3か月が経過した場合もあります。

サンプルデータを提供していないことをお詫びしますが、不規則な時系列を構成することは私のRの知識を超えています。;)

このデータで次のことを行いたいと思います。

  1. の各レベルについて、loess()関数を使用して回帰を作成します(y ~ t)f
  2. y毎月の初日と各レベルの予測を行いますf

Hadleysを使用して解決したと思う最初のポイントは、この質問に対する答えです。

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

これで、各レベルのモデルを持つmodels(クラス)ができました。また、次のように各レベルで予測したい時間を作成しました。listfyf

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。予測
  • f
  • t.predicted(=日付)

どんな助けでも大歓迎です。

4

2 に答える 2

2

編集済み

重要なのは、predict()で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
于 2011-04-05T16:17:21.473 に答える
2

最も複雑なことは、関数を作成して使用すること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

于 2011-04-05T16:24:41.227 に答える