为什么这个线性混合模型是奇异的?

机器算法验证 r 混合模式 lme4-nlme 重复测量 随机效应模型
2022-03-22 16:39:48

我试图理解为什么当线性混合效应模型拟合到下面的数据时我得到一个奇异的拟合。

我使用了 R lme4::lmer,模型非常简单,只有截距作为固定效应,因子变量作为随机。

这是数据集(可以复制并粘贴到 R)

data <- read.table(text= "
    group_id     y
           1  6.38
           1 10.83
           1 13.25
           1  2.96
           1 11.29
           1 11.52
           1  8.28
           1  8.36
           1  8.31
           1  7.33
           2  8.57
           2  7.00
           2  7.67
           2 10.19
           2 12.88
           2  9.67
           2  8.47
           2  7.27
           2  7.49
           2 17.25
           3 10.40
           3  8.53
           3  8.68
           3 11.38
           3  7.92
           3  5.66
           3 11.72
           3  6.93
           3  9.95
           3  7.19
           4 13.31
           4  8.57
           4  7.87
           4  8.50
           4  5.11
           4  6.50
           4  3.46
           4  5.98
           4  9.12
           4  8.60
           5 14.35
           5  6.79
           5  7.43
           5  9.16
           5  7.02
           5  7.09
           5  6.68
           5  6.24
           5  8.43
           5  8.51", 
    header= TRUE, colClasses= c('factor', 'numeric'))

这是拟合模型:

library(lme4)

fit <- lmer(data= data, y ~ 1 + (1|group_id))

boundary (singular) fit: see ?isSingular      <<<<<< 


summary(fit)
Linear mixed model fit by REML ['lmerMod']
Formula: y ~ 1 + (1 | group_id)
   Data: data

REML criterion at convergence: 239

Scaled residuals: 
   Min     1Q Median     3Q    Max 
-2.139 -0.604 -0.093  0.467  3.242 

Random effects:
 Groups   Name        Variance Std.Dev.
 group_id (Intercept) 0.00     0.00    
 Residual             7.05     2.66    
Number of obs: 50, groups:  group_id, 5

Fixed effects:
            Estimate Std. Error t value
(Intercept)    8.641      0.376      23
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see ?isSingular

帮助isSingular说,方差 - 协方差矩阵的一些“维度”已被估计为零,我想在数据中看到为什么会发生这种情况。

1个回答

正如您所发现的,当方差分量之一被估计为零时,就会发生这种情况。这通常有以下两种解释之一:

  • 随机效应结构过拟合——通常是因为随机斜率太多

  • 多个方差分量之一实际上非常接近于零,并且没有足够的数据来估计它高于零。

显然,第一种情况与您的数据不同,因为您只有随机截取。

因此,随机截距的实际变化很可能group_id非常接近于零。如果是,那么只有 5 个组,软件可能无法估计零以上的方差。

如果通过绘制数据,这是一个很好的起点:

在此处输入图像描述

我们已经可以看到,与组内的变化相比,组均值的变化很小。

我们可以通过三种方式(至少)更正式地对此进行调查:

首先,让我们看一下每组数据的均值:

library(tidyverse)
data %>% group_by(group_id) %>% summarize(mean = mean(y))

## 1         8.85
## 2         9.65
## 3         8.84
## 4         7.70
## 5         8.17

请注意,所有组之间的差异很小,但请注意第 1 组和第 3 组的平均值几乎相同。让我们删除第 1 组,看看会发生什么:

data %>% filter(group_id != 1) %>% lmer(y ~ 1 + (1|group_id), data = .) %>% summary()

## Random effects:
##  Groups   Name        Variance Std.Dev.
##  group_id (Intercept) 0.03789  0.1947  
##  Residual             6.75636  2.5993  
## Number of obs: 40, groups:  group_id, 4

## Fixed effects:
##             Estimate Std. Error t value
## (Intercept)   8.5885     0.4224   20.34

所以模型收敛没有奇异性,但方差分量group_id非常小,正如我们所怀疑的那样。

接下来,我们可以为group_id组件添加一些额外的方差。这样做的问题在于,只有 5 个组,如果我们要从rnorm(5, 0, 1)(标准差为 1)中抽取 5 个观察值,样本标准差可能不会接近 1,而平均值可能不会接近接近于零。解决这个问题的一个好方法是使用蒙特卡罗模拟(基本上只需多次进行并取平均值)。

在这里,我们将进行 100 次模拟:

n.sim <- 100
simvec_rint <- numeric(n.sim)  # vector to hold the random intercepts variances
simvec_fint <- numeric(n.sim)  # vector to hold the fixed intercepts

for (i in 1:n.sim) {
  set.seed(i)
  data$y1 = data$y + rep(rnorm(5, 0, 1), each = 10)
  m0 <- lmer(y1 ~ 1 + (1|group_id), data = data)

  if (!isSingular(m0)) {
    # If the model is not singular then extract the random and fixed effects
    VarCorr(m0) %>% as.data.frame() %>% pull(vcov) %>% nth(1) -> simvec_rint[i]
    summary(m0) %>% coef() %>% as.vector() %>% nth(1) -> simvec_fint[i]
  } else {
    simvec_rint[i] <- simvec_fint[i] <- NA
  }
}

因此,我们向方差为 1 的组添加了随机噪声。蒙特卡罗估计值为:

> mean(simvec_rint, na.rm = TRUE)
[1] 1.116416
> mean(simvec_fint, na.rm = TRUE)
[1] 8.637063

注意:

  • 随机截距的方差为 1.12。然而,我们已经向等于 1 的组添加了方差,因此这意味着原始数据中随机截距的方差接近于零,正如我们所怀疑的那样。

  • 固定截距为 8.64,与原始数据拟合的模型基本相同。

最后,让我们看一个没有随机效应的模型,它显然只是一个 ANOVA:

> aov(y ~ group_id, data = data) %>% summary()
            Df Sum Sq Mean Sq F value Pr(>F)
group_id     4   22.0   5.489   0.763  0.555
Residuals   45  323.6   7.190      

因此,几乎没有证据表明这 5 个组的均值彼此不同。另一种看待这个问题的方法是:

> lm(y ~ group_id, data = data) %>% summary()

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   8.8510     0.8479  10.438 1.33e-13 ***
group_id2     0.7950     1.1992   0.663    0.511    
group_id3    -0.0150     1.1992  -0.013    0.990    
group_id4    -1.1490     1.1992  -0.958    0.343    
group_id5    -0.6810     1.1992  -0.568    0.573    

因此,也很少有证据表明第 2、3、4 和 5 组具有与第 1 组不同的均值。这两个模型都与混合模型中随机截距的非常小的变化一致。

因此,综上所述,在这种情况下,我们可以得出结论,由于组数较少且组间估计的变化较小,软件无法估计零以上的随机截距变化,因此模型是奇异,尽管模型估计似乎是可靠的。