Wie erhält man den p-Wert (Prüfsignifikanz) eines Effekts in einem lme4-Mischmodell?


56

Ich benutze lme4 in R, um das gemischte Modell zu passen

lmer(value~status+(1|experiment)))

Wo Wert stetig ist, sind Status und Experiment Faktoren, und ich verstehe

Linear mixed model fit by REML 
Formula: value ~ status + (1 | experiment) 
  AIC   BIC logLik deviance REMLdev
 29.1 46.98 -9.548    5.911    19.1
Random effects:
 Groups     Name        Variance Std.Dev.
 experiment (Intercept) 0.065526 0.25598 
 Residual               0.053029 0.23028 
Number of obs: 264, groups: experiment, 10

Fixed effects:
            Estimate Std. Error t value
(Intercept)  2.78004    0.08448   32.91
statusD      0.20493    0.03389    6.05
statusR      0.88690    0.03583   24.76

Correlation of Fixed Effects:
        (Intr) statsD
statusD -0.204       
statusR -0.193  0.476

Woher weiß ich, dass die Auswirkung des Status signifikant ist? R meldet nur Werte und keine p- Werte.tp


1
tH0:β=βnullF

Antworten:


61

Viele Informationen zu diesem Thema finden Sie in den GLMM-FAQ . In Ihrem speziellen Fall würde ich jedoch die Verwendung von vorschlagen

library(nlme)
m1 <- lme(value~status,random=~1|experiment,data=mydata)
anova(m1)

weil Sie keine der angebotenen lmerDinge benötigen (höhere Geschwindigkeit, Umgang mit gekreuzten zufälligen Effekten, GLMMs ...). lmesollte Ihnen genau die gleichen Koeffizienten- und Varianzschätzungen geben, berechnet aber auch df- und p-Werte für Sie (was in einem "klassischen" Design, wie Sie es zu haben scheinen , sinnvoll ist). Möglicherweise möchten Sie auch den zufälligen Begriff berücksichtigen ~status|experiment(der die Variation von Statuseffekten über Blöcke hinweg oder gleichwertig eine Interaktion von Status zu Experiment ermöglicht). Die obigen Poster sind auch richtig, dass Ihre tStatistiken so groß sind, dass Ihr p-Wert definitiv <0,05 ist, aber ich kann mir vorstellen, dass Sie "echte" p-Werte möchten.


3
Ich weiß nichts über diese Antwort. lmerkönnte genauso gut die gleichen Arten von p-Werten melden, aber aus triftigen Gründen nicht. Ich denke, es ist der Kommentar, dass es hier irgendwelche "echten" p-Werte gibt, die mich nerven. Sie könnten argumentieren, dass Sie eine mögliche Grenze finden können und dass jede vernünftige Grenze überschritten wird. Aber man kann nicht behaupten, dass es einen echten p-Wert gibt.
John

11
Für ein klassisches Design (ausgeglichen, verschachtelt usw.) kann ich in der Tat behaupten, dass es eine echte p-vaue gibt, dh eine Wahrscheinlichkeit, eine Schätzung des Beta mit einer beobachteten Größe oder höher zu erhalten, wenn die Nullhypothese (Beta = 0) were false ... Ich glaube, lme4 liefert diesen Nenner df nicht, da es im Allgemeinen schwieriger ist, aus einer lme4-Modellstruktur zu erkennen, wenn das angegebene Modell eines ist, bei dem eine Heuristik zum Berechnen eines klassischen Nenners df funktionieren würde ...
Ben Bolker

versuchen Sie es summary(m1)stattdessen (ich benutze dies mit NLME-Paket)
Jena

36

Sie könnten das Paket lmerTest verwenden . Sie müssen es nur installieren / laden und die älteren Modelle werden erweitert. Also zB

library(lmerTest)
lmm <- lmer(value~status+(1|experiment)))
summary(lmm)
anova(lmm)

würde Ihnen Ergebnisse mit p-Werten geben. Wenn p-Werte die richtige Angabe sind, ist dies ein wenig umstritten, aber wenn Sie sie haben möchten, können Sie sie auf diese Weise erhalten.


