From dd3188b798b94bad673886d0565f27b264abc1ae Mon Sep 17 00:00:00 2001 From: Josh Burman Date: Fri, 29 Oct 2021 05:43:32 +0000 Subject: [PATCH] construct based irt library and add item response function --- app/lib/irt/item_information_function.py | 0 app/lib/irt/item_response_function.py | 12 ++++++++++++ app/lib/irt/models/three_parameter_logistic.py | 13 +++++++++++++ app/lib/irt/test_information_function.py | 0 app/lib/irt/test_response_function.py | 0 5 files changed, 25 insertions(+) create mode 100644 app/lib/irt/item_information_function.py create mode 100644 app/lib/irt/item_response_function.py create mode 100644 app/lib/irt/models/three_parameter_logistic.py create mode 100644 app/lib/irt/test_information_function.py create mode 100644 app/lib/irt/test_response_function.py diff --git a/app/lib/irt/item_information_function.py b/app/lib/irt/item_information_function.py new file mode 100644 index 0000000..e69de29 diff --git a/app/lib/irt/item_response_function.py b/app/lib/irt/item_response_function.py new file mode 100644 index 0000000..a844f08 --- /dev/null +++ b/app/lib/irt/item_response_function.py @@ -0,0 +1,12 @@ +from models.three_parameter_logitistc import ThreeParameterLogistic + +class ItemResponseFunction(): + def __init__(self, irt_model): + self.model_data = irt_model + + def calculate(self, **kwargs): + if self.model_data.model == '3PL': + return ThreeParameterLogistic.new(self.model_data, kwargs).result + else: + # potentially error out + return None diff --git a/app/lib/irt/models/three_parameter_logistic.py b/app/lib/irt/models/three_parameter_logistic.py new file mode 100644 index 0000000..a5e2986 --- /dev/null +++ b/app/lib/irt/models/three_parameter_logistic.py @@ -0,0 +1,13 @@ +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'] + + def result(self): + a = self.model_params.a + c = self.model_params.c + + return c + (1 - c) * (1 / (1 + e**(-a * (self.theta - self.b_param)))) diff --git a/app/lib/irt/test_information_function.py b/app/lib/irt/test_information_function.py new file mode 100644 index 0000000..e69de29 diff --git a/app/lib/irt/test_response_function.py b/app/lib/irt/test_response_function.py new file mode 100644 index 0000000..e69de29