R语言lmer多层模型缺失Region类别预测因子的原因与解决
线性混合模型中分类变量类别缺失的原因与解决方法
问题场景
你用以下R代码构建多层模型:
M4 <- lmer(Average ~ Region + (1|Participant), data=Theta) tab_model(M4, show.se=T, digits = 4, title="Table: Model for the Relationship of Average Power in the Theta Frequency with the four Brain Regions") summary(M4)
其中Region变量包含Central、Frontal、Occipital、Posterior四个类别,但模型输出仅显示Frontal、Occipital、Posterior三个类别,缺失Central。
原因
这是R中分类变量默认采用**虚拟编码(参照编码)**的正常现象:
- 当分类变量进入线性模型时,R会自动选择一个类别作为参照组,不单独输出该组的系数,而是将其基础效应整合到截距项
(Intercept)中。 - 这里Central被选为默认参照组,截距项的数值0.3473就是Central组的Average均值;其他三个类别的系数,代表该组与Central组的均值差值。比如Frontal的系数0.0938,意味着Frontal组的Average比Central组高0.0938。
解决方法
根据需求可以通过以下方式调整:
- 指定自定义参照组:如果你想让某个特定类别作为参照,用
relevel()函数修改变量的参照水平,比如让Frontal当参照组:
Theta$Region <- relevel(Theta$Region, ref = "Frontal") M4 <- lmer(Average ~ Region + (1|Participant), data=Theta)
此时模型输出会显示Central、Occipital、Posterior的系数,Frontal的效应包含在截距项中。
- 使用效应编码(总和编码):让所有类别都输出单独的系数,此时每个系数代表该组与总体均值的偏差,截距项为总体均值:
# 设置总和编码 Theta$Region <- factor(Theta$Region) contrasts(Theta$Region) <- contr.sum(4) # 重新拟合模型 M4 <- lmer(Average ~ Region + (1|Participant), data=Theta)
- 直接输出所有组的均值:如果不需要系数差值,而是想直接看每个Region组的Average估计值,可以用
emmeans包:
library(emmeans) # 输出所有Region组的均值及置信区间 emmeans(M4, ~ Region)
内容的提问来源于stack exchange,提问作者Dove
相关产品推荐
相关产品推荐

