1

我正在使用该软件包运行 LME 模型,lme4然后使用该lsmeans软件包进行成对比较。

这是我的代码:

lmer_full <- lmer (VOT ~ Place*Laryngeal + (1+Place+Laryngeal|Sp), 
    data = LME,control=lmerControl(optCtrl=list(maxfun=50000)))

lsmeans (lmer_full, pairwise~Laryngeal|Place)

但是,运行后我收到以下错误消息lmer

固定效应模型矩阵秩不足,因此删除 1 列/系数
警告消息:
1:在 checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 无法评估缩放梯度
2:在checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 模型收敛失败:具有 1 个负特征值的退化 Hessian

然后运行后出现另一个错误lsmeans

错误base::chol2inv(x, ...) : 'a'必须是数字矩阵

这是我的数据结构:

数据结构

如果有人能告诉我该模型有什么问题,我将不胜感激。

4

1 回答 1

1

tl;博士我无法完全重现您的错误,但我可以非常接近。对于您想要拟合的模型,您的数据集很可能太小/太嘈杂(您得到的是一个奇异模型);使用emmeans包(它是 的继承者lsmeans)会有所帮助,但您可能应该简化您的模型。

  1. 从一个大的、完全交叉的数据集开始:
library(lme4)
library(emmeans)
dd <- expand.grid(Place=factor(1:3),Laryngeal=factor(1:3),
                  Sp=factor(1:10),rep=6)
set.seed(101)
dd$y <- rnorm(nrow(dd))

This works fine:

m1 <- lmer(y~Place*Laryngeal + (1+Place+Laryngeal|Sp), dd)
emmeans(m1,pairwise~Laryngeal|Place)  ## lsmeans() also works
  1. 减少数据集(删除一个级别组合)会导致“固定效应模型矩阵秩不足”消息,但一切正常:
dd_missing <- subset(dd,!(Place=="2" & Laryngeal=="2"))
m2 <- update(m1, data=dd_missing)
emmeans(m2,pairwise~Laryngeal|Place) ## lsmeans() also works
  1. 如果我们随机对一小部分数据进行二次抽样,我们会得到错误,尽管我不能用我的数据来做这件事,也不能告诉我lmer忽略数据集的一些其他问题(对于指定的随机效应数量而言,样本不足) :
set.seed(102)
dd_small <- dd_missing[sample(1:nrow(dd_missing),
                              size=round(nrow(dd_missing)*0.3),
                              replace=FALSE),]
m3 <- update(m1, data=dd_small,
             control=lmerControl(check.nobs.vs.nlev="ignore",
                                 check.nobs.vs.nRE="ignore",
                                 optCtrl=list(maxfun=50000)))


emmeans(m3,pairwise~Laryngeal|Place)  ## works (sort of)
lsmeans::lsmeans(m3,pairwise~Laryngeal|Place)  ## fails
  1. 最后,简化模型使事情变得更好:
m4 <- update(m3, . ~ Place*Laryngeal + (1+Place|Sp))
emmeans(m4,pairwise~Laryngeal|Place)
lsmeans::lsmeans(m4,pairwise~Laryngeal|Place)
于 2018-04-03T00:19:08.673 回答