Hi all. My model is below. Here, g\in\{1, 2, 3, 4\} denotes the group index, and n\in\{1, 2, \ldots 6\} denotes the participant index. Also, i\in\{1, 2, \ldots 10\} denotes the measurements index. Note that, each participant belongs to every group, and we have a total of 10 measurements for each (participant, group) pair – so, a total of 10 \times 6 \times 4 observations.
a_{ng} \sim \mathcal{N}(\mu_g, \alpha) \hspace{20pt} \forall \; n, g
\mu_g \sim \mathcal{N}(0., \beta_g) \hspace{20pt} \forall \; g
\beta_g \sim \mathcal{HC}(\gamma) \hspace{20pt} \forall \; g
\gamma \sim \mathcal{HN}(50.)
\mathcal{HC}(\cdot) and \mathcal{HN}(\cdot) are the HalfCauchy and HalfNormal distributions respectively with location at 0., in their scale parametrization. \mathcal{N}(\cdot, \cdot) is normal distribution, in location-scale parametrization.
and, the observations (measurements) are modelled as
y_{ng}^{i} \sim \mathcal{N}(a_{ng}, \sigma) where \sigma \sim \mathcal{HN}(50.)
The following shows the posterior of \mu_1, \mu_2 \ldots \mu_4 on the first row, and the 4 chains (each chain has 1000 post-warmup samples) for these posterior distributions in the second row
I ran many simulations with this model, and this occurs often – one of the chains (red chain in above plot), becomes very thin. Is this the famous Neal’s funnel issue?
I suspect it happens because of this structure
\mu_g \sim \mathcal{N}(0., \beta_g) \hspace{20pt} \forall \; g
\beta_g \sim \mathcal{HC}(\gamma) \hspace{20pt} \forall \; g
where the idea is the control how much to pool each \mu_g towards 0.
Instead, if I replace this structure with
\mu_g \sim \mathcal{N}(0., \beta) \hspace{20pt} \forall \; g
\beta \sim \mathcal{HN}(50.)
and remove \gamma from the model – then, the thinning problem doesn’t happen.
So, I’m not sure if this is a funnel issue, or model is mis-specified?
I tried reparameterizing the problematic structure like
\mu_g \gets \mu_g^* \times \beta_g
\mu_g^* \sim \mathcal{N}(0., 1.)
but, this didn’t help either.
Any help / intuition what might be going wrong would be very helpful. Sorry, for not including stan code for this, I’m actually using a library in python to run these.