6

介绍

我正在尝试构建一个 GLM,它根据鱼群的大小和年龄来模拟鱼群标本所产卵的数量(质量)。

因此,变量是:

  • eggW:产卵的总质量,一个介于 300 和 30000 之间的连续正变量。

  • fishW:鱼的质量,连续的和正的,范围在 3 到 55 之间。

  • age: 1 年或 2 年。

没有 0,没有 NA。

在检查并意识到假设正态分布可能不合适后,我决定使用 Gamma 分布。我选择 Gamma 基本上是因为变量是正数且连续的,随着值的增加,方差会增加,并且看起来是倾斜的,如下图所示。

eggW 值的频率分布:在此处输入图像描述

fishW 与 eggW:在此处输入图像描述

编码

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是因为用生物学术语对结果进行更明显和直接的解释,而不是使用inverselog链接。

因此,上面的代码会产生下一条消息:

警告消息:
1:在 log(ifelse(y == 0, 1, y/mu)) 中:产生了 NaN
2:由于发散而截断了步长

重要 的是,如果删除变量并且只保留年龄,则不会显示错误警告。如果使用链接,则不会报告错误。fishWlog

问题

如果我的模型设计背后的基本原理是可以接受的,我想了解为什么会报告这些错误以及如何解决或避免它们。无论如何,我将不胜感激任何批评或建议。

4

2 回答 2

0

您希望根据鱼的年龄和重量来确定鸡蛋的重量,对吗?我认为你需要使用:

glm(eggW ~ fishW + age, family=Gamma(link=identity)

代替

glm(eggW ~ fishW * age, family=Gamma(link=identity)
于 2017-06-21T14:50:09.173 回答
0
  1. 您的数据集是否有缺失值?
  2. 您的变量是否高度相关?
  3. 将 fishW * age 变成一个单独的列,然后将其传递给算法
于 2017-06-26T07:36:39.680 回答