2015-11-13 61 views
0

我有一個線性模型擬合到分組數據,該分組數據生成lm類型的對象列表。我想用這個線性模型來預測給定x的給定置信區間的y的值。我想要一個獨特的變量w預測。下面是樣本數據的代碼:使用置信度區間的lm列表的預測

x<-c(.34,.355,.37,.385,.34,.355,.37,.385,.34,.355,.37,.385,.34,.355,.37,.385) 
y<-c(40,35,28,25,42,36,29,25,44,37,26,23,46,37,33,27) 
w<-c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4) 
data<-data.frame(x,y,w) 
ggplot(data=data,aes(x=x,y=log10(y),color=factor(w)))+ 
    geom_point(size=4)+ 
    geom_smooth(method=lm,aes(group=w,fill=factor(w)),fullrange=TRUE)+ 
    facet_wrap(~w,nrow=2)+ 
    scale_x_continuous(limit=c(.33,.5)) 
mod <- dlply(data, .(w), function(df) lm(log(y)~x, data = df)) 

我想使用的功能預測,但它並沒有在名單工作。所以,我可以預言這給下面的輸出

 fit  lwr  upr 
1 0.8476424 0.5981407 1.097144 

不過,我希望能夠運用預測列表中的每個元素列表

newdata<-data.frame(x=.5)  
predict(mod[[1]],newdata,interval="confidence") 

的元素。我試圖使用庫nlme來做以下事情,但它沒有給出置信區間。

library(nlme) 

ll=lmList(log10(y)~x|w,data = data) 
predict(ll,newdata,interval="confidence") 

輸出:

1   2   3   4 
0.8476424 0.8042928 0.5818862 0.8633285 

我用GGPLOT2只是對視覺輔助,但我需要在置信區間的邊界的實際值來計算預測的y變量的範圍。

回答

0

如果在列表中的每個元素想applylapply(列表應用)是要走的路:

do.call(rbind, lapply(mod, function(x) predict(x, newdata, interval="confidence"))) 

     fit  lwr  upr 
1 1.951769 1.3772699 2.526268 
1 1.851953 1.4852869 2.218618 
1 1.339843 0.1453728 2.534312 
1 1.987887 1.4446006 2.531174 

所以使用lapply,我們正在運行我們的匿名函數predict(x, newdata, interval="confidence"))其中x是每個mod的元素。 do.call將列表輸出轉換爲更好的矩陣。

+0

謝謝。我沒有得到正確的函數參數。這解決了我的問題。 – beeprogrammer