2015-12-29 5 views
6

Ich möchte lineares gemischtes Modell verwenden und Vorhersagen auf Populationsebene treffen (d. H. Nur feste Effekte verwenden und 0 anstelle von zufälligen Effekten verwenden).lmer: Vorhersagen auf Populationsebene lösen einen Fehler aus

Beispiel Modelle:

require(lme4) 

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

habe ich versucht, verschiedene Methoden der Vorhersage auf Bevölkerungsebene, aber sie alle sind gescheitert:

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 

Ich habe versucht, das Handbuch für die richtige Vorhersage-Methode zu finden, aber ich Weiß nicht wie? Ich habe versucht, help(package = "lme4") zu betrachten und die nächste Funktion, die ich fand, war predict.merMod (obwohl die Klasse des Modells fm1 ist lmerMod nicht merMod). ?predict.merMod lautet:

allow.new.levels (logische) wenn FALSE (Standard), wird jedes neue Ebenen (oder NA-Werte) in newdata detektiert einen Fehler auslösen; wenn TRUE, dann wird die Vorhersage verwenden, um die bedingungslosen (Bevölkerungsebene) Werte für Daten mit zuvor nicht beobachteten Niveaus (oder NAs)

Er sagt ausdrücklich „oder NAs“, aber es funktioniert anscheinend nicht funktioniert dieser Weg!!

  1. Betrachte ich die Hilfeseite einer geeigneten Methode? Wenn nicht, was ist die richtige Methode?
  2. Wie funktioniert die Vorhersage auf der Populationsebene?

Antwort

8

Sie suchen re.form:

re.form: Formel für zufällige Effekte auf aufzubereiten. Wenn 'NULL', alle zufälligen Effekte enthalten; wenn 'NA' oder '~ 0', enthalten keine zufällige Effekte

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 

Was Ihre anderen Fragen:

  • merMod ist ein "Super-Klasse", die sowohl lineare enthält (lmerMod) und verallgemeinerte lineare (glmerMod) Modelle: siehe ?"merMod-class"
  • Ihre zweite zwei Versuche wahrscheinlich sollte haben gearbeitet; allow.new.levels wurde jedoch für Fälle mit gelegentlichen NA Werten entwickelt, nicht alle Werte ... predict(fm1, newdata = data.frame(Days = newx, Subject = "a"), allow.new.levels = TRUE) funktioniert. Es sieht so aus, als ob der Code eine All-NA-Spalte entdeckt und sie als etwas interpretiert, das stromaufwärts falsch gelaufen ist - dies könnte im Code behoben werden, scheint aber keine sehr hohe Priorität zu haben, da re.form existiert.
+1

Danke Ben! Es ist wahrscheinlich die Formulierung in der Hilfe, die mich verwirrte: "... um zu konditionieren.". Ich bin kein Muttersprachler, bitte, was das bedeutet? Wahrscheinlich ist das nur eine englische Formulierung einer bestimmten Situation mit den zufälligen Effekten? Oder ist es in Imer oder der Statistik selbst ein "Condition" -Konzept? Ich hatte keine Ahnung, was das bedeutet, also habe ich es wahrscheinlich übersehen. – TMS

+2

es ist statistische Terminologie (Jargon): "Konditionierung auf" bedeutet, seinen Wert bei der Vorhersage zu berücksichtigen. –

+0

Aha, großer Ben, danke für Erklärung! :-) – TMS