class ThreeParameterLogistic: def __init__(self, model_params, kwargs): self.model_params = model_params # check if exists, if not error out self.b_param = kwargs['b_param'] self.e = 2.71828 self.theta = kwargs['theta'] # contains the primary 3pl function, determining the probably of an inidividual # that an individual at a certain theta would get a particular question correct # detailed further on page 161, equation 1 here: # https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5978482/pdf/10.1177_0146621615613308.pdf def result(self): a = self.model_params.a_param c = self.model_params.c_param return c + (1 - c) * (1 / (1 + self.e**(-a * (self.theta - self.b_param)))) @classmethod def ability_estimate(self) -> float: return 0.0