2013-01-16 20 views
21

Ho seguente modelloEstratto previsione band di LME adatta

x <- rep(seq(0, 100, by=1), 10) 
y <- 15 + 2*rnorm(1010, 10, 4)*x + rnorm(1010, 20, 100) 
id <- NULL 
for(i in 1:10){ id <- c(id, rep(i,101)) } 
dtfr <- data.frame(x=x,y=y, id=id) 
library(nlme) 
with(dtfr, summary( lme(y~x, random=~1+x|id, na.action=na.omit))) 
model.mx <- with(dtfr, (lme(y~x, random=~1+x|id, na.action=na.omit))) 
pd  <- predict(model.mx, newdata=data.frame(x=0:100), level=0) 
with(dtfr, plot(x, y)) 
lines(0:100, predict(model.mx, newdata=data.frame(x=0:100), level=0), col="darkred", lwd=7) 

enter image description here

con predict e level=0 posso tracciare la risposta della popolazione media. Come posso estrarre e tracciare gli intervalli di confidenza al 95%/le bande di predizione dall'oggetto nlme per l'intera popolazione?

+1

bella domanda! Se capisci, prova ad avere un equivalente di questa curva '(prevedere (model.lm, data.frame (x = x), interval = 'confidence'), add = T)' dove model.lm eg is lm (y ~ x) – agstudy

+0

Sì. Con i CI inferiore e superiore. – ECII

+0

Penso che anche per me è un lavoro ingrato per averlo. c'è la funzione 'intervalli' .lme' ma non dà alla banda un solo punto. – agstudy

risposta

20

Avviso: Leggere this thread on r-sig-mixed models prima di procedere. Fai molta attenzione quando interpreti la banda di predizione risultante.

Da r-sig-mixed models FAQ regolata per il tuo esempio:

set.seed(42) 
x <- rep(0:100,10) 
y <- 15 + 2*rnorm(1010,10,4)*x + rnorm(1010,20,100) 
id<-rep(1:10,each=101) 

dtfr <- data.frame(x=x ,y=y, id=id) 

library(nlme) 

model.mx <- lme(y~x,random=~1+x|id,data=dtfr) 

#create data.frame with new values for predictors 
#more than one predictor is possible 
new.dat <- data.frame(x=0:100) 
#predict response 
new.dat$pred <- predict(model.mx, newdata=new.dat,level=0) 

#create design matrix 
Designmat <- model.matrix(eval(eval(model.mx$call$fixed)[-2]), new.dat[-ncol(new.dat)]) 

#compute standard error for predictions 
predvar <- diag(Designmat %*% model.mx$varFix %*% t(Designmat)) 
new.dat$SE <- sqrt(predvar) 
new.dat$SE2 <- sqrt(predvar+model.mx$sigma^2) 

library(ggplot2) 
p1 <- ggplot(new.dat,aes(x=x,y=pred)) + 
geom_line() + 
geom_ribbon(aes(ymin=pred-2*SE2,ymax=pred+2*SE2),alpha=0.2,fill="red") + 
geom_ribbon(aes(ymin=pred-2*SE,ymax=pred+2*SE),alpha=0.2,fill="blue") + 
geom_point(data=dtfr,aes(x=x,y=y)) + 
scale_y_continuous("y") 
p1 

plot

+4

+1 per avermi salvato la fatica di farlo o mi sento in colpa per non averlo fatto. Prendi nota (come commentato nelle FAQ) che questo spiega solo l'incertezza degli effetti fissi ** condizionati dalle stime ** delle varianze a effetto casuale e BLUP/modalità condizionali –

+0

Sarebbe bene avere un riferimento incrociato da voi FAQ a qui. Ricordo di aver reinventato quella ruota parecchio tempo. –

+1

Non credo che il Prof. Bates includerebbe questo in 'predicict.lme', ma sarebbe bello se qualche pacchetto potesse fornire questa funzionalità (ovviamente con chiari avvertimenti riguardo le limitazioni statistiche nel file di aiuto). – Roland