You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言glmer拟合二项分布GLMM报y值需0<=y<=1错误的修复求助

问题根因

你收到的报错Error in eval(family$initialize, rho) : y values must be 0 <= y <= 1是二项分布GLMM的典型参数传入错误:

  • family = binomial要求传入的响应变量只能是两种格式:
    • 个体水平的0/1二分类变量(1代表事件发生,0代表未发生)
    • 分组水平的cbind(事件发生数, 事件未发生数)矩阵,或者取值范围在0-1之间的比例+总样本量作为权重
  • 从你提供的样本数据来看,你指定为响应变量的Survival(对应列名S*)是每组的存活个体计数,数值多为大于1的整数,不符合二项分布的响应变量要求,因此触发报错。

修复方案

修正后的模型代码如下:

# 生成观测水平随机效应
datheat$replicateID = factor(1:nrow(datheat))

# 拟合模型,用cbind(存活数, 死亡数)作为响应变量
mod = glmer(cbind(`S*`, n - `S*`) ~ sex + region + treatment + 
              treatment:region + treatment:sex + sex:region + 
              (1|iso) + (1|pop) + (1|replicateID), 
            data = datheat, family = binomial)
summary(mod)

如果你想用存活比例作为响应变量,也可以写成如下格式,拟合结果完全一致:

mod = glmer(proportion ~ sex + region + treatment + 
              treatment:region + treatment:sex + sex:region + 
              (1|iso) + (1|pop) + (1|replicateID), 
            data = datheat, family = binomial, weights = n)

注意事项

  • 列名S*包含特殊字符,需要用反引号包裹才能被R正确识别
  • 你的数据集里等雌系、种群对应的列名是iso和pop,要和模型随机效应部分的变量名对应,否则会出现变量找不到的报错
  • 观测水平随机效应(1|replicateID)用于校正二项分布的过度离散问题,这个设置是合理的
  • 如果拟合后出现收敛警告,可以尝试调整优化器参数:在glmer参数中加入control = glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 10000))

内容的提问来源于stack exchange,提问作者Alison Meeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:54:05