2015-12-29 8 views
6

Voglio utilizzare il modello misto lineare e fare previsioni a livello di popolazione (cioè utilizzando solo effetti fissi e usando 0 invece di effetti casuali).lmer: le previsioni a livello di popolazione attivano un errore

Esempio modello:

require(lme4) 

fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy) 
summary(fm1) 
# values for prediction: 
newx <- seq(min(sleepstudy$Days), max(sleepstudy$Days)) 

Ho provato diversi metodi per la previsione a livello di popolazione, ma tutti falliti:

pred <- predict(fm1, newdata = data.frame(Days = newx), allow.new.levels = TRUE) 
# Error: couldn't evaluate grouping factor Subject within model frame: try adding grouping factor to data frame explicitly if possible 

pred <- predict(fm1, newdata = data.frame(Days = newx, Subject = NA), allow.new.levels = TRUE) 
# Error: Invalid grouping factor specification, Subject 

pred <- predict(fm1, newdata = data.frame(Days = newx, Subject = as.factor(NA)), allow.new.levels = TRUE) 
# Error: Invalid grouping factor specification, Subject 

ho cercato di trovare il manuale per il metodo di previsione corretta, ma io non so come? Ho provato a guardare help(package = "lme4") e la funzione più vicina che ho trovato era predict.merMod (sebbene la classe del modello fm1 sia lmerMod non merMod). ?predict.merMod legge:

allow.new.levels (logico) se FALSE (default), allora tutti i nuovi livelli (o valori NA) rilevati nel NewData attiveranno un errore; se TRUE, quindi la previsione userà i valori incondizionati (a livello di popolazione) per i dati con i livelli precedentemente inosservati (o NAS)

si dice espressamente "o NAS", ma a quanto pare non funziona quel modo!!

  1. Sto guardando la pagina di aiuto di un metodo corretto? In caso contrario, qual è il metodo giusto?
  2. Come fare il lavoro di previsione a livello di popolazione?

risposta

8

Siete alla ricerca di re.form:

re.form: formula per effetti casuali a condizione ON. Se "NULL", include tutti gli effetti casuali; se 'NA' o '~ 0', non comprendono effetti casuali

require(lme4) 
fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy) 
newx <- seq(min(sleepstudy$Days), max(sleepstudy$Days)) 
predict(fm1, newdata=data.frame(Days=newx), re.form=NA) 
##  1  2  3  4  5  6  7  8 
## 251.4051 261.8724 272.3397 282.8070 293.2742 303.7415 314.2088 324.6761 
##  9  10 
## 335.1434 345.6107 

Per quanto riguarda le vostre altre domande:

  • merMod è un "super-class" che include sia lineare (lmerMod) e modelli lineari generalizzati (glmerMod): vedere ?"merMod-class"
  • i tuoi secondi due tentativi probabilmente devono avere hanno funzionato; tuttavia, allow.new.levels è stato progettato per i casi con valori occasionali NA, non tutti i valori NA ... predict(fm1, newdata = data.frame(Days = newx, Subject = "a"), allow.new.levels = TRUE) funziona. Sembra che il codice rilevi una colonna all-NA e la interpreti come qualcosa che è andato storto a monte - questo potrebbe essere corretto nel codice, ma non sembra molto prioritario dal momento che lo re.form esiste.
+1

Grazie Ben! Probabilmente è la formulazione dell'aiuto che mi ha confuso: "... condizionare". Non sono madrelingua, per favore cosa significa? Probabilmente questo è solo un testo inglese di certe situazioni con gli effetti casuali? O c'è qualche concetto di "condizione" in lmer o la stessa statistica? Non avevo idea di cosa significasse, quindi probabilmente l'ho trascurato. – TMS

+2

è la terminologia statistica (gergo): "condizionare" qualcosa significa prendere in considerazione il suo valore quando si preannuncia. –

+0

Aha, grande Ben, grazie per la spiegazione! :-) – TMS

Problemi correlati