# Conditional distribution

Hi there,

I am using cmdstanr and the posterior package. I would like to compare the distribution of parameters \theta_1, \dots, \theta_7 conditional on different values for a set of other parameters \alpha_1, \dots, \alpha_{100}. What is the quickest way to do this in Stan?

Thank you very much. Best,
Nic

Assuming that \alpha_1,... are also parameters that are estimates jointly with \theta_1,... I think this is something you will need to do outside of the Stan run in post-processing.

But I think a some additional background is needed to give a clearer and more certain response.

Hi Guido,

The parameters are estimated jointly. In the simplest case, say we only have one \alpha and one \beta and the model is y \sim \alpha \cdot x + \theta \cdot x. So here I would want to have p(\theta | \alpha = a_1) or p(\theta | \alpha = a_2) etc, i.e., the effect of x on y conditional on \alpha \in (a_1, a_2).

My actual model is more complex as it has more parameters and the functional relationship is not just linear. I would basically be looking for a command gather_draws(model_fit, parameter = theta, alpha = a_1). That is, get posterior draws of \theta given \alpha is a fixed and and specified value.

Does that make it clearer regarding what I would need?

Hi,

yes that makes it clearer.

I am unfortunately a data.table person, which means that I use subset_draws to extract parameters of interest, which I then put into a data.table, before I use melt, cast, and other functions to calculate what I need. So I can’t help much with gather_draws (which is from tidybayes) and the like.

Here is how you could do this with posterior and data.table:

theta_a1 =
draws %>%
subset_draws("theta | a_1", regex = T)  %>%
as_draws_df()
%>% data.table()

theta_at_a1is0 =
theta_a1[a_1 == 0, theta]

theta_stats_by_a1 =
theta_a1[, list(mean = mean(theta),
sd = sd(theta)),
by = "a_t"]


The reason I asked about the joint estimation is that I was wondering how one would deal with the fact that one can’t calculate basic indices like Rhat for these conditional estimates. I also don’t see how one could use posterior or tidybayes functions to get statistics for conditional thetas. Lastly, I am uncertain how to deal with the fact that all alpha value will not have the same frequency in the posterior.

Ah yeah that is about the way I would have done it in dplyr. But then I would have the same Issue as you mention with the unequal frequency in the posterior.

subset_draws("theta | a_1", regex = T)


So these are draws of theta conditional on a_1 or just joint draws of theta and a_1?

Oh,
I should have written

theta_a =
draws %>%
subset_draws("theta|a", regex = T)  %>%
as_draws_df()


this gives you a data.frame with 2 columns, one for theta and one for a. And yes you will have unequal frequencies in the posterior, which is why I would be hesitant to do this.

One way around this could be to model theta as a function of a.