I would like to add a soft sum-to-zero constraint to a brms model with group-specific effects. I think I should be able to do this through
stanvars. The model formula for the model I would like to fit looks something like this:
Y ~ treat + (1+treat|diag_group) + (1|cell_id)
and I would like to put sum-to-zero constraints on the
diag_group random effects. I have 3 questions about this process:
In looking at the Stan code generated by
make_stancode(), the group effects get parameters
z_2. It appears that the ordering is alphabetical, regardless of the order in which the terms appear in the formula. Can you confirm that this is the case?
My other two questions I think are more Stan syntax than anything. Suppose I dropped the random slope on treat, so the model formula has
(1|diag_group). In this case, the group-specific effects corresponding to diag_group are defined as:
vector[N_2] z_2[M_2]; // standardized group-level effects
M_2=1 (random intercept only). I tried defining stanvars as follows:
stanvar(scode = "sum(z_2) ~ normal(0, N_2*.001);", block = "model", position = "end")
The resulting Stan code looks like it’s doing what I want, but I get an error. I think this is because
z_2 is a vector of (1-element) vectors. Am I right that this is the problem, and if so, is there an easy (1-line) way to express the sum that I want?
When I include the random slope,
z_2 is defined as follows:
matrix[M_2, N_2] z_2; // standardized group-level effects
where in this case
M_2=2. I would like to add two sum-to-zero constraints, one for the intercepts and one for the slopes. How can I express this?
- Operating System: Windows
- brms Version: 2.16.3