【问题标题】:Warning message glmer警告信息 glmer
【发布时间】:2017-03-10 21:04:47
【问题描述】:

我正在研究 2 个固定变量和 1 个随机变量的相互作用。 Year 有 19 个级别,是数字,海滩是一个因素,有 4 个级别,方法是一个因素,有 3 个级别。 我对下面的错误消息感到困惑。 NS1 是我的巢成功,它是按鸡蛋总数加权的。

fit10<-glmer(NS1~0+beach+method+(1|year)+(1+beach*method|year),data=new1,weights=egg_total,family=binomial())

警告信息:

1: 在 eval(expr, envir, enclos) : non-integer #successes in a 二项式glm!

2: 在 commonArgs(par, fn, control, environment()) : maxfun

3: 在 optwrap(optimizer, devfun, start, rho$lower, control = control, : 来自 bobyqa 的收敛代码 1: bobyqa -- 最大数量 超出功能评估

4: In (function (fn, par, lower = rep.int(-Inf, n), upper = rep.int(Inf, : 在 10000 次评估中未能收敛

5: 在 checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 无法评估缩放梯度

6: 在 checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 模型未能收敛:退化 Hessian 有 17 个负特征值

编辑: 我已将代码更改为:

    fit10<-glmer(NS1~0+beach+method+(1|year)+(1|beach/year)+  (1+method|year),data=new1,weights=crawls,family=binomial(),control=glmerControl(optimizer = "Nelder_Mead",optCtrl=list(maxfun=100000)))

它只给了我这个警告信息:

   Warning message:
    In eval(expr, envir, enclos) : non-integer #successes in a binomial glm!

A sample of my data looks like this:
 year     beach     method FC..         NS        NS1     egg_total   crawls
1   1997 Hillsboro   HTL only    7  12.500000 0.12500000         0      8
2   1997 Hillsboro   HTL only    4  33.333333 0.33333333        99      6
3   1997 Hillsboro   HTL only    3  57.142857 0.57142857         0      7
4   1997 Hillsboro   HTL only    2  33.333333 0.33333333         0      3
5   1997 Hillsboro   HTL only    0 100.000000 1.00000000       104      2
6   1997 Hillsboro   HTL only    0 100.000000 1.00000000         0      2
7   1997 Hillsboro   HTL only    0 100.000000 1.00000000       190      4
8   1997 Hillsboro   HTL only    1  66.666667 0.66666667         0      3
9   1997 Hillsboro   HTL only    0 100.000000 1.00000000       114      1
10  1997     P/FTL   HTL only    0 100.000000 1.00000000         0      1
11  1997     P/FTL   no clean    0 100.000000 1.00000000       140      1
12  1997     P/FTL   no clean    3  40.000000 0.40000000       277      5
13  1997     P/FTL HTL and SB    0 100.000000 1.00000000         0      1
14  1997       JUL   no clean    0 100.000000 1.00000000       153      2
15  1997       JUL   no clean    0 100.000000 1.00000000       113      2
16  1997       JUL   no clean    0 100.000000 1.00000000         0      1

NS1 是简单的 NS/100

这样在 excel 中总共有 866 行

【问题讨论】:

  • 欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。
  • 第一个警告是最直接的。你检查过NS1 以确保它是一个整数吗?
  • 我将 NS1 更改为数字。我得到的只是 0 和 1,值介于 0 和 1 之间,这就是为什么我将其加权为 egg_total。所以 NS1 是我的成功,其余的都是失败
  • 我没有关注。也许NS1 是一个比例而不是 0/1 变量?在这种情况下,NS1*egg_total 需要是一个整数。将您的数据集示例添加到问题中。查看有关如何制作可重现示例的想法here
  • @aosmith,我已经发布了上述数据的样本。

标签: r warnings lme4


【解决方案1】:

在此重复模型以供参考。

fit10<-  glmer(NS1~0+beach+method+(1|year)+ 
    (1+beach*method|year),
    data=new1,
    weights=egg_total,family=binomial())

(1+beach*method|year) 一词似乎很乐观;这是估计beachmethod 之间交互作用的年际变化,它表示一个 12x12 方差-协方差矩阵(=n*(n+1)/2 = 78 个参数)。除非您至少有 1000 个观察值,否则您可能不应该尝试这个。此外,(1|year)(截距变化)和(1+beach*method|year) 术语是多余的,因为后者估计截距、海滩效应、方法效应以及它们相互作用的年际变化......它尝试(1|beach/year) + (1+method|year) 可能更现实,它适合海滩、年份、海滩:年份相互作用之间的截距变化,以及年份之间方法效果的变化 - 总共 1+1+(3*4/2)=8 方差-协方差参数,这可能仍然太多,具体取决于您的数据。

1:在 eval(expr, envir, enclos) 中:非整数 #successes 在二项式 glm 中!

要弄清楚这里发生了什么,正如上面的@aosmith cmets,y &lt;- NS1*egg_total 必须接近一个整数(请参阅binomial()$initialize 进行测试,即(any(abs(y - round(y)) &gt; 0.001))。如果NS1 应该是存活的鸡蛋的比例,那么这应该可以工作,除非你在某处犯了某种错字/舍入错误。

这是您想弄清楚的,以确保模型确实有意义; lme4 will behave badly with non-integer response variables for a distribution that's supposed to be integral也有可能。

2: CommonArgs(par, fn, control, environment()) : maxfun

当您的模型有很多参数时,就会发生这种情况。使用control=glmerControl(optCtrl=list(maxfun=1e6))可以增加maxfun,但是真正的

3: 在 optwrap(optimizer, devfun, start, rho$lower, control = control, : 来自 bobyqa 的收敛代码 1: bobyqa -- 超出函数评估的最大数量

这意味着函数没有完成优化(见之前的评论)

4: In (function (fn, par, lower = rep.int(-Inf, n), upper = rep.int(Inf, : 10000 次评估未能收敛

同上。

5: 在 checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 无法评估缩放梯度
6:在checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 模型收敛失败:具有17个负特征值的退化Hessian

在您的模型处于最低限度工作之前,不必过多担心这些。

【讨论】:

  • 感谢您的建议。我不得不将模型的公式从 egg_total 更改为 crawls (指爬行总数)。这给出:fit10
【解决方案2】:

遗漏的水平是您的参考水平。模型摘要中显示的级别的每个参数都应从您的参考级别(遗漏的那个)中添加/减去。参考水平是在截距项中估计的参数。

【讨论】:

    猜你喜欢
    • 2016-02-13
    • 2018-09-27
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多