Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

for multinomial (categorical) models add_linpred_draws() doesn't return original outcome labels #310

Open
tfjaeger opened this issue Jun 10, 2023 · 1 comment

Comments

@tfjaeger
Copy link

Hi,

I'm using tidybayes to visualize the results of a (mixed-effects) categorical ('multinomial') regression fit with brms::brm(). Even when I apply recover_types to the model prior to using add_linpred_draws(), the output of add_linpred_draws() has only integer values in the .category column, rather than the original labels of the outcome.

For example:

# make some categorical data
d <-   
  rmultinom(n = 100, size = 1, prob = c(.1, .4, .5)) %>%
  as_tibble(.name_repair) %>%
  mutate(response = case_when(V1 == 1 ~ "A", V2 == 1 ~ "B", T ~ "C")) %>%
  select(response)

# fit categorical model
m <- brm(
  bf(response ~ 1),
  family = categorical,
  data = d,
  backend = "cmdstanr")

# apply (or not) recover types to model
m %<>% recover_types(d)

# get draws from linear predictor
d %>% 
  add_linpred_draws(
  object = m, 
  ndraws = 100,
  re_formula = NA,
  value = "logit",
  category = "predicted_response")

yields:

# A tibble: 20,000 × 7
# Groups:   response, .row, predicted_response [200]
   response  .row .chain .iteration .draw predicted_response logit
   <chr>    <int>  <int>      <int> <int> <fct>              <dbl>
 1 B            1     NA         NA     1 1                   1.22
 2 B            1     NA         NA     2 1                   1.09
 3 B            1     NA         NA     3 1                   1.35
 4 B            1     NA         NA     4 1                   2.01
 5 B            1     NA         NA     5 1                   1.79
 6 B            1     NA         NA     6 1                   2.10
 7 B            1     NA         NA     7 1                   1.69
 8 B            1     NA         NA     8 1                   1.57
 9 B            1     NA         NA     9 1                   2.09
10 B            1     NA         NA    10 1                   1.67
# ℹ 19,990 more rows
# ℹ Use `print(n = ...)` to see more rows

rather than:

# A tibble: 20,000 × 7
# Groups:   response, .row, predicted_response [200]
   response  .row .chain .iteration .draw predicted_response logit
   <chr>    <int>  <int>      <int> <int> <fct>              <dbl>
 1 B            1     NA         NA     1 B                   1.22
 2 B            1     NA         NA     2 B                   1.09
 3 B            1     NA         NA     3 B                   1.35
 4 B            1     NA         NA     4 B                   2.01
 5 B            1     NA         NA     5 B                   1.79
 6 B            1     NA         NA     6 B                   2.10
 7 B            1     NA         NA     7 B                   1.69
 8 B            1     NA         NA     8 B                   1.57
 9 B            1     NA         NA     9 B                   2.09
10 B            1     NA         NA    10 B                   1.67
# ℹ 19,990 more rows
# ℹ Use `print(n = ...)` to see more rows

Despite the fact that the original category labels are available in the model object:

 Family: categorical 
  Links: muB = logit; muC = logit 
Formula: response ~ 1 
   Data: d (Number of observations: 100) 
  Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup draws = 4000

Population-Level Effects: 
              Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
muB_Intercept     1.66      0.36     1.01     2.44 1.00     1043      929
muC_Intercept     1.51      0.36     0.86     2.28 1.00     1071      906

(I also note that the transform argument also doesn't work for this type of model though I imagine that issues lies with brms?).

Thank you for looking into this! (and apologies if it's a false alarm)

@tfjaeger
Copy link
Author

The relevant categories are available in model$family$cats and the reference category is available in model$family$refcat.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant