虽然非常简单,但基于lme4的逻辑回归混合效应模型是奇异的

5

我试图运行一个相对简单的glmer模型,但收到了Singular警告,我无法弄清原因。

在我的数据集中,有40个参与者参加了108次试验。他们回答了一个问题(回答被编码为正确/不正确 - 0/1),并在0到1的连续尺度上评估了他们的回答信心。

library(lme4)
library(tidybayes)
library(tidyverse)

set.seed(5)
n_trials = 108
n_subjs = 40
data =
  tibble(
    subject = as.factor(rep(c(1:n_subjs), n_trials)),
    correct = sample(c(0,1), replace=TRUE, size=(n_trials*n_subjs)),
    confidence = runif(n_trials*n_subjs)
  )

我希望运行一个混合效应的逻辑回归,以估计每个参与者仅将高置信度与正确响应相关联的能力。这意味着,我有充分的理由在模型中添加置信度的随机斜率。

我感兴趣的最简单模型是:

model = glmer(correct ~ confidence + (confidence|subject) , 
                   data = data,  
                   family = binomial)

边界(单数)契合:参见?isSingular,以及

> isSingular(model)
[1] TRUE

所以我将模型简化到超出有用的程度,得到了同样的问题:

model = glmer(correct ~ confidence + (1|subject) , 
              data = data,  
              family = binomial)

我尝试对置信度进行分组(我相信还有更优雅的方法),但这并没有帮助:

#Initialize as vector of 0s
data$confidence_binned <- numeric(dim(data)[1])
nbins = 4
bins=seq(0,1,length.out = (nbins+1))
for (b in 1:(length(bins)-1)) {
  data$confidence_binned[data$confidence>=bins[b] & data$confidence<bins[b+1]] = b
}
data$confidence_binned[data$confidence_binned==1]=nbins


model = glmer(correct ~ confidence_binned + (confidence_binned|subject) , 
              data = data,  
              family = binomial)

boundary (singular) fit: 参见 ?isSingular。

关于 isSingular 警告有很多帖子和 SO 问题,但我找到的所有内容都说模型对数据太复杂,解决方案通常是“保持最大化”。然而,这个模型尽可能简单,我很困惑,即使进行了足够的试验,它仍然失败(听起来像是)。

我还尝试更改控制器,但没有帮助:

ctrl = glmerControl(optimizer = "bobyqa",
                    boundary.tol = 1e-5,
                    calc.derivs=TRUE,
                    use.last.params=FALSE,
                    sparseX = FALSE,
                    tolPwrss=1e-7,
                    compDev=TRUE,
                    nAGQ0initStep=TRUE, 
                    ## optimizer args
                    optCtrl = list(maxfun = 1e5))

model  <- glmer(correct ~ confidence_binned + (confidence_binned|subject), 
                data=data, 
                verbose=T, 
                control=ctrl,
                family = binomial)


任何有关数据注意事项的帮助或指针都将不胜感激。
回应评论的编辑ggplot(data,aes(x=subject, y=correct)) + stat_summary(fun.data=mean_cl_normal)的结果如下图所示: enter image description here

如果在生成模型中没有关联,并且主体之间没有方差(或方差估计为零) - 并且在您的模拟数据中也没有这种情况,因为它只是随机的 - 那么您可能会收到有关奇异性的警告。 ggplot(data,aes(x = subject,y = correct))+ stat_summary(fun.data = mean_cl_normal) 看起来如何? - user20650
我已经编辑了问题,包括剧情。 我觉得它看起来没有问题。 - elisa
谢谢,这是针对模拟数据的 -- 对于模拟数据,随机效应方差为零似乎很清楚,因此会出现奇异警告 -- 因为你只是随机生成数据。如果我在观察图形,我会认为组之间没有太大的差异 -- 但希望更有经验的分析师能发表评论。你的真实数据的图形看起来如何? - user20650
@user20650 那是真实数据的情节...(对于模拟数据,我预计准确率应该在50%左右) - elisa
同意:任何组之间没有太大的区别(也没有组)。我只是想得到从模型中估计出来的特定主题的随机斜率。感谢任何帮助!非常感激。 - elisa
啊,原来如此,真抱歉我没有仔细看。是的,对我来说这些组之间似乎没有太大的区别,但我很谨慎,不想给您错误的建议。您能否在没有协变量的情况下估计随机截距模型而不出现警告? - user20650
1个回答

1
GLMMs带有相关的随机斜率和随机截距(也称为最大模型),即使在数据适合的情况下,它们也很难拟合,尽管有些人提倡这种方法。除非您看到一些严重波动的个体或项目方差与他们的随机斜率预测因子相关,否则我的最佳建议是仅拟合随机截距模型并查看是否更适合。
有关此主题的三篇综合论文,请参见下文。第一篇论文经常被引用为最大方法。第二篇是由创建lme4软件包的人撰写的,他提出了简洁模型的论点。第三篇是Bates推荐的另一篇同行评审论文。
引用:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接