override protected double LogLikelihoodOfEffects(QmrrPartialModel qmrrPartialModel, TrueCollection trueCollection, OptimizationParameterList qmrrParams) { Set <Hla> trueCollectionAsSet = trueCollection.CreateHlaAssignmentAsSet(); double logOneLessLeakProbability = Math.Log(1.0 - qmrrParams["leakProbability"].Value); Dictionary <Hla, double> hlaToLogOneLessLink = new Dictionary <Hla, double>(); foreach (Hla hla in trueCollectionAsSet) { double logOneLessLink = Math.Log(1.0 - qmrrParams["link" + hla].Value); hlaToLogOneLessLink.Add(hla, logOneLessLink); } double logLikelihood = 0.0; foreach (KeyValuePair <string, Set <Hla> > patientAndHlaList in qmrrPartialModel.PatientList) { double logLikelihoodNoReactionInThisPatient = logOneLessLeakProbability; foreach (Hla hla in patientAndHlaList.Value) { if (trueCollectionAsSet.Contains(hla)) { double logOneLessLink = hlaToLogOneLessLink[hla]; logLikelihoodNoReactionInThisPatient += logOneLessLink; } } bool didReact = qmrrPartialModel.PatientToAnyReaction.ContainsKey(patientAndHlaList.Key); logLikelihood += LogLikelihoodOfThisPatient(logLikelihoodNoReactionInThisPatient, didReact); } return(logLikelihood); }
private double LogLikelihoodOfCompleteModelConditionedOnKnownHlas(QmrrPartialModel qmrrPartialModel, TrueCollection trueCollection, OptimizationParameterList qmrrParams) { Set <Hla> trueHlaSet = trueCollection.CreateHlaAssignmentAsSet(); int reactionsCoveredCount = CountReactionsCovered(qmrrPartialModel, trueHlaSet); SpecialFunctions.CheckCondition(reactionsCoveredCount < 1000); int trueCount = trueCollection.Count; SpecialFunctions.CheckCondition(trueCount < 1000); int falseCount = qmrrPartialModel.HlaList.Count - trueCollection.Count; SpecialFunctions.CheckCondition(falseCount < 1000); string llAsString = string.Format("{0:000}.{1:000}{2:000}", reactionsCoveredCount, falseCount, trueCount); double logLikelihood = double.Parse(llAsString); return(logLikelihood); }
virtual protected double LogLikelihoodOfEffects(QmrrPartialModel qmrrPartialModel, TrueCollection trueCollection, OptimizationParameterList qmrrParams) { double logOneLessLink = Math.Log(1.0 - qmrrParams["link"].Value); double logOneLessLeakProbability = Math.Log(1.0 - qmrrParams["leakProbability"].Value); double logLikelihood = 0.0; Set <Hla> trueCollectionAsSet = trueCollection.CreateHlaAssignmentAsSet(); foreach (KeyValuePair <string, Set <Hla> > patientAndHlaList in qmrrPartialModel.PatientList) { double logLikelihoodNoReactionInThisPatient = logOneLessLeakProbability + NumberOfPositiveHlas(patientAndHlaList.Value, trueCollectionAsSet) * logOneLessLink; bool didReact = qmrrPartialModel.PatientToAnyReaction.ContainsKey(patientAndHlaList.Key); logLikelihood += LogLikelihoodOfThisPatient(logLikelihoodNoReactionInThisPatient, didReact); } return(logLikelihood); }