Ich habe mit Daten gearbeitet, die Probleme mit wiederholten Messungen haben. Dabei habe ich ein sehr unterschiedliches Verhalten zwischen lme()
und unter lmer()
Verwendung meiner Testdaten festgestellt und möchte wissen warum.
Der von mir erstellte gefälschte Datensatz enthält Größen- und Gewichtsmessungen für 10 Probanden, die jeweils zweimal durchgeführt wurden. Ich habe die Daten so eingestellt, dass zwischen den Probanden eine positive Beziehung zwischen Größe und Gewicht besteht, aber eine negative Beziehung zwischen den wiederholten Messungen innerhalb jedes einzelnen.
set.seed(21)
Height=1:10; Height=Height+runif(10,min=0,max=3) #First height measurement
Weight=1:10; Weight=Weight+runif(10,min=0,max=3) #First weight measurement
Height2=Height+runif(10,min=0,max=1) #second height measurement
Weight2=Weight-runif(10,min=0,max=1) #second weight measurement
Height=c(Height,Height2) #combine height and wight measurements
Weight=c(Weight,Weight2)
DF=data.frame(Height,Weight) #generate data frame
DF$ID=as.factor(rep(1:10,2)) #add subject ID
DF$Number=as.factor(c(rep(1,10),rep(2,10))) #differentiate between first and second measurement
Hier ist ein Diagramm der Daten mit Linien, die die beiden Messungen von jedem einzelnen verbinden.
Also lief ich zwei Modelle, eines mit lme()
aus dem nlme
Paket und eines mit lmer()
aus lme4
. In beiden Fällen führte ich eine Regression des Gewichts gegen die Größe mit einem zufälligen ID-Effekt durch, um die wiederholten Messungen jedes Individuums zu kontrollieren.
library(nlme)
Mlme=lme(Height~Weight,random=~1|ID,data=DF)
library(lme4)
Mlmer=lmer(Height~Weight+(1|ID),data=DF)
Diese beiden Modelle führten häufig (wenn auch nicht immer abhängig von der Saat) zu völlig unterschiedlichen Ergebnissen. Ich habe gesehen, wo sie leicht unterschiedliche Varianzschätzungen erzeugen, unterschiedliche Freiheitsgrade berechnen usw., aber hier sind die Koeffizienten in entgegengesetzte Richtungen.
coef(Mlme)
# (Intercept) Weight
#1 1.57102183 0.7477639
#2 -0.08765784 0.7477639
#3 3.33128509 0.7477639
#4 1.09639883 0.7477639
#5 4.08969282 0.7477639
#6 4.48649982 0.7477639
#7 1.37824171 0.7477639
#8 2.54690995 0.7477639
#9 4.43051687 0.7477639
#10 4.04812243 0.7477639
coef(Mlmer)
# (Intercept) Weight
#1 4.689264 -0.516824
#2 5.427231 -0.516824
#3 6.943274 -0.516824
#4 7.832617 -0.516824
#5 10.656164 -0.516824
#6 12.256954 -0.516824
#7 11.963619 -0.516824
#8 13.304242 -0.516824
#9 17.637284 -0.516824
#10 18.883624 -0.516824
Zur Veranschaulichung modellieren Sie mit lme()
Und Modell mit lmer()
Warum weichen diese Modelle so stark voneinander ab?
quelle
Antworten:
tl; dr , wenn Sie den Optimierer „nloptwrap“ ändern Ich denke , es diese Probleme vermeiden wird (wahrscheinlich).
Herzlichen Glückwunsch, Sie haben eines der einfachsten Beispiele für mehrere Optima in einem statistischen Schätzungsproblem gefunden! Der Parameter,
lme4
der intern verwendet wird (daher zur Veranschaulichung zweckmäßig), ist die skalierte Standardabweichung der zufälligen Effekte, dh die gruppeninterne Standardabweichung geteilt durch die verbleibende Standardabweichung .Extrahieren Sie diese Werte für das Original
lme
undlmer
passen:Mit einem anderen Optimierer nachrüsten (dies wird wahrscheinlich die Standardeinstellung in der nächsten Version von sein
lme4
):Übereinstimmungen
lme
... mal sehen, was los ist. Die Abweichungsfunktion (-2 * log Likelihood) oder in diesem Fall die analoge REML-Kriteriumsfunktion für LMMs mit einem einzelnen Zufallseffekt verwendet nur ein Argument, da die Parameter für feste Effekte mit Profilen versehen sind . Sie können automatisch für einen bestimmten Wert der RE-Standardabweichung berechnet werden.Ich fuhr fort , weiter über diese besessen und lief die Anfälle für zufällige Samen von 1 bis 1000, passend
lme
,lmer
undlmer
+ nloptwrap für jeden Fall. Hier sind die Zahlen von 1000, bei denen eine bestimmte Methode Antworten erhält, die mindestens 0,001 Abweichungseinheiten schlechter sind als bei einer anderen ...Mit anderen Worten: (1) Es gibt keine Methode, die immer am besten funktioniert. (2)
lmer
mit dem Standardoptimierer ist am schlechtesten (scheitert etwa 1/3 der Zeit); (3)lmer
mit "nloptwrap" ist am besten (schlechter alslme
4% der Zeit, selten schlechter alslmer
).Ein bisschen beruhigend finde ich, dass diese Situation für kleine, falsch spezifizierte Fälle wahrscheinlich am schlimmsten ist (dh der verbleibende Fehler ist hier eher einheitlich als normal). Es wäre interessant, dies systematischer zu untersuchen ...
quelle