28

Wenn Sie die Aufgabe von p-Werten bewältigen können ( und sollten ), können Sie eine Wahrscheinlichkeitsquote berechnen, die das Gewicht der Beweise für die Auswirkung des Status darstellt:

#compute a model where the effect of status is estimated
unrestricted_fit = lmer(
    formula = value ~ (1|experiment) + status
    , REML = F #because we want to compare models on likelihood
)
#next, compute a model where the effect of status is not estimated
restricted_fit = lmer(
    formula = value ~ (1|experiment)
    , REML = F #because we want to compare models on likelihood
)
#compute the AIC-corrected log-base-2 likelihood ratio (a.k.a. "bits" of evidence)
(AIC(restricted_fit)-AIC(unrestricted_fit))*log2(exp(1))

16
Beachten Sie, dass die Wahrscheinlichkeitsverhältnisse asymptotisch sind, dh keine Unsicherheit bei der Schätzung der
Ben Bolker

5
Ihre letzte Zeile interessiert mich. Wie ist die Interpretation des Ergebnisses? Gibt es Quellen, die ich mir ansehen kann?
mguzmann

13

Das Problem ist, dass die Berechnung der p-Werte für diese Modelle nicht trivial ist, siehe Diskussion hier, sodass die Autoren des lme4Pakets absichtlich entschieden haben, keine p-Werte in die Ausgabe aufzunehmen. Möglicherweise finden Sie eine Methode zur Berechnung dieser Werte, diese müssen jedoch nicht korrekt sein.


9

Überlegen Sie, was Sie fragen. Wenn Sie nur wissen möchten, ob der Gesamt-p-Wert für die Auswirkung des Status einen beliebigen Grenzwert (z. B. 0,05) überschreitet, ist das ganz einfach. Zunächst möchten Sie den Gesamteffekt herausfinden. Sie könnten das von bekommen anova.

m <- lmer(...) #just run your lmer command but save the model
anova(m)

Jetzt hast du einen F- Wert. Sie können das in einigen F- Tabellen nachschlagen . Wählen Sie einfach den niedrigstmöglichen Nennwert. Freiheitsgrade. Der Cutoff dort wird bei 20 liegen. Dein F ist vielleicht größer als das, aber ich könnte mich irren. Auch wenn dies nicht der Fall ist, sehen Sie sich hier die Anzahl der Freiheitsgrade von einer herkömmlichen ANOVA-Berechnung anhand der Anzahl der von Ihnen durchgeführten Experimente an. Wenn Sie diesen Wert festhalten, sind Sie für einen Cutoff auf ungefähr 5 gesunken. Jetzt können Sie es problemlos in Ihrem Arbeitszimmer ablegen. Der "wahre" df für Ihr Modell ist etwas höher, da Sie jeden Datenpunkt im Gegensatz zu den von einer ANOVA modellierten aggregierten Werten modellieren.

Wenn Sie tatsächlich einen exakten p-Wert wünschen, gibt es keinen solchen, es sei denn, Sie sind bereit, eine theoretische Aussage darüber zu treffen. Wenn Sie Pinheiro & Bates (2001, und vielleicht noch ein paar Bücher zu diesem Thema ... siehe andere Links in diesen Antworten) lesen und ein Argument für einen bestimmten df finden, können Sie das verwenden. Aber Sie suchen eigentlich sowieso nicht nach einem exakten p-Wert. Ich erwähne dies, weil Sie deshalb keinen exakten p-Wert angeben sollten, sondern nur, dass Ihr Cutoff bestanden wird.

Sie sollten die Antwort von Mike Lawrence wirklich in Betracht ziehen, da die ganze Idee, sich nur an einen Bestätigungspunkt für p-Werte zu halten, als letzte und wichtigste Information, die aus Ihren Daten extrahiert werden soll, in der Regel falsch ist (aber möglicherweise nicht in Ihrem Fall, da wir dies nicht tun). t wirklich genug Informationen zu wissen). Mike verwendet eine Pet-Version der LR-Berechnung, die interessant ist, aber es kann schwierig sein, eine Menge Dokumentation zu finden. Wenn Sie sich mit Modellauswahl und -interpretation unter Verwendung von AIC befassen, wird es Ihnen gefallen.


