在R中构建广义线性混合模型(GLMM)遇错求助
GLMM构建错误的解决方法
1. lme4包的错误修正
你用lmer()报错是因为这个函数只处理线性混合模型(高斯分布),二项式响应的广义线性混合模型要改用lme4包里的glmer()函数。
修正后的代码:
library(lme4) # 务必指定data参数传入你的数据集 Detections_glmm <- glmer(Detection ~ Camera + (1|Day), family = binomial, data = data1)
(1|Day)表示把Day设为随机截距因子,符合你的需求family=binomial对应二项式响应变量,可省略引号,写法更规范- 必须通过
data参数指定数据集,否则函数无法读取变量
2. glmm包的对象过大问题处理
glmm包生成超大对象的核心原因是你设置了m=10^4(蒙特卡洛抽样次数),这个数值对于小数据集来说完全过剩,会导致模型对象包含大量抽样结果。
调整建议:
- 大幅降低
m的取值,比如设为m=1000甚至更小 - 随机项
~0+Day是无截距的随机效应,若你需要的是随机截距,应改为~1|Day(和glmer逻辑一致),除非你明确需要无截距结构
调整后的代码示例:
library(glmm) set.seed(1234) Detections <- glmm(Detection ~ 0 + Camera, random = list(~1 | Day), varcomps.names = c("Day"), data = data1, family.glmm = bernoulli.glmm, m = 1000, debug = FALSE) # 关闭debug模式减少冗余输出
新手实用建议
- 优先选择lme4包的
glmer(),语法更直观,社区资源更丰富,后续模型诊断、可视化工具也更完善 - 后续加入多个解释变量时,直接在公式中追加即可,示例:
# 包含所有固定因子的完整模型 full_model <- glmer(Detection ~ Camera + Temperature + Distance + Light + Size + (1|Day), family = binomial, data = data1)
内容的提问来源于stack exchange,提问作者saimensis
相关产品推荐
相关产品推荐

