def ability_eap(dataset, difficulty, discrimination, options=None)
Estimates the abilities for dichotomous models.
Estimates the ability parameters (theta) for dichotomous models via expaected a posterior likelihood estimation.
dataset
difficulty
discrimination
options
abilities
def ability_eap(dataset, difficulty, discrimination, options=None):
"""Estimates the abilities for dichotomous models.
Estimates the ability parameters (theta) for dichotomous models via
expaected a posterior likelihood estimation.
Args:
dataset: [n_items, n_participants] (2d Array) of measured responses
difficulty: (1d Array) of difficulty parameters for each item
discrimination: (1d Array) of disrimination parameters for each item
options: dictionary with updates to default options
Returns:
abilities: (1d array) estimated abilities
Options:
* distribution: callable
* quadrature_bounds: (float, float)
* quadrature_n: int
"""
options = validate_estimation_options(options)
quad_start, quad_stop = options['quadrature_bounds']
quad_n = options['quadrature_n']
if np.atleast_1d(discrimination).size == 1:
discrimination = np.full(dataset.shape[0], discrimination,
dtype='float')
the_sign = convert_responses_to_kernel_sign(dataset)
theta = _get_quadrature_points(quad_n, quad_start, quad_stop)
partial_int = _compute_partial_integral(
theta, difficulty, discrimination, the_sign)
# Weight by the input ability distribution
partial_int *= options['distribution'](theta)
# Compute the denominator
denominator = integrate.fixed_quad(
lambda x: partial_int, quad_start, quad_stop, n=quad_n)[0]
# compute the numerator
partial_int *= theta
numerator = integrate.fixed_quad(
lambda x: partial_int, quad_start, quad_stop, n=quad_n)[0]
return numerator / denominator