add rasch functionality to form generation

This commit is contained in:
brmnjsh
2023-10-24 20:06:20 +00:00
parent 8ba6b95f21
commit 73f25edfa6
4 changed files with 10 additions and 1 deletions

View File

@ -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(

View File

@ -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")

View File

@ -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: