private static Question GetNextQuestion(string line) { string[] words = line.Split(' '); int questionNumber = Convert.ToInt32(words[0]); IModelParameters modelParameters; if (words.Length == 4) { double alpha = Convert.ToDouble(words[1]); double delta = Convert.ToDouble(words[2]); double chi = Convert.ToDouble(words[3]); modelParameters = new ThreeParamModelParameters(alpha, delta, chi); } else if (words.Length == 3) { double alpha = Convert.ToDouble(words[1]); double delta = Convert.ToDouble(words[2]); modelParameters = new TwoParamModelParameters(alpha, delta); } else { throw new NotImplementedException(); } Question question = new Question() { ModelParameters = modelParameters, QuestionNumber = questionNumber }; return question; }
public void ProbabilityOfCorrectReponse_DeltaEqualsTheta_ReturnsOneHalf() { double alpha = .2; double delta = .3; TwoParamModelParameters parameters = new TwoParamModelParameters(alpha, delta); TwoParamProbabilityFunction probabilityFunction = new TwoParamProbabilityFunction(parameters); double theta = delta; double p = probabilityFunction.ProbabilityOfCorrectResponse(theta); Assert.AreEqual(.5, p); }
public void ProbabilityOfCorrectReponse_DeltaNotEqualToTheta_ReturnsCorrectValue() { double alpha = .2; double delta = .3; TwoParamModelParameters parameters = new TwoParamModelParameters(alpha, delta); TwoParamProbabilityFunction probabilityFunction = new TwoParamProbabilityFunction(parameters); double theta = .1; double p = probabilityFunction.ProbabilityOfCorrectResponse(theta); double expectedValue = Math.Exp(alpha*(theta - delta))/(1 + Math.Exp(alpha*(theta - delta))); Assert.IsTrue(Math.Abs(expectedValue - p) < Tolerance); }
public void SecondThetaDerivative_NonTrivialInput_CloseToFiniteDifferenceValue() { double alpha = .2; double delta = .3; TwoParamModelParameters parameters = new TwoParamModelParameters(alpha, delta); TwoParamProbabilityFunction probabilityFunction = new TwoParamProbabilityFunction(parameters); FiniteDifferencer finiteDifferencer = new FiniteDifferencer(x => probabilityFunction.FirstThetaDerivative(x)); double theta = .1; double secondDerivative = probabilityFunction.SecondThetaDerivative(theta); double approxSecondDerivative = finiteDifferencer.ApproximateDerivative(theta); Assert.IsTrue(Math.Abs(secondDerivative - approxSecondDerivative) < Tolerance); }
public TwoParamItemInformationFunction(TwoParamModelParameters modelParameters) { _alpha = modelParameters.Alpha; _twoParamProbabilityFunction = new TwoParamProbabilityFunction(modelParameters); }
public TwoParamProbabilityFunction(TwoParamModelParameters parameters) { _alpha = parameters.Alpha; _delta = parameters.Delta; }