Hi all,
Can anyone help me with implementing the discrete mixture model shown in A case study on the choice, interpretation and checking of multilevel models for longitudinal binary outcomes?. I do not know how to do the mixture model detailed in the text (screenshot below)
Below is my attempt but this obviously does not work.
def discrete_mixture(
id_individual: DeviceArray,
parsmk: DeviceArray,
sex: DeviceArray,
wave: DeviceArray,
y: DeviceArray = None,
):
num_individual = np.unique(id_individual).shape[0]
num_data = parsmk.shape[0]
sigma = numpyro.sample("sigma", dist.Exponential(1))
with numpyro.plate("individual_plate", num_individual):
gamma = numpyro.sample("gamma", dist.Normal(0, sigma))
phi0 = numpyro.sample("phi0", dist.Normal(-1, 1))
with numpyro.plate("phi_plate", 2):
phi = numpyro.sample("phi", dist.Normal(0, 1))
eta0 = numpyro.sample("eta0", dist.Normal(0, 1))
with numpyro.plate("eta_plate", 4):
eta = numpyro.sample("eta", dist.Normal(0, 1))
with numpyro.plate("data_plate", num_data):
S_logits = phi0 + phi[0] * sex + phi[1] * parsmk
S = numpyro.sample("S", dist.Bernoulli(logits=S_logits))
logits = (
eta0
+ gamma[id_individual]
+ eta[0] * sex
+ eta[1] * parsmk
+ eta[2] * (1 - sex) * wave
+ eta[3] * sex * wave
)
kwargs = {"probs": 1.0} if S else {"logits": logits}
numpyro.sample("obs", dist.Bernoulli(**kwargs), obs=y)