I’ve been fitting a couple of different cumulative probit models to some ordinal (e.g., Likert-style) response data. In both models, I have two group-level predictors (respondent ID and question number). The sole difference between the models is that, for one (let’s call it Model A), the mean of the latent variable has a 2-level categorical population-level predictor, whereas the other (Model B) does not contain such a predictor. In Model A, the effect of the predictor is estimated to be fairly minimal. Posterior predictives from both models show that they fit the data quite well, though Model A does a little better than Model B.
What is confusing me is that the estimates of the SDs for the group-level predictors across the two models are wildly different. For Model A, I get the following:
Group-Level Effects:
~respondent (Number of levels: 196)
Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept) 1.14 0.08 1.00 1.29 1.00 5459 8690
~question (Number of levels: 6)
Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept) 0.52 0.24 0.25 1.13 1.00 6385 9769
By contrast, for Model B, the relevant output is:
Group-Level Effects:
~respondent (Number of levels: 196)
Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept) 11.32 6.69 4.77 28.05 1.00 8215 6370
~question (Number of levels: 6)
Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept) 2.52 1.41 0.70 6.11 1.00 5782 5379
I’m stumped as to what might be leading to this discrepancy, and would appreciate any insight that others who are more familiar with such models might have. (Note that the estimates for the thresholds are a little different too, as shown below.)
The full code for Model A is as follows:
groupModel <- bf(likertResp ~ group + (1 | respondent) + (1 | question),
family=cumulative("probit"))
groupPriors <- c(prior(normal(0, 0.5), class="b"))
group <- brm(groupModel, family=cumulative("probit"),
data=data,
iter=10000, control = list(adapt_delta = .99),
prior = groupPriors, init=0, save_pars = save_pars(all=TRUE),
sample_prior="yes")
This produces the following output:
Family: cumulative
Links: mu = probit; disc = identity
Formula: likertResp ~ group + (1 | respondent) + (1 | question)
Data: data (Number of observations: 1176)
Draws: 4 chains, each with iter = 10000; warmup = 5000; thin = 1;
total post-warmup draws = 20000
Group-Level Effects:
~respondent (Number of levels: 196)
Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept) 1.14 0.08 1.00 1.29 1.00 5459 8690
~question (Number of levels: 6)
Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept) 0.52 0.24 0.25 1.13 1.00 6385 9769
Population-Level Effects:
Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept[1] -1.86 0.26 -2.39 -1.36 1.00 5701 8647
Intercept[2] -0.67 0.26 -1.19 -0.18 1.00 5644 8824
Intercept[3] 0.09 0.26 -0.42 0.59 1.00 5725 9061
Intercept[4] 0.62 0.26 0.11 1.12 1.00 5763 8835
Intercept[5] 1.66 0.26 1.14 2.17 1.00 5875 8887
Intercept[6] 2.81 0.27 2.27 3.35 1.00 6542 9518
groupY -0.14 0.16 -0.46 0.19 1.00 4445 8052
Family Specific Parameters:
Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
disc 1.00 0.00 1.00 1.00 NA NA NA
Draws were sampled using sampling(NUTS). 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).
The code for Model B is:
noGroupModel <- bf(likertResp ~ 1 + (1 | respondent) + (1 | question),
family=cumulative("probit"))
noGroup <- brm(noGroupModel, family=cumulative("probit"),
data=data,
iter=10000, control = list(adapt_delta = .99),
init=0, save_pars = save_pars(all=TRUE),
sample_prior="yes")
It produces the following output:
Family: cumulative
Links: mu = probit; disc = identity
Formula: likertResp ~ 1 + (1 | respondent) + (1 | question)
Data: data (Number of observations: 1176)
Draws: 4 chains, each with iter = 10000; warmup = 5000; thin = 1;
total post-warmup draws = 20000
Group-Level Effects:
~respondent (Number of levels: 196)
Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept) 11.32 6.69 4.77 28.05 1.00 8215 6370
~question (Number of levels: 6)
Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept) 2.52 1.41 0.70 6.11 1.00 5782 5379
Population-Level Effects:
Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept[1] -0.73 0.06 -0.84 -0.62 1.00 12418 14704
Intercept[2] 0.10 0.05 0.00 0.20 1.00 11021 14942
Intercept[3] 0.68 0.05 0.59 0.78 1.00 11054 14563
Intercept[4] 1.10 0.05 1.01 1.20 1.00 11587 15185
Intercept[5] 1.93 0.06 1.82 2.04 1.00 15529 16239
Intercept[6] 2.84 0.09 2.67 3.02 1.00 25097 16032
Family Specific Parameters:
Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
disc 1.00 0.00 1.00 1.00 NA NA NA
Draws were sampled using sampling(NUTS). 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).
Here is the result of pp_check()
(1000 samples) for the first model:
And here is the result for the second:
Thanks in advance for your assistance.