Hi all!
Big fan of the project.
I am trying to use it on my company, in an educational context.
Basically, I am trying to build an Item Response Theory model where some of the item’s parameters were already estimated somehow and I want to estimate the student parameters and the new items parameters (betas and alphas are nans).
def model(idx_students, idx_items, idx_items_nan, n_students, n_new_items, beta, alpha, y=None):
# STUDENT
with numpyro.plate("plate_user", n_students):
user_theta = numpyro.sample("theta", dist.Normal(0, 1))
# ITEM
isnan = np.isnan(beta)
items_nanidx = np.nonzero(isnan)[0]
beta_mu = numpyro.sample("beta", dist.Normal(0, 1).expand([n_new_items]))
beta_impute = beta_mu[idx_items_nan]
alpha_mu = numpyro.sample("alpha", dist.LogNormal(0, 0.25).expand([n_new_items]))
alpha_impute = alpha_mu[idx_items_nan]
beta = jnp.asarray(beta).at[items_nanidx].set(beta_impute)
alpha = jnp.asarray(alpha).at[items_nanidx].set(alpha_impute)
# logit
logits = alpha[idx_items] * (user_theta[idx_students] - beta[idx_items])
if y is None:
probs = expit(logits)
numpyro.sample("probs", dist.Delta(probs), obs=probs)
numpyro.sample("approved", dist.BernoulliLogits(logits=logits), obs=y)
so I am getting an array with the item’s data that were already estimated (a single point MAP, alphas and betas), merging it with the new items parameters that I want to estimate now and combing it with the students ability parameter to form the logit.
The problem is that when I check the estimated betas
and alphas
they are all constant. It’s not working. The student parameters, thetas
does not suffer from this problem.
I am not sure if it’s a bug or feature.
I am using VI to estimate the parameters for now.
guide = autoguide.AutoDelta(model)
step_size = 1e-3
rng_key = random.PRNGKey(0)
optimizer = numpyro.optim.Adam(step_size=step_size)
svi = SVI(hierarchical_model_requirement, guide, optimizer, loss=Trace_ELBO())
Thank you