我是混合模型新手,但在使模型收敛时遇到了一些麻烦。我已经查看了Stack Overflow和其他地方的其他问题,并在this工作表中进行了研究,但是没有运气。
我有一些变量来自清扫网样面和陷阱陷阱,例如丰度,多样性和生物量。实验设置为15个样地,在三种处理之间平均分配,每个样地被调查7次,总样本量为105。这里,我将以每次扫描网调查中发现的无脊椎动物的总丰度为例。这基本上是计数数据,具有泊松分布,很多零和一些更高的值:
由于零,我无法对数据进行对数转换,这使我无法从GLMM
包中进行泊松lme4
。我使用的公式是:
ab.sw <- glmer(Sweep.abund ~ Treatment * (as.factor(Set)) + (1|Plot),
data = Data, family = poisson)
集合是一个“调查集合”:我们研究中每个样地的一项调查。这是一个因素,因为调查在整个研究期间的分布不均,并且我们不希望研究期结束时的调查对我们的模型产生不成比例的影响。这段代码给我这个错误:
Warning messages:
1: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
Model failed to converge with max|grad| = 0.00381319 (tol = 0.001, component 1)
2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
Model is nearly unidentifiable: large eigenvalue ratio
- Rescale variables?
我无法重新缩放变量,因为它们都是因素。增加迭代次数会产生相同(或非常相似)的错误。我认为我的健身不是单数:
tt <- getME(ab.sw,"theta")
ll <- getME(ab.sw,"lower")
min(tt[ll==0])
[1] 0.3788906
我还尝试过对optimx
和all_fit
使用不同的优化器。以下是all_fit
的结果:
aa <- all_fit(ab.sw)
bobyqa. : [OK]
Nelder_Mead. : [OK]
optimx.nlminb : [OK]
optimx.L-BFGS-B : [OK]
nloptwrap.NLOPT_LN_NELDERMEAD : [ERROR]
nloptwrap.NLOPT_LN_BOBYQA : [ERROR]
nmkbw. : [ERROR]
is.OK <- sapply(aa,is,"merMod")
aa.OK <- aa[is.OK]
lapply(aa.OK,function(x) x@optinfo$conv$lme4$messages)
$bobyqa.
[1] "unable to evaluate scaled gradient"
[2] "Model failed to converge: degenerate Hessian with 4 negative eigenvalues"
$Nelder_Mead.
[1] "unable to evaluate scaled gradient"
[2] "Model failed to converge: degenerate Hessian with 3 negative eigenvalues"
$optimx.nlminb
[1] "unable to evaluate scaled gradient"
[2] "Model failed to converge: degenerate Hessian with 6 negative eigenvalues"
$`optimx.L-BFGS-B`
[1] "unable to evaluate scaled gradient"
[2] "Model failed to converge: degenerate Hessian with 6 negative eigenvalues"
我的梯度计算高于0.001阈值,这似乎是我的错误消息中的第一个警告内容:
derivs1 <- ab.sw@optinfo$derivs
sc_grad1 <- with(derivs1,solve(Hessian,gradient))
max(abs(sc_grad1))
[1] 0.003052968
我的数据有什么用,这阻碍了我的模型正常工作,我能做些什么来修复它?如果失败,是否还有其他建模方法可能适用于我的数据?
我正在将R版本3.4.3与lme4
版本1.1-13一起使用。