Я хотел бы оценить модель IRT, используя PyMC3. Я сгенерировал данные со следующим распределением:
alpha_fix = 4
beta_fix = 100
theta= np.random.normal(100,15,1000)
prob = np.exp(alpha_fix*(theta-beta_fix))/(1+np.exp(alpha_fix*(theta-beta_fix)))
prob_tt = tt._shared(prob)
Затем я создал модель, используя PyMC3 для вывода параметра:
irt = pm.Model()
with irt:
# Priors
alpha = pm.Normal('alpha',mu = 4 , tau = 1)
beta = pm.Normal('beta',mu = 100 , tau = 15)
thau = pm.Normal('thau' ,mu = 100 , tau = 15)
# Modelling
p = pm.Deterministic('p',tt.exp(alpha*(thau-beta))/(1+tt.exp(alpha*(thau-beta))))
out = pm.Normal('o',p,observed = prob_tt)
Затем я выведу модель:
with irt:
mean_field = pm.fit(10000,method='advi', callbacks=[pm.callbacks.CheckParametersConvergence(diff='absolute')])
Наконец, пример из модели для вычисления апостериорного значения:
pm.plot_posterior(mean_field.sample(1000), color='LightSeaGreen');
Но результаты «альфа» (среднее значение 2,2) относительно далеки от ожидаемого (4), хотя предыдущий альфа был хорошо откалиброван.
У вас есть представление о происхождении этого пробела и как его исправить?
Большое спасибо,