我正在尝试使用glmmTMB来运行我的模型的一些迭代,但始终得到相同的持续错误。我试着在下面解释我的实验,并插入我想要运行的完整模型。
实验背景
我试图模拟的因变量是细菌16S基因拷贝数,在这种情况下用作细菌生物量的代名词。
实验设计是,我有来自8条河流的河流沉积物,它们沿着污染梯度下降(影响到原始的)。(因子1=流,有8级)。
对8条溪流中的每一条进行了以下操作,将沉积物添加到6个托盘中。其中3只被放置在温度13°C的人工河道中,其余3只被加热到17°C (因子2=升温处理,2级)。总共有16个通道,并随机将暖化处理分配到一个通道。
然后,我在四个时点重复测量每个溪流通道中的三个托盘(第3因子=日,有4个水平)。
此时此刻,我把托盘当作一个真正的生物复制物,而不是假的,因为托盘在通道中相距很远,但这是有待探索的。
因此,简单地总结一下:模型术语是(所有这些都被指定为因素):
我提出的完整模型是,
X4_tmb.nb2<-glmmTMB(CopyNo~Treatment*Stream*Time, family=nbinom2, data=qPCR) 尽管该模型的这个版本不包含随机效应,但我希望使用glmmTMB包,而不是使用lme4运行它,因为我想探索添加模型组件以考虑色散的想法,并探索添加托盘作为随机效应的选项(不确定这是否正确)。通过在glmmTMB中运行所有版本的模型,我能够自信地比较它们的AIC分数。如果没有lme4中的分散组件和使用glmmTMB的其他组件,我就无法运行完整的模型。
不幸的是,在使用glmmTMB时,对于整个模型的大多数迭代(我的意思是依次删除模型术语),我得到了相同的常量警告:
警告消息:在fitTMB(TMBStruc)中:模型收敛问题;假收敛(8)。见vignette(“故障排除”)
我试图理解这个错误,但是我很难理解,因为当我使用lme4运行完整的模型时,它没有任何错误。
这是运行在lme4中的完整模型的版本,
X4 = glm.nb(CopyNo~Treatment*Stream*Time, data = qPCR据我从https://www.biorxiv.org/content/10.1101/132753v1.full.pdf @第225行中了解到,可以使用这个包在GLMs和GLMs之间进行交叉比较。你知道我是否理解得对吗?
我还使用DHARMa包来帮助验证使用glmmTMB无法收敛的模型和版本,通过了KStest、色散检验、离群点检验和组合调整分位数检验,但理想情况下我不希望收敛误差。
任何帮助都将不胜感激。
发布于 2020-06-19 23:49:35
这里有一堆人。
警告讯息
不幸的是,很难做到这一点:它是一个声名狼藉的错误信息。作为推特上建议,您可以尝试不同的优化器,例如包括
control = glmmTMBControl(optimizer = optim, optArgs = list(method="BFGS"))在你的电话里。希望这将给出一个非常相似的答案(在这种情况下,您的结论是收敛警告可能是错误的,因为不同的优化器不可能以相同的方式失败)。(您可以尝试将上面的method="CG"作为第三种选择。)(请注意,在使用替代优化器(即最近修正了)时,有一个打印和总结输出的小错误;如果在修复程序传播到CRAN之前正在安装开发版本,则可能需要安装开发版本。)
"lme4“模型
glm.nb()函数不是来自lme4包,而是来自MASS包。如果模型中有随机效应,您将使用glmer.nb(),它在lme4包中.与上面的优化器切换测试一样,如果您在glmmTMB和glm.nb中得到类似的答案,您可以得出结论,来自glmmTMB的警告(实际上,来自glmmTMB内部调用的nlminb()优化器)可能是错误的。
检查来自不同包的可能性/AICs是否相称的最简单的方法是,如果可能的话,在两个包中安装相同的模型。
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值的);我建议将流变成随机效应,例如:
CopyNo ~ Treatment + (Treatment|StreamID) + (1|Time/StreamID)这符合(1)总体治疗效果;(2)跨流变化,跨流治疗效果变化;(3)跨时间和跨时间点跨流变化。这只使用2(固定的:截获+处理)+3(拦截方差、处理方差以及它们跨流的协方差)+2(时间和时间内的流之间的方差)。这并不完全是“最大”模型;因为这两种处理都是在每个流中的每一时间测量的,所以最后一项可能是(处理_由于4个组对随机效应的影响不大,您可能会发现,您希望将最后一个项放入Time + (1|Time:StreamID)中,这将使时间与固定的时间和(时间内的流)作为随机的.
https://stackoverflow.com/questions/62478569
复制相似问题