Байесовский IRT Pymc3 - вывод параметров - PullRequest
0 голосов
/ 25 апреля 2020

Я хотел бы оценить модель 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), хотя предыдущий альфа был хорошо откалиброван.

Posterior parameters

У вас есть представление о происхождении этого пробела и как его исправить?

Большое спасибо,

...