介绍
我正在尝试构建一个 GLM,它根据鱼群的大小和年龄来模拟鱼群标本所产卵的数量(质量)。
因此,变量是:
eggW
:产卵的总质量,一个介于 300 和 30000 之间的连续正变量。fishW
:鱼的质量,连续的和正的,范围在 3 到 55 之间。age
: 1 年或 2 年。
没有 0,没有 NA。
在检查并意识到假设正态分布可能不合适后,我决定使用 Gamma 分布。我选择 Gamma 基本上是因为变量是正数且连续的,随着值的增加,方差会增加,并且看起来是倾斜的,如下图所示。
编码
myglm <- glm(eggW ~ fishW * age, family=Gamma(link=identity),
start=c(mean(data$eggW),1,1,1),
maxit=100)
maxit
在看到此页面的帖子上建议的错误解决方案后,我添加了该因素glm.fit: algorithm did not converge
,并且它起作用了。
我选择使用它link=identity
是因为用生物学术语对结果进行更明显和直接的解释,而不是使用inverse
或log
链接。
因此,上面的代码会产生下一条消息:
警告消息:
1:在 log(ifelse(y == 0, 1, y/mu)) 中:产生了 NaN
2:由于发散而截断了步长
重要 的是,如果删除变量并且只保留年龄,则不会显示错误警告。如果使用链接,则不会报告错误。fishW
log
问题
如果我的模型设计背后的基本原理是可以接受的,我想了解为什么会报告这些错误以及如何解决或避免它们。无论如何,我将不胜感激任何批评或建议。