protected override double ComputeLLR(ModelScorer modelScorer, PhyloTree phyloTree, StringBuilder stringBuilder, double targetMarginal, double predictorMarginal,
                                             Converter <Leaf, SufficientStatistics> predictorDistributionClassFunction, Converter <Leaf, SufficientStatistics> targetDistributionClassFunction)
        {
            Converter <Leaf, SufficientStatistics> LeafToJointDistributionClass =
                CreateAlternativeSufficientStatisticsMap(predictorDistributionClassFunction, targetDistributionClassFunction);

            double             logLikelihoodIndependentModel, logLikelihoodJointModel;
            Score              scoreIndTarget, scoreIndPredictor, scoreJoint;
            MessageInitializer messageInitializer;

            // first score the target.
            NullModelDistribution.EmpiricalEquilibrium = targetMarginal;
            messageInitializer = modelScorer.CreateMessageInitializer(predictorDistributionClassFunction, targetDistributionClassFunction, NullModelDistribution);
            scoreIndTarget     = modelScorer.ScoreModel(messageInitializer, false);

            NullModelDistribution.EmpiricalEquilibrium = predictorMarginal;
            messageInitializer = modelScorer.CreateMessageInitializer(targetDistributionClassFunction, predictorDistributionClassFunction, NullModelDistribution);
            scoreIndPredictor  = modelScorer.ScoreModel(messageInitializer, false);

            DistributionDiscreteJointBinary jointDistn = (DistributionDiscreteJointBinary)AlternativeModelDistribution;

            jointDistn.SetInitialParams(scoreIndPredictor.OptimizationParameters, scoreIndTarget.OptimizationParameters);
            messageInitializer = modelScorer.CreateMessageInitializer(null, LeafToJointDistributionClass, jointDistn);
            scoreJoint         = modelScorer.ScoreModel(messageInitializer, false);

            logLikelihoodIndependentModel = scoreIndTarget.Loglikelihood + scoreIndPredictor.Loglikelihood;
            logLikelihoodJointModel       = scoreJoint.Loglikelihood;

            stringBuilder.Append(SpecialFunctions.CreateTabString(scoreIndPredictor.ToString(NullModelDistribution), scoreIndTarget.ToString(NullModelDistribution),
                                                                  logLikelihoodIndependentModel, scoreJoint.ToString(jointDistn), ""));

            double diff = logLikelihoodJointModel - logLikelihoodIndependentModel;

            return(diff);
        }
コード例 #2
0
 new public static ModelTesterDiscrete GetInstance(string modelTesterNameAndArguments)
 {
     if (modelTesterNameAndArguments.StartsWith(ModelTesterDiscreteFisher.Name))
     {
         return(ModelTesterDiscreteFisher.GetInstance());
     }
     else if (modelTesterNameAndArguments.StartsWith(ModelTesterDiscreteConditional.Name))
     {
         string leafDistnName             = modelTesterNameAndArguments.Substring(ModelTesterDiscreteConditional.Name.Length);
         DistributionDiscreteBinary distn = DistributionDiscreteBinary.GetInstance(leafDistnName);
         return(ModelTesterDiscreteConditional.GetInstance(distn));
     }
     else if (modelTesterNameAndArguments.StartsWith(ModelTesterDiscreteJoint.Name))
     {
         string altDistnName = modelTesterNameAndArguments.Substring(ModelTesterDiscreteJoint.Name.Length);
         DistributionDiscreteBinary      nullDistn = DistributionDiscreteBinary.GetInstance("Repulsion"); // leafDistn doesn't matter
         DistributionDiscreteJointBinary altDistn  = DistributionDiscreteJointBinary.GetInstance(altDistnName);
         return(ModelTesterDiscreteJoint.GetInstance(nullDistn, altDistn));
     }
     else
     {
         throw new ArgumentException(String.Format("{0} does not start with a valid ModelTesterDiscrete name.", modelTesterNameAndArguments));
     }
 }