Who Knows

Comparing lme4 and brms

Load data

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(brms)
## Loading required package: Rcpp
## Loading 'brms' package (version 2.22.0). Useful instructions
## can be found by typing help('brms'). A more detailed introduction
## to the package is available through vignette('brms_overview').
## 
## Attaching package: 'brms'
## The following object is masked from 'package:stats':
## 
##     ar
library(cmdstanr)
## This is cmdstanr version 0.8.1
## - CmdStanR documentation and vignettes: mc-stan.org/cmdstanr
## - CmdStan path: /home/sc.uni-leipzig.de/xl76asob/.cmdstan/cmdstan-2.36.0
## - CmdStan version: 2.36.0
app_data <- read.csv("../data/responses_2025-02-09.csv") %>% as_tibble()

app_data <- app_data %>% 
  mutate(item_type = case_when(
    response_option_8 == 8 ~ "rating",
    response_option_2 == "Nein" ~ "yes_no",
    response_option_1 == "weiß es" ~ "knowledge",
    TRUE ~ "pick_free_response")) %>% 
  group_by(user_id) %>% 
  mutate(played_games = n() / 5) %>% 
  ungroup()


table(app_data$item_type)
## 
##          knowledge pick_free_response             rating             yes_no 
##             131707             224838             119670             305578
app_data %>% group_by(item_type) %>% 
  summarise(mean(response_is_correct))
## # A tibble: 4 × 2
##   item_type          `mean(response_is_correct)`
##   <chr>                                    <dbl>
## 1 knowledge                                0.654
## 2 pick_free_response                       0.374
## 3 rating                                   0.385
## 4 yes_no                                   0.586
users <- read.csv("../data/users_2025-02-09.csv") %>% as_tibble()
app_data$item_user_id <- paste(app_data$item_id, app_data$user_id, sep = "_")

app_data$user_target_id <- paste(app_data$user_id, app_data$target_id, sep = "_")

app_data$item_target_id <- paste(app_data$item_id, app_data$target_id, sep = "_")

app_data_X <- app_data %>% sample_n(1000)

red_app_data <- app_data %>% 
  filter(played_games > 9) %>% 
  group_by(user_id) %>% 
  filter(n_distinct(target_id) > 10)

red_yes_no <- red_app_data %>% 
  filter(item_type == "yes_no")

red_yes_no <- red_yes_no %>% left_join(users, by = "user_id")

options(brms.backend = "cmdstanr", mc.cores = 4, brms.file_refit = "on_change")

push <- function(model) {
  msg <- paste(capture.output(summary(model)),collapse = "\n")
  msg <- stringr::str_sub(msg, 360, 360 + 1023)
  pushoverr::pushover(msg, deparse(substitute(model)), app = "a7qjzcymviuyhn7ofq6poh3da3tr5h")
}
library(lme4)
## Loading required package: Matrix
## 
## Attaching package: 'lme4'
## The following object is masked from 'package:brms':
## 
##     ngrps
correct_lme4 <- glmer(response_is_correct ~ 1 + (1 | item_id) + (1 | user_id) + (1 | target_id) + (1 | item_id:target_id), data = red_yes_no, family = binomial("logit"))

