diff --git a/app/lib/irt/item_information_function.py b/app/lib/irt/item_information_function.py index cd9953f..6d1f509 100644 --- a/app/lib/irt/item_information_function.py +++ b/app/lib/irt/item_information_function.py @@ -1,6 +1,7 @@ import logging from lib.irt.models.three_parameter_logistic import ThreeParameterLogistic +from lib.irt.models.rasch import Rasch from lib.errors.item_generation_error import ItemGenerationError @@ -20,6 +21,10 @@ class ItemInformationFunction(): return (self.model_data.a_param * q * (p - self.model_data.c_param)**2) / (p * ( (1 - self.model_data.c_param)**2)) + elif self.model_data.model == 'RASCH': + p = Rasch(self.model_data, kwargs).result() + q = 1 - p + return p * q else: # potentially error out raise ItemGenerationError( diff --git a/app/lib/irt/item_response_function.py b/app/lib/irt/item_response_function.py index 6cd8ced..9b5999d 100644 --- a/app/lib/irt/item_response_function.py +++ b/app/lib/irt/item_response_function.py @@ -1,4 +1,5 @@ from lib.irt.models.three_parameter_logistic import ThreeParameterLogistic +from lib.irt.models.rasch import Rasch from lib.errors.item_generation_error import ItemGenerationError @@ -10,5 +11,7 @@ class ItemResponseFunction(): def calculate(self, **kwargs): if self.model_data.model == '3PL': return ThreeParameterLogistic(self.model_data, kwargs).result() + elif self.model_data.model == 'RASCH': + return Rasch(self.model_data, kwargs).result() else: raise ItemGenerationError("irt model not supported or provided") diff --git a/app/lib/irt/models/rasch.py b/app/lib/irt/models/rasch.py index 46ed222..33690e5 100644 --- a/app/lib/irt/models/rasch.py +++ b/app/lib/irt/models/rasch.py @@ -5,7 +5,7 @@ from lib.irt.models.base import * class Rasch(Base): def result(self): - return 0.0 + return (1 / (1 + self.e(-1 * (self.theta - self.b_param)))) @classmethod def ability_estimate(self, items) -> float: diff --git a/app/services/form_generation_service.py b/app/services/form_generation_service.py index d913200..966e047 100644 --- a/app/services/form_generation_service.py +++ b/app/services/form_generation_service.py @@ -72,6 +72,7 @@ class FormGenerationService(Base): current_drift = 0 # FF Tokyo Drift # adding an element of randomness to the items and bundles used + # may need to change impl based on limit of items available selected_items = self.solver_run.select_items_by_percent(30) selected_bundles = self.solver_run.select_bundles_by_percent( 30)