线性混合模型中残差假设违反正态性

机器算法验证 混合模式 lme4-nlme
2022-03-05 11:51:21

我有一个问题,关于我应该如何关注线性混合模型中残差假设的正态性可能违反。我有一个相对较小的数据集,在拟合模型后(在 R 中使用“lmer”),Shapiro-Wilks 检验显示残差与正态分布存在显着偏差。我的变量的对数转换不能令人满意地处理这个问题。

在我寻找如何处理这个问题的回应时,我遇到了不应该进行正态性测试的建议(请参阅此处类似问题的答案)相反,建议对具有与我的残差相同的 N 的随机正态数据进行 QQ 图,以查看我的残差的 QQ 图是否明显不同。我发现的其他建议似乎表明推理似乎对各种违反 LMM 假设的行为具有鲁棒性 (请参阅此处的博客文章)

我的问题

1)如果这是您的数据,您是否会担心 LMM 残差缺乏正态性(请参阅下面的数据和输出)?

2)如果您担心,在日志转换后您是否仍然担心(再次,请参阅下面的数据和输出)?

3)如果以上两个答案都是“是”,我该如何处理残差的非正态性?

数据和非转换分析

# 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

非变换 QQ 图

对数转换数据

# 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

对数变换的 QQ 图

模拟正态分布 QQ 图

执行这个推荐的模拟,我的对数转换 QQ 图看起来与真实正态分布生成的 QQ 图并没有太大的不同,其样本量与我的数据相同(N = 52):

set.seed(42)
par(mfrow = c(3, 3))
for(i in 1:9){
  x = rnorm(52)
  qqnorm(x)
  qqline(x)
}

结果图

1个回答

我对您的问题的回答是(1)“是”(我会担心最初的非正态性程度),(2)“否”(对数转换似乎改善了这种情况),(3)不适用(因为我不担心),但如果您担心,可以尝试以下几件事

  • 用于robustlmm::rlmer()进行稳健的 LMM 拟合;
  • 尝试没有给出最极端残差的点的拟合(尝试lattice::qqmath(log_fit,id=0.1,idLabels=~.obs)通过观察数识别它们),看看它是否有很大的不同
  • 尝试另一种转换以更接近常态(尽管我玩了一点,但似乎没有帮助)

我对您的模拟人生(这些例子从肉眼看起来离常态更远)和夏皮罗测试结果(反对常态零假设的相当有力的证据)之间明显的不匹配感到有点惊讶。

其它你可能感兴趣的问题