lme4中的警告消息,用于3年前未出现的生存分析

时间:2015-12-15 06:23:07

标签: r glm lme4 convergence

我正在尝试使用lme4包将广义线性混合效果模型拟合到我的数据中。

数据可描述如下(见下面的例子):28天内鱼类的存活数据。示例数据集中的解释变量是:

  • Region这是幼虫起源的地理区域。
  • treatment每个地区的鱼类子样本的温度升高。
  • replicate整个实验的三次重复之一
  • tub随机变量。总共15个桶(用于维持水族箱中的实验温度)(5个温度replicate)中的每一个3 treatment s。每个浴缸包含1个水族箱,每个Region(总共4个水族箱),并随机放置在实验室中。
  • Day自我解释,从实验开始的天数。
  • stage未在分析中使用。可以忽略。

响应变量

  • csns累积生存。即remaining fish/initial fish at day 0
  • start权重用于告诉模型生存概率与实验开始时的鱼数相关。
  • aquarium第二个随机变量。这是每个水族箱的唯一ID,包含其所属的每个因子的值。例如N-14-1表示Region NTreatment 14replicate 1

我的问题很不寻常,因为我之前已经安装了以下模型:

   dat.asr3<-glmer(csns~treatment+Day+Region+
      treatment*Region+Day*Region+Day*treatment*Region+
      (1|tub)+(1|aquarium),weights=start, 
      family=binomial, data=data2)  

但是,现在我正在尝试重新运行模型,为了生成分析以便发布,我使用相同的模型结构和包得到以下错误。输出如下:

> Warning messages:  
  

1:在eval(expr,envir,enclos)中:二项式glm中的非整数#successes!
     2:在checkConv(attr(opt,&#34; derivs&#34;)中,选择$ par,ctrl = control $ checkConv,:
     模型无法与max | grad |收敛= 1.59882(tol = 0.001,组分> 1)
  3:在checkConv(attr(选择,&#34;衍生品&#34;)中,选择$ par,ctrl = control $ checkConv,:
      模型几乎无法辨认:非常大的特征值
   - 重新定标变量?;模型几乎无法识别:大特征值比
   - 重新缩放变量?

我的理解如下:

  

警告信息1.

non-integer #success in a binomial glm是指csns变量的比例格式。我已经咨询过几个来源,包括github,r-help等,所有人都建议这样做。 3年前帮助我进行这项分析的研究员无法到达。它可以与过去3年中lme4包的变化有关吗?

  

警告讯息2.

我理解这是一个问题,因为没有足够的数据点来适应模型,特别是在 L-30-1L-30-2L-30-3
只进行了两次观察:
Day 0 csns=1.00Day 1 csns=0.00
所有三个水族馆。因此,没有可变性或足够的数据来适应模型。

尽管如此,lme4中的这个模型之前已经有效,但现在没有这些警告就没有运行。

  

警告讯息3

这个对我来说完全不熟悉。从未见过它。

示例数据:

Region treatment replicate tub Day stage csns start aquarium  
 N        14         1  13   0    1 1.00   107   N-14-1
 N        14         1  13   1    1 1.00   107   N-14-1
 N        14         1  13   2    1 0.99   107   N-14-1
 N        14         1  13   3    1 0.99   107   N-14-1
 N        14         1  13   4    1 0.99   107   N-14-1
 N        14         1  13   5    1 0.99   107   N-14-1

有问题的数据1005cs.csv可通过我们转移:http://we.tl/ObRKH0owZb

获取

任何解密此问题的帮助,将不胜感激。对于分析这些数据的合适包或方法的任何替代建议也将是很好的。

1 个答案:

答案 0 :(得分:3)

tl; dr “非整数成功”警告是准确的;您可以自行决定是否将二项式模型拟合到这些数据中是否真的有意义。其他警告表明拟合有点不稳定,但缩放和居中一些输入变量会使警告消失。再次,由您来决定这些不同配方的结果是否足以让您担心......

data2 <- read.csv("1005cs.csv")
library(lme4)

适合模型(稍微更紧凑的模型配方)

dat.asr3<-glmer(
   csns~Day*Region*treatment+
        (1|tub)+(1|aquarium),
            weights=start, family=binomial, data=data2)

我收到您举报的警告。

让我们来看看数据:

library(ggplot2); theme_set(theme_bw())
ggplot(data2,aes(Day,csns,colour=factor(treatment)))+
        geom_point(aes(size=start),alpha=0.5)+facet_wrap(~Region)

enter image description here

这里没有明显的问题,尽管它确实清楚地表明某些治疗组合的数据非常接近1,并且治疗值远非零。让我们尝试缩放&amp;将一些输入变量集中在一起:

data2sc <- transform(data2,
                     Day=scale(Day),
                     treatment=scale(treatment))
dat.asr3sc <- update(dat.asr3,data=data2sc)

现在“非常大的特征值”警告消失了,但我们仍然有“非整数#成功”警告,并且最大| grad | = 0.082。让我们尝试另一个优化器:

dat.asr3scbobyqa <- update(dat.asr3sc,
                     control=glmerControl(optimizer="bobyqa"))

现在只剩下“非整数#successes”警告。

d1 <- deviance(dat.asr3)
d2 <- deviance(dat.asr3sc)
d3 <- deviance(dat.asr3scbobyqa)
c(d1,d2,d3)
## [1] 12597.12 12597.31 12597.56

这些偏差并没有太大差异(偏差等级上的0.44超过可以通过舍入误差来解释,但是拟合优度没有太大差异);实际上,第一个模型给出了最佳(最低)偏差,表明警告是误报......

resp <- with(data2,csns*start)
plot(table(resp-floor(resp)))

enter image description here

这清楚地表明确实存在非整数响应,因此警告是正确的。