介绍
我正在尝试构建一个 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)
Run Code Online (Sandbox Code Playgroud)
我maxit在本页面的帖子中看到它建议作为glm.fit: algorithm did not converge错误的解决方案后添加了该因素,并且它起作用了。
我之所以选择使用,link=identity是因为用生物学术语而不是使用inverse或log链接对结果进行了更明显和直接的解释。
因此,上面的代码会产生下一条消息:
警告消息:
1:在日志中(ifelse(y == 0, 1,y/mu)):产生的 NaN
2:由于分歧而截断步长
重要的是,如果删除变量并且只保留年龄,则 不会显示错误警告fishW。如果使用链接,则不会报告任何错误log。
问题
如果我的模型设计背后的基本原理是可以接受的,我想了解为什么会报告这些错误以及如何解决或避免它们。无论如何,我将不胜感激任何批评或建议。