-
Notifications
You must be signed in to change notification settings - Fork 59
Open
Description
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
Labels
No labels