R lmerTest und Tests mehrerer zufälliger Effekte

8

Ich bin gespannt, wie das lmerTest-Paket in R, insbesondere die "rand" -Funktion, Tests mit zufälligen Effekten verarbeitet. Betrachten Sie das Beispiel aus dem lmerTest-PDF auf CRAN, das den integrierten Datensatz "Karotten" verwendet:

#import lme4 package and lmerTest package
  library(lmerTest)
#lmer model with correlation between intercept and slopes
#in the random part
  m <- lmer(Preference ~ sens2+Homesize+(1+sens2|Consumer), data=carrots)
# table with p-values for the random effects
  rand(m)

Das Modell spezifiziert zwei zufällige Varianzen (den Achsenabschnitt und "sens2"), die beide in "Consumer" verschachtelt sind, und die Kovarianz zwischen dem Achsenabschnitt und "sens2". Die Ausgabe (im PDF nicht angegeben) für die zufälligen Komponenten aus dem früheren Lauf lautet wie folgt:

Random effects:
Groups   Name        Variance Std.Dev. Corr
Consumer (Intercept) 0.195168 0.44178      
         sens2       0.002779 0.05271  0.18
Residual             1.070441 1.03462      
Number of obs: 1233, groups:  Consumer, 103

Was angesichts der Modellspezifikation erwartet wird. Die Ausgabe der Rand-Funktion folgt:

Analysis of Random effects Table:
                 Chi.sq Chi.DF p.value  
sens2:Consumer   6.99      2    0.03 *
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Angesichts der Tabelle mit zufälligen Effekten bewertet lmerTest die zufällige Steigung für "sens2", aber es könnte auch die Kovarianz zwischen Steigung und Achsenabschnitt sein. Der Test für den zufälligen Schnittpunkt ist nicht enthalten. Ich schätzte ein anderes Modell nur mit dem zufälligen Achsenabschnitt (keine zufällige Steigung oder Kovarianz) und erhielt aus der "rand" -Anweisung Folgendes:

Analysis of Random effects Table:
           Chi.sq Chi.DF p.value    
Consumer   79.6      1  <2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Der Test für die zufällige Varianz, die mit dem Achsenabschnitt verbunden ist, wird hier bereitgestellt. Weiß jemand, was der Test der zufälligen Varianzkomponenten aus dem ersten Modell testet? Gibt es eine Möglichkeit, die ich in der Dokumentation nicht sehen kann, um alle drei zufälligen Komponenten zu testen? Ich sollte erwähnen, dass die Seite für den Rand-Test auf inside-R.org die folgende verwirrende Beschreibung enthält (die ich im PDF auf CRAN nicht sehe):

Values
Produces a data frame with tests for the random terms being non-significant.

Note
If the effect has random slopes, then first the correlations between itercept [sic] and slopes are checked for significance

Ist es möglich, dass die Beschreibung "Werte" es rückwärts hat und dass nur signifikante Effekte gemeldet werden? Ich habe das "Schritt" -Verfahren ausgeführt und es war nicht klar, ob alle drei zufälligen Varianzkomponenten im Lauf berücksichtigt wurden.

Jeder Einblick in die Angelegenheit wird sehr geschätzt.

Joe

EDIT: Die Handlung verdickt sich etwas. Es wurde mir klar, dass ich eine "diagonale" Kovarianzstruktur (keine Kovarianz zwischen dem zufälligen Achsenabschnitt und der Steigung) mithilfe der folgenden Informationen überprüfen sollte (basierend auf diesem ausgezeichneten Beitrag ):

m2 <- lmer(Preference ~ sens2+Homesize+(1|Consumer)+(0+sens2|Consumer), data=carrots)

Die lmer-Ausgabe für die zufälligen Varianzen unter Verwendung von VarCorr ist wie folgt:

Groups     Name        Std.Dev.
Consumer   (Intercept) 0.441807
Consumer.1 sens2       0.052719
Residual               1.034618

Was die Kovarianz (Korrelation) zwischen der zufälligen Steigung und dem Achsenabschnitt korrekt weglässt. Das Ausführen der "rand" -Funktion von lmerTest erzeugt die folgende Ausgabe:

Analysis of Random effects Table:
                 Chi.sq Chi.DF p.value    
Consumer         84.4      1  <2e-16 ***
sens2:Consumer    6.3      1    0.01 *  
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Daher werden die beiden Varianzkomponenten für dieses Modell getestet. Es bleibt jedoch die Frage nach dem ersten Modell mit der zufälligen Kovarianz. Was ist lmerTest testen?

BBJonz
quelle

Antworten:

2

Die Dokumentation zur lmerTest::rand()Funktion ist definitiv knapp.

Nach dem, was ich sammeln konnte, testet es meiner Meinung nach die Hypothese, dass die zufällige Effektvariation (dh ein variierender Achsenabschnitt (1 | Consumer) ) signifikant ist, gegenüber der Null, dass es keine Variation zwischen Gruppenebene gibt, , wobei für der Gruppenindikator ist. (Ich folge der Notation von Gelman & Hill (2007), siehe Kapitel 12).H.0::σα2=0αj[ich]]N.(μα,σα2)j=1,,J.


