Ich habe eine Frage, wie besorgt ich über einen möglichen Verstoß gegen die Normalität der Residuenannahme in einem linearen gemischten Modell sein sollte. Ich habe einen relativ kleinen Datensatz und nach dem Anpassen des Modells (unter Verwendung von 'lmer' in R) zeigt ein Shapiro-Wilks-Test eine signifikante Abweichung der Residuen von einer Normalverteilung. Log-Transformationen meiner Variablen behandeln dies nicht zufriedenstellend.
Auf meiner Suche nach einer Antwort, wie ich damit umgehen soll, stieß ich auf den Rat, dass Normalitätstests nicht durchgeführt werden sollten (siehe die Antwort auf eine ähnliche Frage hier) . Stattdessen wird empfohlen, QQ-Diagramme von zufälligen Normaldaten mit demselben N wie meine Residuen durchzuführen, um festzustellen, ob das QQ-Diagramm meiner Residuen deutlich unterschiedlich ist. Andere Ratschläge, die ich gefunden habe, scheinen darauf hinzudeuten, dass die Schlussfolgerung gegenüber verschiedenen Verstößen gegen LMM-Annahmen robust zu sein scheint (siehe Blog-Beitrag hier) .
Meine Fragen
1) Wenn dies Ihre Daten wären, wären Sie besorgt über die mangelnde Normalität der LMM-Residuen (siehe Daten und Ausgabe unten)?
2) Wenn Sie besorgt sind, sind Sie nach der Protokolltransformation immer noch besorgt (siehe Daten und Ausgabe unten)?
3) Wenn die Antwort auf beide oben genannten Fragen "Ja" lautet, wie könnte ich mit der Nichtnormalität meiner Residuen umgehen?
Daten & nicht transformierte Analyse
# load relevant library
library(lme4)
#--- declare the data
study <- c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 6, 6,
7, 7, 8, 8, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 13, 13,
13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 16, 16, 16, 16, 17, 17)
condition <- c(1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1,
2, 2, 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 2, 2, 1, 1)
age <- rep(c(1, 2), times = length(study) / 2)
congruent <- c(937, 611, 1067, 611, 1053, 943, 1097, 1015, 1155, 974, 860, 594,
910, 605, 912, 632, 998, 660, 1989, 1176, 1337, 936, 2657, 1234,
1195, 999, 1010, 634, 1205, 620, 1154, 909, 1425, 1172, 1388,
1084, 641, 407, 1429, 810, 909, 510, 1358, 802, 1132, 639,
1501, 703, 1471, 955, 1342, 631, 1178, 676, 1033, 723)
incongruent <- c(1025, 705, 1204, 705, 1119, 1008, 1184, 1046, 1225, 1013, 1308,
895, 1234, 901, 1204, 854, 1177, 828, 2085, 1269, 1350, 929,
2697, 1231, 1233, 1032, 1062, 679, 1263, 674, 1183, 914, 1458,
1184, 1382, 1086, 632, 424, 1510, 871, 978, 568, 1670, 881,
1395, 747, 1694, 795, 1504, 999, 2112, 948, 1494, 992, 1039,
781)
data <- data.frame(as.factor(study), as.factor(condition), age, congruent,
incongruent)
#--- LMM analysis
# center age
data$age <- scale(data$age, center = TRUE, scale = FALSE)
# fit
fit <- lmer(incongruent ~ congruent + (1|study) + (1|condition),
data = data, REML = FALSE)
# plot & test the residual
qqnorm(resid(fit))
qqline(resid(fit))
shapiro.test(resid(fit))
Shapiro-Wilk normality test
data: resid(fit)
W = 0.74417, p-value = 1.575e-08
Protokolltransformierte Daten
# do the log transform
data$congruent <- log(data$congruent)
data$incongruent <- log(data$incongruent)
# fit again
log_fit <- lmer(incongruent ~ congruent + (1|study) + (1|condition),
data = data, REML = FALSE)
# plot & test the residual
qqnorm(resid(log_fit))
qqline(resid(log_fit))
shapiro.test(resid(log_fit))
Shapiro-Wilk normality test
data: resid(log_fit)
W = 0.93241, p-value = 0.003732
Simulierte Normalverteilungs-QQ-Diagramme
Bei Durchführung dieser empfohlenen Simulation sehen meine logarithmisch transformierten QQ-Diagramme nicht allzu unähnlich zu denen aus, die aus einer echten Normalverteilung mit derselben Stichprobengröße wie meine Daten (N = 52) generiert wurden:
set.seed(42)
par(mfrow = c(3, 3))
for(i in 1:9){
x = rnorm(52)
qqnorm(x)
qqline(x)
}
condition
fester Effekt würde helfen, dann könnten Sie hierarchisches Bootstrapping durchführen (dh Studien mit Ersetzung neu abtasten, dann Werte innerhalb von Studien mit Ersetzung neu abtasten)