From 3b83aad6bdbe9fd36e26e2e89f125857d4a90456 Mon Sep 17 00:00:00 2001 From: Josh Burman Date: Fri, 29 Oct 2021 19:19:12 +0000 Subject: [PATCH] added iif and tif functions --- app/lib/irt/item_information_function.py | 14 ++++++++++++++ app/lib/irt/test_information_function.py | 16 ++++++++++++++++ app/main.py | 2 +- app/models/item.py | 1 + app/services/loft_service.py | 3 +++ 5 files changed, 35 insertions(+), 1 deletion(-) diff --git a/app/lib/irt/item_information_function.py b/app/lib/irt/item_information_function.py index e69de29..f38512e 100644 --- a/app/lib/irt/item_information_function.py +++ b/app/lib/irt/item_information_function.py @@ -0,0 +1,14 @@ +from lib.irt.models.three_parameter_logistic import ThreeParameterLogistic + +class ItemInformationFunction(): + def __init__(self, irt_model): + self.model_data = irt_model + + def calculate(self, **kwargs): + if self.model_data.model == '3PL': + p = ThreeParameterLogistic(self.model_data, kwargs).result() + q = 1 - p + return self.model_data.a_param**2 * ((q / p) * ((p - (self.model_data.c_param**2)) / (1 - (self.model_data.c_param**2)))) + else: + # potentially error out + return None diff --git a/app/lib/irt/test_information_function.py b/app/lib/irt/test_information_function.py index e69de29..aef771d 100644 --- a/app/lib/irt/test_information_function.py +++ b/app/lib/irt/test_information_function.py @@ -0,0 +1,16 @@ +from lib.irt.item_information_function import ItemInformationFunction + +class TestInformationFunction(): + def __init__(self, irt_model): + self.irt_model = irt_model + self.iif = ItemInformationFunction(irt_model) + + def calculate(self, items, **kwargs): + sum = 0 + + for item in items: + result = self.iif.calculate(b_param=item.b_param, theta=kwargs['theta']) + item.iif = result + sum += item.iif + + return sum diff --git a/app/main.py b/app/main.py index 1308bda..b05b631 100644 --- a/app/main.py +++ b/app/main.py @@ -8,7 +8,7 @@ from sqs_listener.daemon import Daemon print("Starting Solver Service (v0.3.1)...") -# # listen to the solver queue +# listen to the solver queue while True: msg = aws_helper.receive_message(os.environ['SOLVER_SQS_INGEST_QUEUE']) diff --git a/app/models/item.py b/app/models/item.py index eca5421..d94c5cd 100644 --- a/app/models/item.py +++ b/app/models/item.py @@ -8,3 +8,4 @@ class Item(BaseModel): attributes: List[Attribute] b_param: int irf: float = 0.00 + iif: float = 0.00 diff --git a/app/services/loft_service.py b/app/services/loft_service.py index f67f0f3..d189958 100644 --- a/app/services/loft_service.py +++ b/app/services/loft_service.py @@ -9,6 +9,9 @@ from models.solver_run import SolverRun from models.solution import Solution from models.form import Form +from lib.irt.test_response_function import TestResponseFunction +from lib.irt.test_information_function import TestInformationFunction + from services.base import Base class LoftService(Base):