I am attempting to model some ordinal response data with a hierarchical model. I this study, 75 sound tokens were grouped into 5 broader categories with repeated presentation across several conditions. The conditions were nested within 2 groups of participants. The outcome was an ordinal response (1 of 9 pictures).
My brms model is specified as follows:
# Model formula
Mod_fmla <- bf(Outcome ~ group +
condition +
new_category +
(1|participant) +
(1|new_category/token) +
(1|condition/group))
I am specifying my priors as follows:
priors_acat <- c(
set_prior("normal(0,1)",
class = "b",
coef = "condition80"),
set_prior("normal(0,1)",
class = "b",
coef = "conditionCP"),
set_prior("normal(0,1)",
class = "b",
coef = "conditionNFC"),
set_prior("normal(0,1)",
class = "b",
coef = "groupHI"),
set_prior("normal(0,1)",
class = "b",
coef = "new_categoryunpleasant_low"),
set_prior("normal(0,1)",
class = "b",
coef = "new_categoryneutral"),
set_prior("normal(0,1)",
class = "b",
coef = "new_categorypleasant_low"),
set_prior("normal(0,1)",
class = "b",
coef = "new_categorypleasant_high"),
set_prior("normal(0.1,1)",
class = "Intercept"),
set_prior("normal(0,1)",
class = "Intercept",
coef = "1"),
set_prior("normal(0,1)",
class = "Intercept",
coef = "2"),
set_prior("normal(0.4,1)",
class = "Intercept",
coef = "3"),
set_prior("normal(0.4,2)",
class = "Intercept",
coef = "4"),
set_prior("normal(5,1)",
class = "Intercept",
coef = "5"),
set_prior("normal(6,1)",
class = "Intercept",
coef = "6"),
set_prior("normal(1,4)",
class = "Intercept",
coef = "7"),
set_prior("normal(0,1)",
class = "Intercept",
coef = "8"),
set_prior("cauchy(0,1)",
class = "sd",
group = "participant",
coef = "Intercept"),
set_prior("cauchy(0,1)",
class = "sd",
group = "condition:group",
coef = "Intercept"),
set_prior("cauchy(0,1)",
class = "sd",
group = "new_category:token",
coef = "Intercept")
)
In order to check priors, Iām trying a prior predictive check on a āprior-onlyā model:
# Prior only
ACAT_prior_Mod <-
brm(Mod_fmla,
data = Data,
family = "acat",
prior = priors_acat,
inits = 0,
iter = 1000,
warmup = 500,
chains = 2,
cores = ncores,
sample_prior = "only",
control = list(adapt_delta = 0.8,
max_treedepth = 12)
)
Iām attempting some visual checks of the āprior-onlyā model with the following:
ppc_dens_overlay(y = Emo_Data$Valence,
yrep = posterior_predict(Valence_BRMS_acat_prior_Mod,
nsamples = 25) %>%
na.omit()) +
scale_x_continuous(limits = c(0,9), breaks = seq(0,9,1)) +
theme_bw() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black")
)
But, the shape of the prior distributions is way off:
Is there a way to specify the priors for category-specific intercepts to better capture the shape of the responses?