lmer随机截距混合效应模型报错:分组因子水平数需小于观测数
混合效应模型报错原因解析
我最近在用混合效应模型分析目标年龄和性别交叉作用(控制种族)对温暖度、能力评分的影响。实验设计是276名参与者各给2个不同交叉身份的目标评分,数据集共276行,ResponseId对应276个唯一参与者;目标年龄有Old、Young、空值三个水平,目标性别有Men、Women、空值三个水平。运行以下lmer代码时触发报错,想知道原因:
示例数据
ResponseId TargetAge TargetGender TargetAge2 TargetGender2 Warmth1 Warmth2 1 R_3O1E4cOxRIejI1k Old Women Women 5.363636 5.272727 2 R_1EaFGkyVNdhlgQO Old Women Men 5.181818 5.181818 3 R_2eVHfsG4p7g0QZE Old Men Young Men 3.909091 3.545455 4 R_BtYn33qaXVoYh8d Old Men Young Men 1.363636 2.636364 5 R_d5S9ajl6C9bfTNL Old Women Women 4.727273 3.909091 6 R_1kXCRRZvdTmYsj7 Old Women Young Men 5.454545 5.545455
示例代码及报错
model <- lmer(Warmth1 ~ TargetAge*TargetGender + (1 | ResponseId), data=my_data) Error: number of levels of each grouping factor must be < number of observations (problems: ResponseId)
报错原因
核心问题是分组因子ResponseId的水平数(276)和观测数(276)完全相等,不满足lmer对随机效应的要求。
你的数据集是宽格式:每个参与者占一行,同时记录了对两个目标的评分(Warmth1、Warmth2)。但你只拟合了Warmth1这一列,此时每个ResponseId只对应1条观测——随机截距需要同一分组下有多个观测才能计算组间变异,现在根本没法估计参与者之间的个体差异,所以直接报错。
解决办法
1. 转长格式(推荐)
把成对的变量(比如Warmth1/Warmth2、TargetAge/TargetAge2)合并,让每个目标的评分单独占一行。转换后观测数会变成552行,每个ResponseId对应2条观测,就能满足随机效应的要求了。
用tidyr包转换的示例代码:
library(tidyr) long_data <- pivot_longer(my_data, cols = c(Warmth1, Warmth2), names_to = "Target_Number", values_to = "Warmth") %>% pivot_longer(cols = c(TargetAge, TargetAge2), names_to = "Age_Col", values_to = "TargetAge") %>% pivot_longer(cols = c(TargetGender, TargetGender2), names_to = "Gender_Col", values_to = "TargetGender") %>% # 匹配对应目标的年龄、性别和评分 filter(substr(Target_Number, 6,6) == substr(Age_Col, 9,9), substr(Target_Number, 6,6) == substr(Gender_Col, 13,13)) %>% select(-Age_Col, -Gender_Col)
转换后再拟合模型:
model <- lmer(Warmth ~ TargetAge*TargetGender + (1 | ResponseId), data = long_data)
2. 坚持宽格式(不推荐)
如果一定要用当前的宽格式,那没法加ResponseId的随机效应,只能拟合普通固定效应模型,但这样没法控制参与者之间的个体差异,结果的可靠性会打折扣:
model <- lm(Warmth1 ~ TargetAge*TargetGender, data = my_data)
额外提醒
拟合模型前记得处理TargetAge和TargetGender里的空值,要么删除对应行,要么用合理方式填充,不然会丢失样本,还可能影响模型估计结果。
内容的提问来源于stack exchange,提问作者Marco Mai
相关产品推荐
相关产品推荐

