Ich analysiere einige Verhaltensdaten mit lme4
in R
, hauptsächlich nach Bodo Winters hervorragenden Tutorials , aber ich verstehe nicht, ob ich mit Interaktionen richtig umgehe. Schlimmer noch, niemand anderes, der an dieser Forschung beteiligt ist, verwendet gemischte Modelle. Ich bin also ein bisschen treibend, wenn es darum geht, sicherzustellen, dass die Dinge richtig sind.
Anstatt nur um Hilfe zu rufen, dachte ich, ich sollte mein Bestes geben, um das Problem zu interpretieren, und dann um Ihre kollektiven Korrekturen bitten. Einige andere Nebeneffekte sind:
- Während des Schreibens habe ich diese Frage gefunden , die zeigt, dass
nlme
direkter p-Werte für Interaktionsterme angegeben werden, aber ich denke, es ist immer noch gültig, in Bezug auf zu fragenlme4
. Livius'
Die Antwort auf diese Frage lieferte Links zu vielen zusätzlichen Lektüren, die ich in den nächsten Tagen durcharbeiten werde. Daher werde ich alle Fortschritte kommentieren, die sich daraus ergeben.
In meinen Daten habe ich eine abhängige Variable dv
, eine condition
Manipulation (0 = Kontrolle, 1 = experimentelle Bedingung, die zu einer höheren führen sollte dv
) und auch eine Voraussetzung mit der Bezeichnung appropriate
: Versuche, die dafür codiert sind, 1
sollten den Effekt zeigen, aber Versuche, die codiert werden 0
könnten nicht, weil ein entscheidender Faktor fehlt.
Ich habe auch zwei zufällige Abschnitte für subject
und für target
reflektierte dv
Werte in jedem Subjekt und in jedem der 14 gelösten Probleme aufgenommen (jeder Teilnehmer löste sowohl eine Kontroll- als auch eine experimentelle Version jedes Problems).
library(lme4)
data = read.csv("data.csv")
null_model = lmer(dv ~ (1 | subject) + (1 | target), data = data)
mainfx_model = lmer(dv ~ condition + appropriate + (1 | subject) + (1 | target),
data = data)
interaction_model = lmer(dv ~ condition + appropriate + condition*appropriate +
(1 | subject) + (1 | target), data = data)
summary(interaction_model)
Ausgabe:
## Linear mixed model fit by REML ['lmerMod']
## ...excluded for brevity....
## Random effects:
## Groups Name Variance Std.Dev.
## subject (Intercept) 0.006594 0.0812
## target (Intercept) 0.000557 0.0236
## Residual 0.210172 0.4584
## Number of obs: 690, groups: subject, 38; target, 14
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 0.2518 0.0501 5.03
## conditioncontrol 0.0579 0.0588 0.98
## appropriate -0.0358 0.0595 -0.60
## conditioncontrol:appropriate -0.1553 0.0740 -2.10
##
## Correlation of Fixed Effects:
## ...excluded for brevity.
ANOVA zeigt interaction_model
dann eine signifikant bessere Anpassung als mainfx_model
, woraus ich schließe, dass eine signifikante Wechselwirkung vorliegt (p = 0,035).
anova(mainfx_model, interaction_model)
Ausgabe:
## ...excluded for brevity....
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mainfx_model 6 913 940 -450 901
## interaction_model 7 910 942 -448 896 4.44 1 0.035 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Von dort isoliere ich eine Teilmenge der Daten, für die die appropriate
Anforderung erfüllt ist (dh appropriate = 1
), und passe dafür ein Nullmodell und ein Modell an, das condition
als Effekt enthält, vergleiche die beiden Modelle erneut mit ANOVA und siehe, finde das condition
ist ein signifikanter Prädiktor.
good_data = data[data$appropriate == 1, ]
good_null_model = lmer(dv ~ (1 | subject) + (1 | target), data = good_data)
good_mainfx_model = lmer(dv ~ condition + (1 | subject) + (1 | target), data = good_data)
anova(good_null_model, good_mainfx_model)
Ausgabe:
## Data: good_data
## models:
## good_null_model: dv ~ (1 | subject) + (1 | target)
## good_mainfx_model: dv ~ condition + (1 | subject) + (1 | target)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## good_null_model 4 491 507 -241 483
## good_mainfx_model 5 487 507 -238 477 5.55 1 0.018 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
quelle
lme4
: stats.stackexchange.com/questions/118416/…Antworten:
Ich sehe hier nicht zu viel zu sagen. Ich denke, Sie haben gute Arbeit geleistet.
Es gibt verschiedene Möglichkeiten, die diskutiert wurden, um Effekte zu testen und p-Werte für komplizierte Modelle mit gemischten Effekten zu erhalten. Es gibt einen guten Überblick hier . Am besten verwenden Sie rechenintensive Methoden (Bootstrapping oder Bayes'sche Methoden), die jedoch für die meisten Menschen weiter fortgeschritten sind. Die zweitbeste (und bequemste) Methode ist die Verwendung eines Likelihood-Ratio-Tests. Das macht
anova()
(technisch ? Anova.merMod () ). Es ist wichtig, nur einen Likelihood-Ratio-Test für Modelle zu verwenden, die mit der vollen maximalen Wahrscheinlichkeit übereinstimmen , und nicht die eingeschränkte maximale Wahrscheinlichkeit(REML). Auf der anderen Seite möchten Sie für Ihr endgültiges Modell und für die Interpretation REML verwenden. Dies ist für viele Menschen verwirrend. In Ihrer Ausgabe sehen wir, dass Sie Ihre Modelle mit REML anpassen (dies liegt daran, dass die OptionTRUE
standardmäßig in aktiviert ist. Dieslmer()
würde bedeuten, dass Ihr Test ungültig ist, da dies jedoch ein so häufiger Fehler ist undanova.merMod()
einrefit
Argument enthält , das von Die Standardeinstellung ist eingestelltTRUE
, und Sie haben sie nicht geändert. Die Voraussicht der Paketentwickler hat Sie dort gespeichert.In Bezug auf Ihre Strategie zum Auspacken der Interaktion ist das, was Sie getan haben, in Ordnung. Denken Sie daran, dass die Interaktion alle Daten für ihren Test verwendet. Es ist möglich, eine signifikante Interaktion zu haben, aber keiner der geschichteten Tests ist signifikant, was einige Leute verwirrt. (Es scheint dir aber nicht passiert zu sein.)
quelle
Ich bin selbst ein Neuling und folge den Ratschlägen von Zuur et al. Ich verwende sie
lme
aus demnlme
Paket, anstattlme4
einem ansonsten linearen Modell eine hierarchische Fehlerstruktur hinzuzufügen. Meine Antwort könnte weit weg sein.Zwei Kommentare:
(1) Ich bin nicht sicher, ob es sinnvoll ist, nur dann
condition
in der Teilmenge zu testenappropriate==1
. Wenn Sie p-Werte für die Haupteffekte erhalten möchten, können Sie dieseAnova
aus dem 'Auto'-Paket verwenden:Wenn Sie die Interaktion auflösen möchten, können Sie gepaarte Vergleiche direkt (?) Ausführen oder das tun, was Sie getan haben, jedoch für beide Teilmengen (dh auch für die Teilmenge wo
appropriate==0
).(2) Möglicherweise möchten Sie zuerst Ihre Fehlerstruktur auswählen, anstatt davon auszugehen, dass dies
(1 | subject) + (1 | target)
die beste Fehlerstruktur ist. Nach dem, was Sie geschrieben haben,condition
ist dies ein Faktor innerhalb des Subjekts, währendappropriate
es sich entweder um einen Zwischensubjekt- oder einen Zwischenzielfaktor handelt. Möglicherweise möchten Sie Steigungen für Faktoren innerhalb des Subjekts und / oder innerhalb des Zielsdv ~ condition + appropriate + (1+condition | subject) + (1 | target)
hinzufügen , z. B.: Fügt eine zufällige Steigung für den Faktor innerhalb des Subjekts hinzucondition
. Für Faktoren zwischen Subjekten / Zielen sind keine Steigungen erforderlich.Prost
quelle
Anova
einfach so tun, als ob die Korrelationen zwischen Subjekt und Ziel nicht vorhanden wären? Der Grund, warum ich die Analyse nur mit Daten wiederhole,appropriate==1
ist, dass sich gezeigt hat, dass einige der verwendeten Materialien nach dem Test problematisch und daher „unangemessen“ sind. Schließlich habe ich keine zufälligen Steigungen verwendet, weil das Modell ohne sie besser passt.