Ich bin kein Experte, daher hat mich der Code ein bisschen verwirrt. Insbesondere ist mir nicht klar, was die elimRandEffsFunktion tut, aber ich würde vermuten, dass sie in einen festen (gepoolten) Begriff konvertiert und diesen dann mit dem Originalmodell vergleicht. Hoffentlich kann jemand mit größerem Wissen dies klären.αj[ich]]α

Auf der theoretischen Seite randmuss so etwas wie der in Lee und Braun 2012 vorgeschlagene Test durchgeführt werden . Im Gegensatz zu ihrer Erweiterung auf das Testen von zufälligen Effekten gleichzeitig (Abschnitt 3.2) scheint die Ausgabe jedoch jeweils nur einen zufälligen Effekt zu testen. Eine einfachere Zusammenfassung derselben Idee finden Sie in den Folien 10-12, die Sie hier finden .0<rqrand


Ihre Intuition, dass der "lmerTest die zufällige Steigung für 'sens2' [und] bewertet, könnte auch die Kovarianz zwischen Steigung und Achsenabschnitt sein", ist in diesen randTests richtig, wenn die zufälligen Effektvarianzen signifikant von Null abweichen.

Es ist jedoch falsch zu sagen, dass "der Test für den zufälligen Abschnitt nicht enthalten ist". Der RE in Ihrer ersten Spezifikation:

 (1 + sens2 | Consumer) 

annimmt ungleich Null Korrelation zwischen dem Achsenabschnitt und die Neigung, das heißt , sie variieren zusammen und so rand()Versuche , daß Spezifikation gegen einen kein Modell RE (dh zur klassischen Regressions reduzierend).

Die zweite Spezifikation

 (1  | Consumer) + (0 + sens2 | Consumer) 

ergibt zwei Ausgabezeilen, da die zufälligen Effekte additiv trennbar sind. Hier randwird (in der 1. Ausgabezeile) ein Modell mit einem gepoolten / festen Achsenabschnitt mit einer zufälligen Steigung anhand Ihrer Spezifikation getestet. In der 2. Reihe ist der Test gegen einen Pool, der mit einem zufälligen Achsenabschnitt geneigt ist. So werden wie bei der stepFunktion randunabhängige REs einzeln getestet.

Ich bin immer noch verwirrt von inside-R.org

  Note
  If the effect has random slopes, then first the correlations between itercept [sic] and slopes are checked for significance

Das steht nicht in der Paketdokumentation, daher weiß ich nicht, woher es kommt und wo ein solcher Test in der Ausgabe zu finden ist.

BEARBEITEN

Ich glaube, ich irre mich in Bezug auf das Nullmodell in einem korrelierten Steigungs- / Schnittmodell wie in der ersten Spezifikation. Die stepDokumentation sagt:

Wenn im zufälligen Teil eine Korrelation zwischen Steigung und Achsenabschnitt vorliegt, enthält das vereinfachte Modell nur einen Achsenabschnitt. Das heißt, wenn der zufällige Teil des Anfangsmodells (1 + c | f) ist, wird dieses Modell unter Verwendung von LRT mit (1 | f) verglichen.

Ich stelle mir vor, dass für dasselbe Prinzip gilt rand.

Tony Beans
quelle
1

Die lmerTest-Dokumentation beschreibt rand()das Nachgeben

"... ein Vektor der Chi-Quadrat-Statistik und entsprechende p-Werte von Likelihood-Ratio-Tests."

Daher glaube ich, dass es sich um einen Likelihood-Ratio-Test handelt. Das ist einfach der Vergleich eines Modells mit einem bestimmten zufälligen Effekt mit demselben Modell ohne den zufälligen Effekt.

In Bezug auf das Beispiel rand()vergleicht das Modell mit einer Steigung von zufälliger SENS2 innerhalb Consumer auf ein Modell mit dem zufälligen Abschnitt von Consumer .

Berechnen Sie die beiden Modelle:

m <- lmer(Preference ~ sens2+Homesize+(1+sens2|Consumer), data=carrots, REML = FALSE)
m2 <- lmer(Preference ~ sens2+Homesize+(1|Consumer), data=carrots, REML = FALSE)

Untersuchen Sie die Ausgabe von rand(m):

rand(m)
Analysis of Random effects Table:
           Chi.sq Chi.DF p.value  
sens2:Consumer   6.99      2    0.03 *

Führen Sie einen Likelihood-Ratio-Test durch, bei dem Modell m mit Modell m2 verglichen wird :

anova(m, m2, test = "Chi")
   Df  AIC    BIC    logLik  deviance  Chisq   Chi Df Pr(>Chisq)  
m   5 3751.4 3777.0 -1870.7   3741.4                           
m2  7 3748.7 3784.5 -1867.4   3734.7   6.6989    2     0.0351 *

In der Tat ist der anova() Chisq etwas kleiner als der von rand(m), aber ansonsten ist die Ausgabe im Wesentlichen identisch. Vielleicht ist meine Interpretation ungenau, aber ich habe immer angenommen, dass die rand()Funktion auf diese Weise ihre Ausgabe generiert hat.

JMB
quelle