Hello,
I’m fitting the below IRT model designed for count data. My data is very highly dispersed across all items (mean = ~100, variance = ~100,000) and I currently have 6 items.
stancode <- '
data {
int<lower=1> J; // number of people
int<lower=1> K; // number of items
int<lower=1> N; // number of observations
int<lower=1,upper=J> jj[N]; // user for observation n
int<lower=1,upper=K> kk[N]; // item for observation n
real X[N]; // average attempts for person J on log scale
int<lower=0> y[N]; // count of successful attempts for observation n
}
parameters {
vector[K] delta;
vector[K] alpha; // discrimination parameter
real<lower=0> sigma_alpha;
vector[J] theta;
real gamma; // person covariate coefficient
real<lower=0> sigma_gamma;
real<lower=0> phi; // dispersion parameter.
}
model {
delta ~ cauchy(0, 2); // item intercept, cauchy for weakly informed prior
alpha ~ cauchy(0, 2); // discrimination/slope parameter
sigma_alpha ~ normal(0,1);
theta ~ normal(0, 1); // ideology/ability
gamma ~ cauchy(0, 2); // person covariate coefficient
sigma_gamma ~ normal(0,1);
phi ~ normal(0,1); // dispersion parameter
for (n in 1:N)
y[n] ~ neg_binomial(exp(delta[kk[n]] + alpha[kk[n]] * (theta[jj[n]] + gamma * X[n])), phi);
}
'
The model is working as expected and chains are converging nicely, however the standard deviation on theta is very high for most estimates with counts fewer than ~1,000 which constitutes roughly 80% of my data. I want to get more precise estimates.
I assume the best way to do this is with either more or more informative items. I’m currently working on this but was wondering if there are other approaches I could use as well.
I’m currently running 4 chains with 20k iterations, 5k warmup. The ESS for most of my theta > 100,000 with occasional odd observations < 10,000. The ESS on alpha and beta are all around 5-8,000. Will running more chains and more iterations get me more precise estimates, or are there diminishing returns? Are there any other approaches that might be helpful?
Thanks!