首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lmer模型的误差与lsmeans输出

lmer模型的误差与lsmeans输出
EN

Stack Overflow用户
提问于 2018-03-29 04:48:29
回答 1查看 1.1K关注 0票数 1

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

这是我的代码:

代码语言:javascript
复制
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,“衍生物”)中,选择$par,ctrl = control$checkConv,:无法计算缩放梯度 2:在checkConv(attr(opt,“导数”)中,opt$par,ctrl = control$checkConv,:Model未能收敛:退化Hessian,具有1个负特征值

然后运行lsmeans后的另一个错误:

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

以下是我的数据结构:

如果有人能告诉我模特出了什么问题,我会非常感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-03 00:19:08

博士我不能完全重现你的错误,但我可以接近你。您的数据集很可能太小/太吵,不适合您想要安装的模型(您得到了一个单一的模型);使用emmeans包(它是lsmeans的继承者)会有所帮助,但是您可能应该简化您的模型。

  1. 从一个大的、完全交叉的数据集开始:
代码语言:javascript
复制
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. 减少数据集(删除一个级别组合)会导致“固定效果模型矩阵缺乏秩”的消息,但一切都不一样:
代码语言:javascript
复制
dd_missing <- subset(dd,!(Place=="2" & Laryngeal=="2"))
m2 <- update(m1, data=dd_missing)
emmeans(m2,pairwise~Laryngeal|Place) ## lsmeans() also works
  1. 如果我们随机地将数据的一小部分进行子采样,我们就可以得到错误,尽管我无法在处理数据时不让lmer忽略数据集中的其他一些问题(对于指定的随机效应的数量,没有足够的样本):
代码语言:javascript
复制
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. 最后,简化模型会使事情变得更好:
代码语言:javascript
复制
m4 <- update(m3, . ~ Place*Laryngeal + (1+Place|Sp))
emmeans(m4,pairwise~Laryngeal|Place)
lsmeans::lsmeans(m4,pairwise~Laryngeal|Place)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49548240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档