拟合混合模型时出错:观察数 <= 随机效应数
Error in fitting mixed model: number of observations <= number of random effects
我正在尝试拟合多个混合线性模型。
summary(model3 <- lme4::lmer(LPP2POz ~ COND + (COND|ID), data = dataLPP2POz))
其输出是
Error: number of observations (=75) <= number of random effects (=75) for term (COND | ID); the random-effects parameters and the residual variance (or scale parameter) are probably unidentifiable
谁能弄清楚为什么这个模型会回退这个错误?
这是数据集:
> dput(head(dataLPP2POz))
structure(list(ID = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("01",
"04", "06", "07", "08", "09", "10", "11", "12", "13", "15", "16",
"17", "18", "19", "21", "22", "23", "25", "27", "28", "30", "44",
"46", "49"), class = "factor"), GR = c("RP", "RP", "RP", "RP",
"RP", "RP"), SES = c("V", "V", "V", "V", "V", "V"), COND = structure(c(1L,
2L, 3L, 1L, 2L, 3L), .Label = c("NEG-CTR", "NEG-NOC", "NEU-NOC"
), class = "factor"), LPP2POz = c(7.91468942320841, 9.94838815736199,
10.2186482048953, 1.07455889922813, 1.65917850515029, 3.22422743232682
)), row.names = c(NA, 6L), class = "data.frame")
规范COND + (COND|ID)
表明条件的影响是固定的,条件的影响是随机的;也就是说,每个 individual/condition 组合都会获得一个随机效应值。大约
y_ij = alpha_i + epsilon_{c,ij} + epsilon_{r,ij}
(虽然这并不是 lmer
参数化它的方式); alpha_i
是条件 i
的固定效应,epsilon_{c,ij}
是条件 i
对个体 j
的随机效应,而 epsilon_{r,ij}
是 条件i
/个体j
的残差。问题是 因为每个人在每种情况下只被测量一次,所以这两个 epsilon
术语是混淆的(共同无法识别)。
- 正如@Bloxx 所说,您可以通过在
lmer()
调用中指定 control = lmerControl(check.nobs.vs.nRE = "ignore")
来强制 lmer
适合模型。但是,如果你这样做,你将无法解释随机效应协方差矩阵,除非你 expert/really 知道你在做什么(固定效应应该仍然可以)。
- 如果你想在
glmmTMB
中拟合相同的模型,你可以设置 dispformula = ~0
将残差方差归零(实际上它被设置为一个非常小但非零的值...... )
- 对于一些更简单的模型(但不是这个),如 this example,您可以简化随机效应模型,使其不再与残差方差项冲突。例如,如果您的模型是
(1|ID/COND)
(即 ID
和 COND
在 ID
内的复合对称 model/intercept 变体,相当于 (1|ID) + (1|ID:COND)
) 您可以通过删除嵌套项(与残差项完全相同)并将模型简化为 (1|ID)
. 来解决问题
我正在尝试拟合多个混合线性模型。
summary(model3 <- lme4::lmer(LPP2POz ~ COND + (COND|ID), data = dataLPP2POz))
其输出是
Error: number of observations (=75) <= number of random effects (=75) for term (COND | ID); the random-effects parameters and the residual variance (or scale parameter) are probably unidentifiable
谁能弄清楚为什么这个模型会回退这个错误?
这是数据集:
> dput(head(dataLPP2POz))
structure(list(ID = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("01",
"04", "06", "07", "08", "09", "10", "11", "12", "13", "15", "16",
"17", "18", "19", "21", "22", "23", "25", "27", "28", "30", "44",
"46", "49"), class = "factor"), GR = c("RP", "RP", "RP", "RP",
"RP", "RP"), SES = c("V", "V", "V", "V", "V", "V"), COND = structure(c(1L,
2L, 3L, 1L, 2L, 3L), .Label = c("NEG-CTR", "NEG-NOC", "NEU-NOC"
), class = "factor"), LPP2POz = c(7.91468942320841, 9.94838815736199,
10.2186482048953, 1.07455889922813, 1.65917850515029, 3.22422743232682
)), row.names = c(NA, 6L), class = "data.frame")
规范COND + (COND|ID)
表明条件的影响是固定的,条件的影响是随机的;也就是说,每个 individual/condition 组合都会获得一个随机效应值。大约
y_ij = alpha_i + epsilon_{c,ij} + epsilon_{r,ij}
(虽然这并不是 lmer
参数化它的方式); alpha_i
是条件 i
的固定效应,epsilon_{c,ij}
是条件 i
对个体 j
的随机效应,而 epsilon_{r,ij}
是 条件i
/个体j
的残差。问题是 因为每个人在每种情况下只被测量一次,所以这两个 epsilon
术语是混淆的(共同无法识别)。
- 正如@Bloxx 所说,您可以通过在
lmer()
调用中指定control = lmerControl(check.nobs.vs.nRE = "ignore")
来强制lmer
适合模型。但是,如果你这样做,你将无法解释随机效应协方差矩阵,除非你 expert/really 知道你在做什么(固定效应应该仍然可以)。 - 如果你想在
glmmTMB
中拟合相同的模型,你可以设置dispformula = ~0
将残差方差归零(实际上它被设置为一个非常小但非零的值...... ) - 对于一些更简单的模型(但不是这个),如 this example,您可以简化随机效应模型,使其不再与残差方差项冲突。例如,如果您的模型是
(1|ID/COND)
(即ID
和COND
在ID
内的复合对称 model/intercept 变体,相当于(1|ID) + (1|ID:COND)
) 您可以通过删除嵌套项(与残差项完全相同)并将模型简化为(1|ID)
. 来解决问题