9

Bearbeiten: Diese Methode wird in neueren Versionen von lme4 nicht mehr unterstützt. Verwenden Sie das lmerTest-Paket, wie in dieser Antwort von pbx101 vorgeschlagen .

Es gibt einen Beitrag auf der R-Liste des Autors von lme4, warum p-Werte nicht angezeigt werden. Er schlägt vor, stattdessen MCMC-Beispiele zu verwenden. Verwenden Sie dazu die Datei pvals.fnc aus dem Paket languageR:

library("lme4")
library("languageR")
model=lmer(...)
pvals.fnc(model)

Ein Beispiel und Details finden Sie unter http://www2.hawaii.edu/~kdrager/MixedEffectsModels.pdf .


3
lme4 unterstützt dies nicht mehr. Dieser Beitrag könnte aktualisiert werden, um Menschen zu ersparen, die dies herausfinden müssen, wie ich es gerade getan habe.
timothy.s.lau

5

Sind Sie daran interessiert zu wissen, ob die kombinierte Wirkung von statuseinen signifikanten Effekt hat value? In diesem Fall können Sie die AnovaFunktion im carPaket verwenden (nicht zu verwechseln mit der anovaFunktion in base R).

dat <- data.frame(
  experiment = sample(c("A","B","C","D"), 264, replace=TRUE), 
  status = sample(c("D","R","A"), 264, replace=TRUE), 
  value = runif(264)   
)
require(lme4)
(fm <- lmer(value~status+(1|experiment), data=dat))

require(car)
Anova(fm)

Schauen Sie sich an, ?Anovanachdem Sie das carPaket geladen haben.


Irgendeine Idee, wie man car::Anova()die klebrigen Probleme bei der Berechnung von p-Werten vermeidet, die Michelle verknüpft?
Mike Lawrence

Ich tue nicht, aber meine Vermutung ist, dass es die klebrigen Ausgaben vermeidet, indem es sie ignoriert! Nachdem ich den ursprünglichen Beitrag noch einmal gelesen habe, habe ich das Gefühl, dass ich die Frage falsch verstanden habe. Wenn das OP genaue p-Werte für die festen Effektparameter wünscht, ist es in Schwierigkeiten. Aber wenn das OP nur wissen will, ob sie signifikant sind, sind die t-Werte meiner Meinung nach größer als jede Unsicherheit darüber, wie der genaue p-Wert berechnet werden würde. (Mit anderen Worten, sie sind bedeutend.)
Smillig

1
Ich denke, es war definitiv eine gute Idee, zu einer ANOVA-Berechnung umzuleiten, um den Gesamteffekt von Statistiken herauszufinden, aber ich bin nicht sicher, ob es gut ist, die p-Werte zu verfeinern. Der reguläre anovaBefehl gibt Ihnen F's.
John

Ich denke, das ist ein bisschen klebriger als anscheinend. Das Ausführen von ANOVAs ist gültig, wenn Sie die Varianz minimieren möchten, aber ausgehend von der Fragestellung denke ich, dass OP die marginale Wirkung von Variablen ermitteln möchte, dh Testkoeffizienten gegen eine Null.
Firebug

0

Die Funktion pvals.fncwird von lme4 nicht mehr unterstützt. Mit dem Paket lmerTest können andere Methoden zur Berechnung des p-Werts verwendet werden, z. B. die Kenward-Roger-Näherungen

model=lmer(value~status+1|experiment)
anova(model, ddf="Kenward-Roger")

0

Durch einfaches Laden des afex-Pakets werden die p-Werte in der Ausgabe der lmer-Funktion aus dem lme4-Paket gedruckt (Sie müssen das afex nicht verwenden; laden Sie es einfach):

library(lme4)  #for mixed model
library(afex)  #for p-values

Dies fügt automatisch eine p-Wert-Spalte für die festgelegten Effekte zum Ausgang des Filmers (Ihres Modells) hinzu.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.