首页 > 解决方案 > 运行混合效应模型时出错 - 错误:每个分组因子的水平数必须 < 观察数

问题描述

当我尝试使用包glmer在 R 中运行 a 时,我试图了解如何解决以下错误:lme4

错误:每个分组因子的水平数必须 < 观察数。

为了提供一些背景知识,我要问的问题是,拥有一定数量的特定细菌门是否与我正在研究的动物种群的相对质量增加有关。我的样本量很小,只有 20 个独特的个体。我的固定效应是相对质量增加、细菌门 1、门 2、年龄和日期以及个体、菌落面积和年份的随机效应。这是我正在运行的代码:

Model1 <- glmer(relative_growth ~ firmicutes + bacteroidetes + age_class + date +
                (1|uid) + (1|col_area) + (1|year), data = microbiome)

这是我的数据的示例子集:

dput(microbiome[1:5],)
structure(list(uid = structure(c(5L, 8L, 11L, 13L, 9L, 10L, 1L, 
12L, 16L, 17L, 18L, 14L, 20L, 19L, 7L, 4L, 15L, 6L, 2L, 3L), .Label = c("6127_7339", 
"6385_6342", "6609_7388", "6835_6898", "7131_7126", "7187_7189", 
"7279_7197", "7365_7368", "7640_7641", "7753_7754", "7755_7756", 
"7780_7781", "7783_7793", "7828_7874", "7830_7849", "8005_8009", 
"8111_8107", "8476_8478", "8491_8492", "8497_8488"), class = "factor"), 
    year = c(2015L, 2015L, 2016L, 2016L, 2016L, 2016L, 2016L, 
    2016L, 2017L, 2017L, 2018L, 2018L, 2018L, 2018L, 2016L, 2016L, 
    2018L, 2018L, 2018L, 2015L), col_area = structure(c(4L, 4L, 
    4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 3L, 2L, 3L, 3L, 4L, 1L, 2L, 
    2L, 3L, 1L), .Label = c("boulder", "gothictown", "mm_maintalus", 
    "picnic_lower"), class = "factor"), date = structure(c(10L, 
    8L, 5L, 4L, 15L, 15L, 4L, 2L, 12L, 1L, 14L, 9L, 14L, 14L, 
    7L, 3L, 11L, 6L, 13L, 16L), .Label = c("11-Jun-17", "13-Jul-16", 
    "14-Jun-16", "15-Jun-16", "16-Jun-16", "18-Jun-18", "2-Jun-16", 
    "20-Jul-15", "21-May-18", "22-Jun-15", "22-May-18", "25-Jun-17", 
    "27-Jun-18", "28-May-18", "3-Jun-16", "9-Jul-15"), class = "factor"), 
    age_class = structure(c(1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 
    2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L), .Label = c("A", 
    "Y"), class = "factor")), row.names = c(NA, -20L), class = "data.frame")

标签: rlme4

解决方案


  • 根据您向我们展示的数据,似乎每个值只有一个观察uid值。如果这是真的,那么正如@neilfws 所说,您的模型被过度指定了 - 当拟合线性混合模型(参见下面的第三个要点)或具有采用可调节尺度参数(例如 Gamma)的族的 GLMM 时,观察级随机效果将与残差方差(对于 LMM)或尺度参数混淆。只需在(1|uid)模型中省略该术语即可。
  • 我最初认为最可能的问题是使用菌落面积作为随机效应分组变量(即,在随机效应规范中的条形右侧);如果菌落面积是一个连续变量,它可能是一个令人讨厌的变量(即你想在统计上控制的东西),但它(通常)不能明智地成为一个随机效应分组变量:这个问题更详细地解释了这个问题.
  • 比实质性更具风格/美学,但如果您正在拟合线性(而不是广义线性)混合模型,即(条件)响应是正态分布的,那么您应该使用lmer()而不是glmer()(如果您在glmer()没有指定family=参数的情况下调用,您会得到一个建议您应该改用的警告lmer())。(通常,质量增益将被建模为正态,或者可能是对数正态或 Gamma ...)

推荐阅读