Dear multidim IRT modelers,

I have a question about two competing possibilties to spedify a 2PL MIRT model. The first one sfollows the code you showed in your paper about “Analysing Standard Progressive Matrices”, @paul.buerkner:

```
formula <- bf(
response ~ beta + exp(logalpha1) * theta1,
nl = TRUE,
logalpha1 ~ 1 + (1 | item),
theta1 ~ 0 + (0 + dimension | person),
beta ~ 0 + (1 | item),
family = brmsfamily("bernoulli", link = "logit")
)
```

I just alterered the `(1 | person)`

to `(0 + dimension | person)`

and dropped the item correlations. The second specification looks like this:

```
formula <- bf(
response ~ beta + exp(logalpha1) * map_dim1 * theta1 +
exp(logalpha2) * map_dim2 * theta2 +
exp(logalpha3) * map_dim3 * theta3,
nl = TRUE,
theta1 ~ 0 + (1 |p| person),
theta2 ~ 0 + (1 |p| person),
theta3 ~ 0 + (1 |p| person),
beta ~ dimension + (1 | item),
logalpha1 ~ 1 + (1 | item),
logalpha2 ~ 1 + (1 | item),
logalpha3 ~ 1 + (1 | item),
family = brmsfamily("bernoulli", link = "logit")
)
```

The `map_dim`

terms refer to integer columns in the data and are 1 if the item is related to the dimension and 0 else. I came up with this approach for models where items can have multiple dimensions and where the number of dimensions a item is related to can differ. It works.

When I came back an began to make some comparisms with simulated data on a model that could be described by both models I found the following points: The second approach…

- is slower. It takes almoast twice as long.
- gives some wide spread estimators for the logalphas that are multiplied by 0 in the main formula (*).
- gets a little lower loo elpd.
- BUT better recovers the values for the logalpha SDs used to simulate the data.

The first model pools al `logalphas`

so the SD over all `logalphas`

corresponding to one dimension get shrunken to much and the difference in the SD between the dimensions gets shrunken as well. I think this is a drawback and I would like to hear your opion about this.

One possible solution I found after several tries to was:

```
formula <- bf(
response ~ beta + exp(logalpha1) * theta1,
nl = TRUE,
logalpha1 ~ 1 + (1 | dimension/item),
theta1 ~ 0 + (0 + dimension | person),
beta ~ 0 + (1 | item),
family = brmsfamily("bernoulli", link = "logit")
)
```

It should be noted that the estimation time for this model was the same as for the model with the mapping vectors. It models the underlying parameters better but the elpd_loo does not improve more than one se_diff compared to the model that does not model different logalpha SDs.

(*): You can pass stan code via stan vars to set the ranefs of these to 0 manually. However these parameters don’t have an effect on the modelling process at all, because they are multiplied by 0 anyway. So to set these to zero is more cosmetic:

```
stan_code <- 'r_5_logalpha1_1 = r_5_logalpha1_1 .* map_alpha1;
r_6_logalpha2_1 = r_6_logalpha2_1 .* map_alpha2;
r_7_logalpha3_1 = r_7_logalpha3_1 .* map_alpha3;'
```