push(correct_lme4)
summary(correct_lme4)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: response_is_correct ~ 1 + (1 | item_id) + (1 | user_id) + (1 |  
##     target_id) + (1 | item_id:target_id)
##    Data: red_yes_no
## 
##       AIC       BIC    logLik  deviance  df.resid 
##  326148.4  326201.2 -163069.2  326138.4    281685 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -7.8646 -0.8022  0.3875  0.7120  4.8052 
## 
## Random effects:
##  Groups            Name        Variance Std.Dev.
##  user_id           (Intercept) 0.01209  0.1100  
##  item_id:target_id (Intercept) 1.16995  1.0816  
##  item_id           (Intercept) 0.22557  0.4749  
##  target_id         (Intercept) 0.00402  0.0634  
## Number of obs: 281690, groups:  
## user_id, 3744; item_id:target_id, 2200; item_id, 215; target_id, 75
## 
## Fixed effects:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  0.44244    0.04181   10.58   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
correct_brms <- brm(
  response_is_correct ~ 1 + (1 | item_id) + (1 | user_id) + (1 | target_id) + (1 | item_id:target_id), 
    data = red_yes_no, 
  family = bernoulli("logit"), 
  file = "red_m_correct_main_yes_no_lme4_comp",
  threads = threading(4),
  iter = 6000,
  prior = prior(normal(0, 1), class = sd)
)
## Start sampling
## Running MCMC with 4 parallel chains, with 4 thread(s) per chain...
## 
## Chain 1 Iteration:    1 / 6000 [  0%]  (Warmup) 
## Chain 2 Iteration:    1 / 6000 [  0%]  (Warmup) 
## Chain 3 Iteration:    1 / 6000 [  0%]  (Warmup) 
## Chain 4 Iteration:    1 / 6000 [  0%]  (Warmup) 
## Chain 2 Iteration:  100 / 6000 [  1%]  (Warmup) 
## Chain 3 Iteration:  100 / 6000 [  1%]  (Warmup) 
## Chain 1 Iteration:  100 / 6000 [  1%]  (Warmup) 
## Chain 4 Iteration:  100 / 6000 [  1%]  (Warmup) 
## Chain 2 Iteration:  200 / 6000 [  3%]  (Warmup) 
## Chain 3 Iteration:  200 / 6000 [  3%]  (Warmup) 
## Chain 1 Iteration:  200 / 6000 [  3%]  (Warmup) 
## Chain 4 Iteration:  200 / 6000 [  3%]  (Warmup) 
## Chain 2 Iteration:  300 / 6000 [  5%]  (Warmup) 
## Chain 1 Iteration:  300 / 6000 [  5%]  (Warmup) 
## Chain 4 Iteration:  300 / 6000 [  5%]  (Warmup) 
## Chain 3 Iteration:  300 / 6000 [  5%]  (Warmup) 
## Chain 2 Iteration:  400 / 6000 [  6%]  (Warmup) 
## Chain 1 Iteration:  400 / 6000 [  6%]  (Warmup) 
## Chain 3 Iteration:  400 / 6000 [  6%]  (Warmup) 
## Chain 4 Iteration:  400 / 6000 [  6%]  (Warmup) 
## Chain 2 Iteration:  500 / 6000 [  8%]  (Warmup) 
## Chain 3 Iteration:  500 / 6000 [  8%]  (Warmup) 
## Chain 4 Iteration:  500 / 6000 [  8%]  (Warmup) 
## Chain 1 Iteration:  500 / 6000 [  8%]  (Warmup) 
## Chain 2 Iteration:  600 / 6000 [ 10%]  (Warmup) 
## Chain 3 Iteration:  600 / 6000 [ 10%]  (Warmup) 
## Chain 4 Iteration:  600 / 6000 [ 10%]  (Warmup) 
## Chain 2 Iteration:  700 / 6000 [ 11%]  (Warmup) 
## Chain 3 Iteration:  700 / 6000 [ 11%]  (Warmup) 
## Chain 1 Iteration:  600 / 6000 [ 10%]  (Warmup) 
## Chain 2 Iteration:  800 / 6000 [ 13%]  (Warmup) 
## Chain 4 Iteration:  700 / 6000 [ 11%]  (Warmup) 
## Chain 3 Iteration:  800 / 6000 [ 13%]  (Warmup) 
## Chain 2 Iteration:  900 / 6000 [ 15%]  (Warmup) 
## Chain 4 Iteration:  800 / 6000 [ 13%]  (Warmup) 
## Chain 1 Iteration:  700 / 6000 [ 11%]  (Warmup) 
## Chain 3 Iteration:  900 / 6000 [ 15%]  (Warmup) 
## Chain 4 Iteration:  900 / 6000 [ 15%]  (Warmup) 
## Chain 2 Iteration: 1000 / 6000 [ 16%]  (Warmup) 
## Chain 3 Iteration: 1000 / 6000 [ 16%]  (Warmup) 
## Chain 1 Iteration:  800 / 6000 [ 13%]  (Warmup) 
## Chain 4 Iteration: 1000 / 6000 [ 16%]  (Warmup) 
## Chain 2 Iteration: 1100 / 6000 [ 18%]  (Warmup) 
## Chain 3 Iteration: 1100 / 6000 [ 18%]  (Warmup) 
## Chain 1 Iteration:  900 / 6000 [ 15%]  (Warmup) 
## Chain 4 Iteration: 1100 / 6000 [ 18%]  (Warmup) 
## Chain 2 Iteration: 1200 / 6000 [ 20%]  (Warmup) 
## Chain 1 Iteration: 1000 / 6000 [ 16%]  (Warmup) 
## Chain 4 Iteration: 1200 / 6000 [ 20%]  (Warmup) 
## Chain 2 Iteration: 1300 / 6000 [ 21%]  (Warmup) 
## Chain 3 Iteration: 1200 / 6000 [ 20%]  (Warmup) 
## Chain 1 Iteration: 1100 / 6000 [ 18%]  (Warmup) 
## Chain 4 Iteration: 1300 / 6000 [ 21%]  (Warmup) 
## Chain 2 Iteration: 1400 / 6000 [ 23%]  (Warmup) 
## Chain 3 Iteration: 1300 / 6000 [ 21%]  (Warmup) 
## Chain 4 Iteration: 1400 / 6000 [ 23%]  (Warmup) 
## Chain 1 Iteration: 1200 / 6000 [ 20%]  (Warmup) 
## Chain 2 Iteration: 1500 / 6000 [ 25%]  (Warmup) 
## Chain 3 Iteration: 1400 / 6000 [ 23%]  (Warmup) 
## Chain 4 Iteration: 1500 / 6000 [ 25%]  (Warmup) 
## Chain 1 Iteration: 1300 / 6000 [ 21%]  (Warmup) 
## Chain 2 Iteration: 1600 / 6000 [ 26%]  (Warmup) 
## Chain 3 Iteration: 1500 / 6000 [ 25%]  (Warmup) 
## Chain 4 Iteration: 1600 / 6000 [ 26%]  (Warmup) 
## Chain 1 Iteration: 1400 / 6000 [ 23%]  (Warmup) 
## Chain 2 Iteration: 1700 / 6000 [ 28%]  (Warmup) 
## Chain 4 Iteration: 1700 / 6000 [ 28%]  (Warmup) 
## Chain 1 Iteration: 1500 / 6000 [ 25%]  (Warmup) 
## Chain 3 Iteration: 1600 / 6000 [ 26%]  (Warmup) 
## Chain 2 Iteration: 1800 / 6000 [ 30%]  (Warmup) 
## Chain 4 Iteration: 1800 / 6000 [ 30%]  (Warmup) 
## Chain 1 Iteration: 1600 / 6000 [ 26%]  (Warmup) 
## Chain 3 Iteration: 1700 / 6000 [ 28%]  (Warmup) 
## Chain 4 Iteration: 1900 / 6000 [ 31%]  (Warmup) 
## Chain 2 Iteration: 1900 / 6000 [ 31%]  (Warmup) 
## Chain 1 Iteration: 1700 / 6000 [ 28%]  (Warmup) 
## Chain 3 Iteration: 1800 / 6000 [ 30%]  (Warmup) 
## Chain 4 Iteration: 2000 / 6000 [ 33%]  (Warmup) 
## Chain 2 Iteration: 2000 / 6000 [ 33%]  (Warmup) 
## Chain 1 Iteration: 1800 / 6000 [ 30%]  (Warmup) 
## Chain 4 Iteration: 2100 / 6000 [ 35%]  (Warmup) 
## Chain 3 Iteration: 1900 / 6000 [ 31%]  (Warmup) 
## Chain 1 Iteration: 1900 / 6000 [ 31%]  (Warmup) 
## Chain 2 Iteration: 2100 / 6000 [ 35%]  (Warmup) 
## Chain 4 Iteration: 2200 / 6000 [ 36%]  (Warmup) 
## Chain 3 Iteration: 2000 / 6000 [ 33%]  (Warmup) 
## Chain 1 Iteration: 2000 / 6000 [ 33%]  (Warmup) 
## Chain 2 Iteration: 2200 / 6000 [ 36%]  (Warmup) 
## Chain 4 Iteration: 2300 / 6000 [ 38%]  (Warmup) 
## Chain 1 Iteration: 2100 / 6000 [ 35%]  (Warmup) 
## Chain 3 Iteration: 2100 / 6000 [ 35%]  (Warmup) 
## Chain 2 Iteration: 2300 / 6000 [ 38%]  (Warmup) 
## Chain 4 Iteration: 2400 / 6000 [ 40%]  (Warmup) 
## Chain 1 Iteration: 2200 / 6000 [ 36%]  (Warmup) 
## Chain 3 Iteration: 2200 / 6000 [ 36%]  (Warmup) 
## Chain 4 Iteration: 2500 / 6000 [ 41%]  (Warmup) 
## Chain 2 Iteration: 2400 / 6000 [ 40%]  (Warmup) 
## Chain 1 Iteration: 2300 / 6000 [ 38%]  (Warmup) 
## Chain 3 Iteration: 2300 / 6000 [ 38%]  (Warmup) 
## Chain 4 Iteration: 2600 / 6000 [ 43%]  (Warmup) 
## Chain 2 Iteration: 2500 / 6000 [ 41%]  (Warmup) 
## Chain 1 Iteration: 2400 / 6000 [ 40%]  (Warmup) 
## Chain 3 Iteration: 2400 / 6000 [ 40%]  (Warmup) 
## Chain 4 Iteration: 2700 / 6000 [ 45%]  (Warmup) 
## Chain 1 Iteration: 2500 / 6000 [ 41%]  (Warmup) 
## Chain 2 Iteration: 2600 / 6000 [ 43%]  (Warmup) 
## Chain 4 Iteration: 2800 / 6000 [ 46%]  (Warmup) 
## Chain 3 Iteration: 2500 / 6000 [ 41%]  (Warmup) 
## Chain 1 Iteration: 2600 / 6000 [ 43%]  (Warmup) 
## Chain 2 Iteration: 2700 / 6000 [ 45%]  (Warmup) 
## Chain 4 Iteration: 2900 / 6000 [ 48%]  (Warmup) 
## Chain 3 Iteration: 2600 / 6000 [ 43%]  (Warmup) 
## Chain 1 Iteration: 2700 / 6000 [ 45%]  (Warmup) 
## Chain 2 Iteration: 2800 / 6000 [ 46%]  (Warmup) 
## Chain 1 Iteration: 2800 / 6000 [ 46%]  (Warmup) 
## Chain 3 Iteration: 2700 / 6000 [ 45%]  (Warmup) 
## Chain 4 Iteration: 3000 / 6000 [ 50%]  (Warmup) 
## Chain 4 Iteration: 3001 / 6000 [ 50%]  (Sampling) 
## Chain 2 Iteration: 2900 / 6000 [ 48%]  (Warmup) 
## Chain 1 Iteration: 2900 / 6000 [ 48%]  (Warmup) 
## Chain 2 Iteration: 3000 / 6000 [ 50%]  (Warmup) 
## Chain 2 Iteration: 3001 / 6000 [ 50%]  (Sampling) 
## Chain 3 Iteration: 2800 / 6000 [ 46%]  (Warmup) 
## Chain 4 Iteration: 3100 / 6000 [ 51%]  (Sampling) 
## Chain 2 Iteration: 3100 / 6000 [ 51%]  (Sampling) 
## Chain 1 Iteration: 3000 / 6000 [ 50%]  (Warmup) 
## Chain 1 Iteration: 3001 / 6000 [ 50%]  (Sampling) 
## Chain 3 Iteration: 2900 / 6000 [ 48%]  (Warmup) 
## Chain 2 Iteration: 3200 / 6000 [ 53%]  (Sampling) 
## Chain 1 Iteration: 3100 / 6000 [ 51%]  (Sampling) 
## Chain 3 Iteration: 3000 / 6000 [ 50%]  (Warmup) 
## Chain 3 Iteration: 3001 / 6000 [ 50%]  (Sampling) 
## Chain 4 Iteration: 3200 / 6000 [ 53%]  (Sampling) 
## Chain 2 Iteration: 3300 / 6000 [ 55%]  (Sampling) 
## Chain 1 Iteration: 3200 / 6000 [ 53%]  (Sampling) 
## Chain 3 Iteration: 3100 / 6000 [ 51%]  (Sampling) 
## Chain 2 Iteration: 3400 / 6000 [ 56%]  (Sampling) 
## Chain 1 Iteration: 3300 / 6000 [ 55%]  (Sampling) 
## Chain 3 Iteration: 3200 / 6000 [ 53%]  (Sampling) 
## Chain 4 Iteration: 3300 / 6000 [ 55%]  (Sampling) 
## Chain 2 Iteration: 3500 / 6000 [ 58%]  (Sampling) 
## Chain 1 Iteration: 3400 / 6000 [ 56%]  (Sampling) 
## Chain 3 Iteration: 3300 / 6000 [ 55%]  (Sampling) 
## Chain 2 Iteration: 3600 / 6000 [ 60%]  (Sampling) 
## Chain 1 Iteration: 3500 / 6000 [ 58%]  (Sampling) 
## Chain 3 Iteration: 3400 / 6000 [ 56%]  (Sampling) 
## Chain 2 Iteration: 3700 / 6000 [ 61%]  (Sampling) 
## Chain 4 Iteration: 3400 / 6000 [ 56%]  (Sampling) 
## Chain 1 Iteration: 3600 / 6000 [ 60%]  (Sampling) 
## Chain 3 Iteration: 3500 / 6000 [ 58%]  (Sampling) 
## Chain 2 Iteration: 3800 / 6000 [ 63%]  (Sampling) 
## Chain 1 Iteration: 3700 / 6000 [ 61%]  (Sampling) 
## Chain 3 Iteration: 3600 / 6000 [ 60%]  (Sampling) 
## Chain 2 Iteration: 3900 / 6000 [ 65%]  (Sampling) 
## Chain 4 Iteration: 3500 / 6000 [ 58%]  (Sampling) 
## Chain 1 Iteration: 3800 / 6000 [ 63%]  (Sampling) 
## Chain 3 Iteration: 3700 / 6000 [ 61%]  (Sampling) 
## Chain 2 Iteration: 4000 / 6000 [ 66%]  (Sampling) 
## Chain 1 Iteration: 3900 / 6000 [ 65%]  (Sampling) 
## Chain 3 Iteration: 3800 / 6000 [ 63%]  (Sampling) 
## Chain 2 Iteration: 4100 / 6000 [ 68%]  (Sampling) 
## Chain 4 Iteration: 3600 / 6000 [ 60%]  (Sampling) 
## Chain 1 Iteration: 4000 / 6000 [ 66%]  (Sampling) 
## Chain 2 Iteration: 4200 / 6000 [ 70%]  (Sampling) 
## Chain 3 Iteration: 3900 / 6000 [ 65%]  (Sampling) 
## Chain 1 Iteration: 4100 / 6000 [ 68%]  (Sampling) 
## Chain 2 Iteration: 4300 / 6000 [ 71%]  (Sampling) 
## Chain 3 Iteration: 4000 / 6000 [ 66%]  (Sampling) 
## Chain 4 Iteration: 3700 / 6000 [ 61%]  (Sampling) 
## Chain 1 Iteration: 4200 / 6000 [ 70%]  (Sampling) 
## Chain 2 Iteration: 4400 / 6000 [ 73%]  (Sampling) 
## Chain 3 Iteration: 4100 / 6000 [ 68%]  (Sampling) 
## Chain 1 Iteration: 4300 / 6000 [ 71%]  (Sampling) 
## Chain 2 Iteration: 4500 / 6000 [ 75%]  (Sampling) 
## Chain 3 Iteration: 4200 / 6000 [ 70%]  (Sampling) 
## Chain 4 Iteration: 3800 / 6000 [ 63%]  (Sampling) 
## Chain 2 Iteration: 4600 / 6000 [ 76%]  (Sampling) 
## Chain 1 Iteration: 4400 / 6000 [ 73%]  (Sampling) 
## Chain 3 Iteration: 4300 / 6000 [ 71%]  (Sampling) 
## Chain 2 Iteration: 4700 / 6000 [ 78%]  (Sampling) 
## Chain 1 Iteration: 4500 / 6000 [ 75%]  (Sampling) 
## Chain 3 Iteration: 4400 / 6000 [ 73%]  (Sampling) 
## Chain 4 Iteration: 3900 / 6000 [ 65%]  (Sampling) 
## Chain 2 Iteration: 4800 / 6000 [ 80%]  (Sampling) 
## Chain 1 Iteration: 4600 / 6000 [ 76%]  (Sampling) 
## Chain 3 Iteration: 4500 / 6000 [ 75%]  (Sampling) 
## Chain 2 Iteration: 4900 / 6000 [ 81%]  (Sampling) 
## Chain 1 Iteration: 4700 / 6000 [ 78%]  (Sampling) 
## Chain 3 Iteration: 4600 / 6000 [ 76%]  (Sampling) 
## Chain 4 Iteration: 4000 / 6000 [ 66%]  (Sampling) 
## Chain 2 Iteration: 5000 / 6000 [ 83%]  (Sampling) 
## Chain 1 Iteration: 4800 / 6000 [ 80%]  (Sampling) 
## Chain 3 Iteration: 4700 / 6000 [ 78%]  (Sampling) 
## Chain 2 Iteration: 5100 / 6000 [ 85%]  (Sampling) 
## Chain 1 Iteration: 4900 / 6000 [ 81%]  (Sampling) 
## Chain 3 Iteration: 4800 / 6000 [ 80%]  (Sampling) 
## Chain 4 Iteration: 4100 / 6000 [ 68%]  (Sampling) 
## Chain 2 Iteration: 5200 / 6000 [ 86%]  (Sampling) 
## Chain 3 Iteration: 4900 / 6000 [ 81%]  (Sampling) 
## Chain 1 Iteration: 5000 / 6000 [ 83%]  (Sampling) 
## Chain 2 Iteration: 5300 / 6000 [ 88%]  (Sampling) 
## Chain 3 Iteration: 5000 / 6000 [ 83%]  (Sampling) 
## Chain 1 Iteration: 5100 / 6000 [ 85%]  (Sampling) 
## Chain 4 Iteration: 4200 / 6000 [ 70%]  (Sampling) 
## Chain 2 Iteration: 5400 / 6000 [ 90%]  (Sampling) 
## Chain 3 Iteration: 5100 / 6000 [ 85%]  (Sampling) 
## Chain 1 Iteration: 5200 / 6000 [ 86%]  (Sampling) 
## Chain 2 Iteration: 5500 / 6000 [ 91%]  (Sampling) 
## Chain 3 Iteration: 5200 / 6000 [ 86%]  (Sampling) 
## Chain 1 Iteration: 5300 / 6000 [ 88%]  (Sampling) 
## Chain 4 Iteration: 4300 / 6000 [ 71%]  (Sampling) 
## Chain 2 Iteration: 5600 / 6000 [ 93%]  (Sampling) 
## Chain 3 Iteration: 5300 / 6000 [ 88%]  (Sampling) 
## Chain 1 Iteration: 5400 / 6000 [ 90%]  (Sampling) 
## Chain 2 Iteration: 5700 / 6000 [ 95%]  (Sampling) 
## Chain 3 Iteration: 5400 / 6000 [ 90%]  (Sampling) 
## Chain 1 Iteration: 5500 / 6000 [ 91%]  (Sampling) 
## Chain 4 Iteration: 4400 / 6000 [ 73%]  (Sampling) 
## Chain 2 Iteration: 5800 / 6000 [ 96%]  (Sampling) 
## Chain 3 Iteration: 5500 / 6000 [ 91%]  (Sampling) 
## Chain 1 Iteration: 5600 / 6000 [ 93%]  (Sampling) 
## Chain 2 Iteration: 5900 / 6000 [ 98%]  (Sampling) 
## Chain 3 Iteration: 5600 / 6000 [ 93%]  (Sampling) 
## Chain 1 Iteration: 5700 / 6000 [ 95%]  (Sampling) 
## Chain 2 Iteration: 6000 / 6000 [100%]  (Sampling) 
## Chain 2 finished in 4995.6 seconds.
## Chain 4 Iteration: 4500 / 6000 [ 75%]  (Sampling) 
## Chain 3 Iteration: 5700 / 6000 [ 95%]  (Sampling) 
## Chain 1 Iteration: 5800 / 6000 [ 96%]  (Sampling) 
## Chain 3 Iteration: 5800 / 6000 [ 96%]  (Sampling) 
## Chain 1 Iteration: 5900 / 6000 [ 98%]  (Sampling) 
## Chain 4 Iteration: 4600 / 6000 [ 76%]  (Sampling) 
## Chain 3 Iteration: 5900 / 6000 [ 98%]  (Sampling) 
## Chain 1 Iteration: 6000 / 6000 [100%]  (Sampling) 
## Chain 1 finished in 5164.0 seconds.
## Chain 3 Iteration: 6000 / 6000 [100%]  (Sampling) 
## Chain 3 finished in 5205.6 seconds.
## Chain 4 Iteration: 4700 / 6000 [ 78%]  (Sampling) 
## Chain 4 Iteration: 4800 / 6000 [ 80%]  (Sampling) 
## Chain 4 Iteration: 4900 / 6000 [ 81%]  (Sampling) 
## Chain 4 Iteration: 5000 / 6000 [ 83%]  (Sampling) 
## Chain 4 Iteration: 5100 / 6000 [ 85%]  (Sampling) 
## Chain 4 Iteration: 5200 / 6000 [ 86%]  (Sampling) 
## Chain 4 Iteration: 5300 / 6000 [ 88%]  (Sampling) 
## Chain 4 Iteration: 5400 / 6000 [ 90%]  (Sampling) 
## Chain 4 Iteration: 5500 / 6000 [ 91%]  (Sampling) 
## Chain 4 Iteration: 5600 / 6000 [ 93%]  (Sampling) 
## Chain 4 Iteration: 5700 / 6000 [ 95%]  (Sampling) 
## Chain 4 Iteration: 5800 / 6000 [ 96%]  (Sampling) 
## Chain 4 Iteration: 5900 / 6000 [ 98%]  (Sampling) 
## Chain 4 Iteration: 6000 / 6000 [100%]  (Sampling) 
## Chain 4 finished in 6507.5 seconds.
## 
## All 4 chains finished successfully.
## Mean chain execution time: 5468.2 seconds.
## Total execution time: 6508.6 seconds.
## Warning: 396 of 12000 (3.0%) transitions ended with a divergence.
## See https://mc-stan.org/misc/warnings for details.
## Loading required package: rstan
## Loading required package: StanHeaders
## 
## rstan version 2.36.0.9000 (Stan version 2.36.0)
## For execution on a local, multicore CPU with excess RAM we recommend calling
## options(mc.cores = parallel::detectCores()).
## To avoid recompilation of unchanged Stan programs, we recommend calling
## rstan_options(auto_write = TRUE)
## For within-chain threading using `reduce_sum()` or `map_rect()` Stan functions,
## change `threads_per_chain` option:
## rstan_options(threads_per_chain = 1)
push(correct_brms)
## Warning: There were 396 divergent transitions after warmup. Increasing
## adapt_delta above 0.8 may help. See
## http://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
correct_brms
## Warning: There were 396 divergent transitions after warmup. Increasing
## adapt_delta above 0.8 may help. See
## http://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
##  Family: bernoulli 
##   Links: mu = logit 
## Formula: response_is_correct ~ 1 + (1 | item_id) + (1 | user_id) + (1 | target_id) + (1 | item_id:target_id) 
##    Data: red_yes_no (Number of observations: 281690) 
##   Draws: 4 chains, each with iter = 6000; warmup = 3000; thin = 1;
##          total post-warmup draws = 12000
## 
## Multilevel Hyperparameters:
## ~item_id (Number of levels: 215) 
##               Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
## sd(Intercept)     0.48      0.04     0.41     0.56 1.00     1102     2516
## 
## ~item_id:target_id (Number of levels: 2200) 
##               Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
## sd(Intercept)     1.08      0.02     1.05     1.12 1.00     1774     3210
## 
## ~target_id (Number of levels: 75) 
##               Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
## sd(Intercept)     0.07      0.04     0.00     0.15 1.01      323     1025
## 
## ~user_id (Number of levels: 3744) 
##               Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
## sd(Intercept)     0.11      0.01     0.10     0.13 1.00     2895     3852
## 
## Regression Coefficients:
##           Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
## Intercept     0.44      0.04     0.36     0.52 1.00     2346     3621
## 
## Draws were sampled using sample(hmc). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
library(broom)
library(broom.mixed)
coefs = tidy(correct_lme4) %>% left_join(
tidy(correct_brms), suffix = c("_lme4" , "_brms"), by = c("term", "group", "effect"))
## Warning in tidy.brmsfit(correct_brms): some parameter names contain
## underscores: term naming may be unreliable!
library(ggplot2)
ggplot(coefs, aes(group, y = estimate_lme4)) +
  geom_pointrange(aes(y = estimate_brms, ymin = conf.low, ymax = conf.high), color = "blue") +
  geom_point(color = 'black', size = 3)

knitr::kable(coefs)
effect group term estimate_lme4 std.error_lme4 statistic p.value component estimate_brms std.error_brms conf.low conf.high
fixed NA (Intercept) 0.4424369 0.0418104 10.58199 0 cond 0.4428393 0.0421578 0.3588056 0.5244911
ran_pars user_id sd__(Intercept) 0.1099584 NA NA NA cond 0.1119621 0.0080651 0.0957348 0.1273051
ran_pars item_id:target_id sd__(Intercept) 1.0816406 NA NA NA cond 1.0840104 0.0191463 1.0462298 1.1212403
ran_pars item_id sd__(Intercept) 0.4749458 NA NA NA cond 0.4800211 0.0383217 0.4079923 0.5585523
ran_pars target_id sd__(Intercept) 0.0634014 NA NA NA cond 0.0677306 0.0398904 0.0034416 0.1467146