1

我试图用来glmmTMB运行我的模型的多次迭代,但不断收到相同的持续错误。我试图在下面解释我的实验并插入我试图运行的完整模型。

实验背景

我试图建模的因变量是细菌 16S 基因拷贝数,在这种情况下用作细菌生物量的代表。

实验设计是我有来自 8 条河流的河流沉积物,这些河流沿着污染梯度下降(影响到原始)。(因子 1 = 流,有 8 个级别)。

对于 8 个流中的每一个,执行以下操作,将沉积物添加到 6 个托盘中。将这些托盘中的 3 个置于加热至 13°C 的人工流道中,而将其他 3 个加热至 17°C(因素 2 = 加热处理,具有 2 个级别)。总共有 16 个通道,温热处理被随机分配到一个通道。

然后我在四个时间点重复测量每个流通道中的 3 个托盘(因子 3 = 天,有 4 个级别)。

目前,我将托盘视为真正的生物复制品,而不是伪复制品,因为托盘在通道中彼此相距相当远,但这有待探索。

总结一下:模型项是(都被指定为因子):

  • 加温处理(13 与 17oC)
  • 流 ID (1,2,3,4,5,6,7,8)
  • 第一天(T1、T4、T7、T14)

我提出的完整模型是,

X4_tmb.nb2<-glmmTMB(CopyNo~Treatment*Stream*Time, family=nbinom2, data=qPCR)   

即使这个版本的模型不包含随机效果,我想使用glmmTMB包而不是运行这个 using lme4,因为我想探索添加模型组件以解决分散问题的想法,并探索添加的选项托盘作为随机效果(不确定这是否正确)。通过在 中运行模型的所有版本glmmTMB,我可以自信地比较他们的 AIC 分数。如果我在没有色散组件的情况下运行完整模型而lme4其他使用glmmTMB.

不幸的是,对于使用 glmmTMB 时完整模型的大多数迭代(我的意思是按顺序删除模型项),我会收到相同的持续警告:

警告信息: In fitTMB(TMBStruc) : 模型收敛问题;错误收敛 (8)。见小插图('疑难解答')

我试图理解错误,但我很难理解,因为令人困惑的是,当我使用 lme4 运行完整模型时,它运行时没有错误。

这是在 lme4 中运行的完整模型的版本,

X4 = glm.nb(CopyNo~Treatment*Stream*Time, data = qPCR

据我通过阅读https://www.biorxiv.org/content/10.1101/132753v1.full.pdf @ line 225 了解到,可以使用此包在 GLM 和 GLMM 之间进行交叉比较。你知道我是否理解正确吗?

我还使用该DHARMa软件包来帮助验证模型和未能收敛的版本glmmTMB,通过 KStest、分散测试、异常值测试和组合调整分位数测试,但理想情况下我不希望收敛错误。

任何帮助将不胜感激。

4

1 回答 1

0

这里有一堆。

警告信息

不幸的是,很难做到这一点:这是一个出了名的晦涩难懂的错误信息。正如twitter 上的建议,您可以尝试不同的优化器,例如包括

 control = glmmTMBControl(optimizer = optim, optArgs = list(method="BFGS"))

在您的通话中。希望这将给出一个非常相似的答案(在这种情况下,您得出结论认为收敛警告可能是误报,因为不同的优化器不太可能以相同的方式失败)而没有警告。(您可以尝试method="CG"以上作为第三种选择。)(请注意,在使用最近修复的替代优化器时,打印和汇总输出存在一个小错误;如果您在修复传播之前正在处理此问题,则可能需要安装开发版本到克兰。)

“lme4”模型

glm.nb()功能不是来自lme4包,而是来自MASS包。如果您将使用的模型中有随机效应glmer.nb(),它包中lme4......与上面的优化器切换测试一样,如果您得到类似的答案glmmTMB并且glm.nb您可以得出结论,警告来自glmmTMB(实际上,它来自nlminb()优化器内部glmmTMB调用)可能是误报。

检查来自不同包的可能性/AIC 是否相称的最简单方法是在两个包中拟合相同的模型,如果可能的话,例如

library(MASS)
library(glmmTMB)

quine.nb1 <- glm.nb(Days ~ Sex/(Age + Eth*Lrn), data = quine)
quine.nb2 <- glmmTMB(Days ~ Sex/(Age + Eth*Lrn), data = quine,
                     family=nbinom2)
all.equal(AIC(quine.nb1),AIC(quine.nb2))  ## TRUE

其他详情

您的模型可能存在的问题之一是,通过拟合三个分类变量的完整三向交互,您试图估计 (2*4*8=) 64 个参数,到 64*3=192 个观察值(如果我理解你的实验设计正确)。这更有可能遇到数值问题(如上所述)并且可能给出不精确的结果。尽管有些人推荐它,但我个人并不推荐模型选择方法(所有子集或顺序,基于 AIC 或基于 p 值);我建议将 Stream 变成随机效果,即

CopyNo ~ Treatment + (Treatment|StreamID) + (1|Time/StreamID)

这符合(1)整体治疗效果;(2) 跨流的变化,跨流的处理效果的变化;(3) 时间点内跨时间和跨流的变化。这仅使用 2(固定:截距 + 处理)+ 3(截距方差、处理方差及其跨流的协方差)+ 2(时间和流之间的时间方差)。这不是“最大”模型;由于在每个流中每次都测量两种处理,因此最后一项可能是 (Treatment|Time/StreamID),但这会增加很多模型复杂性。由于 4 组对于随机效果来说并不多,您可能会发现您希望将最后一项设为Time + (1|Time:StreamID),这将适合 Time 作为固定且(在时间内流)作为随机...

于 2020-06-19T23:49:35.933 回答