Logistic glmer {lme4}模型非常简单

时间:2020-09-22 08:54:38

标签: r lme4

我正在尝试运行一个相对简单的glmer模型,并收到警告说它是奇异的,我不知道为什么。

在我的数据集中,有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)

边界(奇异)拟合:请参阅?isSingular

关于isSingular警告,有很多帖子和特别的问题,但是我发现所有这些都说该模型对于数据来说太复杂了,解决方案通常是“保持最大”。但是,此模型尽可能简单,而且令我感到困惑的是,在进行足够多的尝试后,它仍然失败了。

我也尝试过更改控制器,但这没有帮助:

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

0 个答案:

没有答案