def twopl_jml(dataset, options=None)
Estimates parameters in a 2PL IRT model.
dataset
options
discrimination
difficulty
def twopl_jml(dataset, options=None):
""" Estimates parameters in a 2PL IRT model.
Args:
dataset: [items x participants] matrix of True/False Values
options: dictionary with updates to default options
Returns:
discrimination: (1d array) estimates of item discrimination
difficulty: (1d array) estimates of item difficulties
Options:
* max_iteration: int
"""
options = validate_estimation_options(options)
# Defines item parameter update function
def _item_min_func(n_items, alphas, thetas,
betas, the_sign, counts):
# pylint: disable=cell-var-from-loop
for ndx in range(n_items):
def _alpha_beta_min(estimates):
otpt = 1.0 / (1.0 + np.exp((thetas - estimates[1]) *
the_sign[ndx, :] * estimates[0]))
return -np.log(otpt).dot(counts)
# Solves jointly for parameters using numerical derivatives
otpt = fmin_slsqp(_alpha_beta_min, (alphas[ndx], betas[ndx]),
bounds=[(0.25, 4), (-6, 6)], disp=False)
alphas[ndx], betas[ndx] = otpt
return alphas, betas
return _jml_abstract(dataset, _item_min_func, discrimination=1,
max_iter=options['max_iteration'])