2011-04-05 58 views
1

我有以下從實驗data.frame d使團體迴歸和預測中的R

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

在過去的8年,Y測量大約每個月一次(以噸確切的日期),用於f的每個級別。有時每月有兩項措施,有時幾個月沒有采取任何措施。

對不起,不提供示例數據,但彌補不規則的時間序列超出了我的R知識。 )

我想這樣做與此數據如下:

  1. 使用loess()功能(y ~ t)進行迴歸,對於f
  2. 每個級別作出的y預測第一天每個月和f

第一點的每個級別的,我想我解決了使用哈德利的答案this問題:

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

所以,現在我有一個models(類list),與的f每個級別的模型。 我也創造了很多次我想預測yf每個級別這樣的,其中:

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 (=日期)

任何幫助將不勝感激。

回答

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

+0

感謝您的回答,效果很好!爲了使data.frame不在列表中,我只是使用了'melt(y.predicted)'。 – donodarazao 2011-04-06 08:50:28

2

被修改

的關鍵是與預測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 
+0

感謝您的回答。這幾乎是我想要的,但它不包括'日期'的預測。這就是爲什麼我將lselzer的答案評爲正確的答案。 – donodarazao 2011-04-06 08:49:22