你怎么知道混合效应模型中随机效应的数量?

机器算法验证 r 回归 混合模式 多层次分析
2022-03-26 00:23:44

我正在尝试在 R 中拟合随机斜率模型,我的代码如下:

    lmer(data=ds, Outcome ~ treatment + (0 + treatment|ID))

当我尝试运行此代码时,我收到以下错误消息:

    Error: number of observations (=2035) <= number of random effects (=2035) for term (0 + treatment | ID); the random-effects parameters and the residual variance (or scale parameter) are probably unidentifiable

我有 407 个唯一 ID 和 5 个处理,所以观察次数是 407*5 = 2035。但是,我不明白为什么我有 2035 个随机效应。作为仅随机斜率的模型,我希望每个唯一 ID 估计一个随机斜率,因此我认为我的模型中只有 407 个随机效应。

我还尝试如下拟合随机斜率和截距模型:

    lmer(data=ds, Outcome ~ treatment + (1 + treatment|ID))

但是,我仍然收到与上述相同的错误消息,即我有 2035 个观察值并且随机效应的数量 = 2035。我知道观察的数量应该超过估计的随机效应的数量,但我仍然没有也不明白为什么这个模型中有 2035 个随机效应。我希望,由于我正在估计每个唯一 ID 的随机斜率和截距(每个 ID 有 2 个随机效应),我将有 407*2=814 个随机效应。显然,关于如何计算这两个模型的随机效应数量,我在这里遗漏了一些东西。任何帮助理解这一点将不胜感激。谢谢。

1个回答

每当您尝试拟合具有随机斜率的模型时,这是预期的行为,其中随机斜率的变量是分类的并且每个治疗/组组合只有一个观察值。

这是因为分类变量的水平由虚拟变量表示 - 本质上它们被视为不同的变量。因此,在您的情况下,仅当您拟合随机斜率时,您才要求软件为每组估计 5 个随机斜率。当您拟合随机截距和随机斜率时,将有 407 个随机截距,但每组只有 4 个随机斜率(因为一个级别将被视为参考组并包含在截距中),因此无论哪种方式,您都会有 5 x 407随机效应。

解决这个问题的唯一方法是将变量编码为数字,如果这在您的研究/数据中是合理的,或者不拟合随机斜率,或者每组每次治疗有超过 1 个观察值。

使用玩具数据集可以说明这一点:

> set.seed(1)
> dt <- expand.grid(G = LETTERS[1:4], a = LETTERS[1:2])
> dt$Y = rnorm(nrow(dt))
> dt
  G a          Y
1 A A -0.6264538
2 B A  0.1836433
3 C A -0.8356286
4 D A  1.5952808
5 A B  0.3295078
6 B B -0.8204684
7 C B  0.4874291
8 D B  0.7383247

现在我们拟合模型,由于上述原因,这两个模型都不会运行。

> lmer(Y ~ a + (0 + a | G), data = dt) %>% summary()
Error: number of observations (=8) <= number of random effects (=8) for term (0 + a | G); the random-effects parameters and the residual variance (or scale parameter) are probably unidentifiable
> lmer(Y ~ a + (1 + a | G), data = dt) %>% summary()
Error: number of observations (=8) <= number of random effects (=8) for term (1 + a | G); the random-effects parameters and the residual variance (or scale parameter) are probably unidentifiable

但是现在我们只向数据集添加 1 行,它们运行:

> (dt <- rbind(dt, dt[1, ]))
  G a          Y
1 A A -0.6264538
2 B A  0.1836433
3 C A -0.8356286
4 D A  1.5952808
5 A B  0.3295078
6 B B -0.8204684
7 C B  0.4874291
8 D B  0.7383247
9 A A -0.6264538

> lmer(Y ~ a + (0 + a | G), data = dt) %>% summary()

Random effects:
 Groups   Name Variance  Std.Dev.  Corr 
 G        aA   1.451e+00 1.205e+00      
          aB   3.224e-01 5.678e-01 -0.04
 Residual      4.239e-15 6.511e-08     

> lmer(Y ~ a + (1 + a | G), data = dt) %>% summary()


Random effects:
 Groups   Name        Variance  Std.Dev.  Corr 
 G        (Intercept) 9.776e-01 9.887e-01      
          aB          1.222e+00 1.105e+00 -0.81
 Residual             1.159e-14 1.077e-07      
Number of obs: 9, groups:  G, 4

在仅具有随机斜率的模型中,我们有 4 组中的 2 个随机斜率(8 个随机效应),而在具有随机截距和随机斜率的模型中,我们有 4 个随机截距和 4 个随机斜率。