Skip to content

Binomial model with brms #1643

@daSilva5

Description

@daSilva5

Hi,

For odd.ratio contrasts avg_comparison is not returning compatible estimates with emmeans.

Code for reproducible example was borrowed from https://www.andrewheiss.com/blog/2023/05/15/fancy-bayes-diffs-props/#counts-and-trials-as-formula-outcomes

Load the data and run the model:

#install.packages("likert")
library(likert)

data("pisaitems", package = "likert")


reading_wide <- pisaitems %>% 

  mutate(id = 1:n()) %>%

  dplyr::select(id, country = CNT, `Comic books` = ST25Q02, Newspapers = ST25Q05) %>% 
 
  mutate(across(c(`Comic books`, Newspapers), 
                ~fct_collapse(
                  .,
                  "Rarely" = c("Never or almost never"),
                  "Sometimes" = c("A few times a year", "About once a month"),
                  "Often" = c("Several times a month", "Several times a week")))) %>% 

  mutate(across(c(`Comic books`, Newspapers), 
                ~fct_relevel(., c("Rarely", "Sometimes", "Often")))) %>% 

  mutate(country = fct_drop(country))




reading <- reading_wide %>% 
  pivot_longer(-c(id, country),
               names_to = "book_type",
               values_to = "frequency") %>% 
  drop_na(frequency)






reading_counts <- reading %>% 
  group_by(country, book_type, frequency) %>% 
  reframe(n = n()) %>% 
  group_by(country, book_type) %>% 
  mutate(total = sum(n),
         prop = n / sum(n),
non_n=total-n) %>% 
  ungroup()



often_comics_only <- reading_counts %>% 
  filter(book_type == "Comic books", frequency == "Often")

# GLM binomial
often_comics_glm_logit<-glm(cbind(n,non_n)~country,family=binomial,data=often_comics_only)


#BRMS binomial

often_comics_model_logit <- brm(
  bf(n | trials(total) ~ country),
  data = often_comics_only,
  family = binomial(link = "logit"),
  chains = 4, iter = 2000,
  refresh = 0
)


GLM contrasts match

avg_comparisons(
  often_comics_glm_logit,
  variables = list(country = "revpairwise"),
  comparison = "lnoravg",
  transform = "exp")

                               Contrast Estimate Pr(>|z|)     S 2.5 % 97.5 %
 ln(odds(Canada) / odds(Mexico))           0.407   <0.001   Inf  0.39  0.426
 ln(odds(Canada) / odds(United States))    1.408   <0.001  37.0  1.28  1.553
 ln(odds(Mexico) / odds(United States))    3.457   <0.001 496.9  3.15  3.794

Term: country
Type: response

pairs(emmeans(often_comics_glm_logit,~country,type="response"))

contrast               odds.ratio      SE  df null z.ratio p.value
 Canada / Mexico             0.407 0.00915 Inf    1 -40.003 <0.0001
 Canada / United States      1.408 0.07040 Inf    1   6.848 <0.0001
 Mexico / United States      3.457 0.16400 Inf    1  26.113 <0.0001

P value adjustment: tukey method for comparing a family of 3 estimates 
Tests are performed on the log odds ratio scale


Emmeans GLM match results with BRMS model, but avg_comparison does not.

pairs(emmeans(often_comics_model_logit,~country,type="response")) #brms model

 contrast               odds.ratio lower.HPD upper.HPD
 Canada / Mexico             0.407      0.39     0.425
 Canada / United States      1.408      1.28     1.543
 Mexico / United States      3.458      3.16     3.782

Point estimate displayed: median 
Results are back-transformed from the log odds ratio scale 
HPD interval probability: 0.95 

Contrasts for odd.ratios using avg_comparison for BRMS:

avg_comparisons(
  often_comics_model_logit, #brms model
  variables = list(country = "revpairwise"),
  comparison = "lnoravg",
  transform = "exp")
                               Contrast Estimate 2.5 % 97.5 %
 ln(odds(Canada) / odds(Mexico))               1     1      1
 ln(odds(Canada) / odds(United States))        1     1      1
 ln(odds(Mexico) / odds(United States))        1     1      1

Term: country
Type: response


I really appreciate the help with this.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions