Exemplo n.º 1
0
        public override double[] GetPriorProbabilities(OptimizationParameterList discreteParameters)
        {
            const double eps = 0.0001;

            double[] priors = new double[NonMissingClassCount];

            try
            {
                EigenPair       eig         = LinearAlgebra.ComputeSparseEigenPair(LinearAlgebra.Transpose(GetTransitionProbabilityMatrix(discreteParameters, 1)));
                ComplexNumber[] eigenValues = eig.EigenValues;
                for (int i = 0; i < 4; i++)
                {
                    if (ComplexNumber.ApproxEqual(eigenValues[i], 1, eps))
                    {
                        priors = LinearAlgebra.Abs(LinearAlgebra.ComplexToDouble(LinearAlgebra.Transpose(eig.EigenVectors)[i]));
                        break;
                    }
                }

                priors = LinearAlgebra.Normalize(priors);
            }
            catch (Exception e)
            {
                throw new NotComputableException("Problem computing the prior: " + e.Message);
            }

            return(priors);
        }
        protected override double[][] DefaultDistribution(BranchOrLeaf branchOrLeaf, OptimizationParameterList discreteParameters)
        {
            double lambda = discreteParameters[(int)ParameterIndex.Lambda].Value;
            double x      = discreteParameters[(int)ParameterIndex.Equilibrium].Value;

            // in phylogenies, Lambda = site-specific mutation rate (in literature, "gamma"), Length = time*average mutation rate,
            // e^(-lambda*t) = Pr[no mutation), and 1 - e^(-lambda*t) = Pr[mutation]
            double expExp = 1.0 - Math.Exp(-lambda * branchOrLeaf.Length);

            //Debug.Assert(expExp > 0);

            // in phylogenies, X = equilibrium frequency of this A.A.
            double[][] yDist = new double[][] { new double[2], new double[2] };
            yDist[0][1] = x * expExp;        // Pr[mutation AND mutationToTrue]
            yDist[0][0] = 1.0 - yDist[0][1]; // that is, Pr[mutation AND mutationToFalse] + Pr[no mutation] = (1-X)*expExp + (1 - expExp) = 1 - X*expExp
            yDist[1][0] = (1 - x) * expExp;  // Pr[mutation AND mutationToFalse]
            yDist[1][1] = 1.0 - yDist[1][0];

#if DEBUG
            //foreach (double[] dArr in yDist)
            //{
            //    foreach (double d in dArr)
            //        Debug.Assert(!double.IsNaN(d) && d >= 0 && d <= 1);

            //}
#endif

            return(yDist);
        }
Exemplo n.º 3
0
        public ConditionalGaussianDistributionParams CreateDistributionGaussianOrNull(
            Leaf leaf,
            OptimizationParameterList gaussianParameters,
            Converter <Leaf, SufficientStatistics> predictorLeafToBoolStats)
        {
            if (leaf.Length == 0)
            {
                Debug.WriteLine("Branch length of zero observed");
            }

            // TODO: make continuous
            BooleanStatistics hasPredictor = (BooleanStatistics)predictorLeafToBoolStats(leaf);

            if (hasPredictor.IsMissing())
            {
                ConditionalGaussianDistributionParams.GetNullInstance();
                //return null; // Predictor data is missing, so skip this leaf.
            }

            ConditionalGaussianDistributionParams plainConditionalDistribution = GetPlainConditionalGaussianDistribution(leaf, gaussianParameters);

            if (!hasPredictor)
            {
                return(plainConditionalDistribution);
            }
            else
            {
                double delta = GetOffset(gaussianParameters);

                ConditionalGaussianDistributionParams offsetConditionalDistribution = plainConditionalDistribution.AddOffsetToMean(delta);
                return(offsetConditionalDistribution);
            }
            //return CreateDistributionGaussianOrNull(plainConditionalDistribution, hasPredictor, delta);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Initialization assumptions: LambdaA and LambdaB are 1. ie, both bases are evolving at the average rate.
        /// P_A = (1-P_B) = empiricalLeafMargin. Note however that the empiricalLeafMargin is measured for base a; base B could be entirely different.
        /// However, we need to keep the interface the same as for the other DiscreteDistributions, so it's not clear how to pass that information
        /// in. For now we assume symmetry.
        /// </summary>
        public override OptimizationParameterList GetParameters(bool useConditionalParameter)
        {
            //Random random = new Random();
            //double pAB = rand.NextDouble();
            //double pAb = (1 - pAB) * rand.NextDouble();
            //double paB = (1 - pAB - pAb) * rand.NextDouble();
            //double lA = 3000 * rand.NextDouble();
            //double lB = 3000 * rand.NextDouble();

            double pAB = InitialParamVals == null ? EmpiricalEquilibrium / 2 : InitialParamVals[(int)ParameterIndex.P_AB].Value;
            double pAb = InitialParamVals == null ? EmpiricalEquilibrium / 2 : InitialParamVals[(int)ParameterIndex.P_Ab].Value;
            double paB = InitialParamVals == null ? (1 - EmpiricalEquilibrium) / 2 : InitialParamVals[(int)ParameterIndex.P_aB].Value;
            double lA  = InitialParamVals == null ? 1 : InitialParamVals[(int)ParameterIndex.Lambda_A].Value;
            double lB  = InitialParamVals == null ? 1 : InitialParamVals[(int)ParameterIndex.Lambda_B].Value;

            OptimizationParameterList optList = OptimizationParameterList.GetInstance();

            optList.Add((int)ParameterIndex.P_AB, OptimizationParameter.GetProbabilityInstance("P_TT", pAB, true));
            optList.Add((int)ParameterIndex.P_Ab, OptimizationParameter.GetProbabilityInstance("P_TF", pAb, true));
            optList.Add((int)ParameterIndex.P_aB, OptimizationParameter.GetProbabilityInstance("P_FT", paB, true));
            optList.Add((int)ParameterIndex.Lambda_A, OptimizationParameter.GetPositiveFactorInstance("Lambda_A", lA, true));
            optList.Add((int)ParameterIndex.Lambda_B, OptimizationParameter.GetPositiveFactorInstance("Lambda_B", lB, true));

            optList.SetCheckConditions(CheckParameterConstraints);
            return(optList);
        }
Exemplo n.º 5
0
        protected virtual EvaluationResults CreateDummyResults(int[] fisherCounts)
        {
            List <Score> nullScores = new List <Score>(NullDistns.Count);

            foreach (DistributionDiscreteSingleVariable nullDistn in NullDistns)
            {
                OptimizationParameterList nullParams = nullDistn.GetParameters();
                foreach (OptimizationParameter param in nullParams)
                {
                    param.Value = double.NegativeInfinity;
                }
                Score nullScore = Score.GetInstance(0, nullParams, nullDistn);
                nullScores.Add(nullScore);
            }

            OptimizationParameterList altParams = this.AltDistn.GetParameters();

            foreach (OptimizationParameter param in altParams)
            {
                param.Value = double.NegativeInfinity;
            }
            Score altScore = Score.GetInstance(0, altParams, AltDistn);

            return(EvaluationResultsDiscrete.GetInstance(this, nullScores, altScore, fisherCounts, ChiSquareDegreesOfFreedom));
        }
 public override double[] GetPriorProbabilities(OptimizationParameterList discreteParameters)
 {
     double[] priors = new double[2];
     priors[(int)DistributionClass.True]  = discreteParameters[(int)ParameterIndex.Equilibrium].Value;
     priors[(int)DistributionClass.False] = 1 - priors[(int)DistributionClass.True];
     return(priors);
 }
        //public override bool TryDeriveParametersFromFisherCounts(int[] fisherCounts, out OptimizationParameterList parameters)
        //{
        //    parameters = null;
        //    if (fisherCounts.Length != 4)
        //    {
        //        return false;
        //    }

        //    int tt = fisherCounts[(int)TwoByTwo.ParameterIndex.TT];
        //    int tf = fisherCounts[(int)TwoByTwo.ParameterIndex.TF];
        //    int ft = fisherCounts[(int)TwoByTwo.ParameterIndex.FT];
        //    int ff = fisherCounts[(int)TwoByTwo.ParameterIndex.FF];
        //    int total = tt+tf+ft+ff;

        //    double predP = (double)(tt + tf) / total;
        //    double targP = (double)(tt + ft) / total;

        //    if (Math.Max(predP, targP) != 1 && Math.Min(predP, targP) != 0)
        //    {
        //        return false;
        //    }

        //    parameters = GetParameters();
        //    if (targP == 0 || targP == 1)
        //    {
        //        parameters[(int)ParameterIndex.Equilibrium].Value = targP;
        //        parameters[(int)ParameterIndex.Lambda].Value = 0;
        //    }
        //}

        private OptimizationParameterList GetParameters(bool useConditionalParameter, double empericalEq, OptimizationParameterList initParams)
        {
            if (initParams != null)
            {
                OptimizationParameterList cloneList  = (OptimizationParameterList)initParams.Clone();
                OptimizationParameter     parameter1 = cloneList[(int)ParameterIndex.Predictor1];
                parameter1.DoSearch = useConditionalParameter || PredictorParametersInSequence;
                OptimizationParameter parameter2 = cloneList[(int)ParameterIndex.Predictor2];
                parameter2.DoSearch = useConditionalParameter && Use2PredictorParameters;
                if (!useConditionalParameter)
                {
                    if (!PredictorParametersInSequence)
                    {
                        parameter1.Value = 0.0;
                    }
                    parameter2.Value = 0.0;
                }
                return(cloneList);
            }
            else
            {
                OptimizationParameterList optList = OptimizationParameterList.GetInstance();

                optList.Add((int)ParameterIndex.Predictor1, OptimizationParameter.GetProbabilityInstance("selection_pressure", 0, useConditionalParameter || PredictorParametersInSequence));
                optList.Add((int)ParameterIndex.Predictor2, OptimizationParameter.GetProbabilityInstance("secondary_selection_pressure", 0, useConditionalParameter && Use2PredictorParameters));
                optList.Add((int)ParameterIndex.Lambda, OptimizationParameter.GetPositiveFactorInstance("lambda", 1, true));
                optList.Add((int)ParameterIndex.Equilibrium, OptimizationParameter.GetProbabilityInstance("pi", empericalEq, true));


                return(optList);
            }
        }
Exemplo n.º 8
0
        private static void ComputeIidScores(int[] fisherCounts, out List <Score> nullScores, out Score altScore)
        {
            int tt  = fisherCounts[(int)TwoByTwo.ParameterIndex.TT];
            int tf  = fisherCounts[(int)TwoByTwo.ParameterIndex.TF];
            int ft  = fisherCounts[(int)TwoByTwo.ParameterIndex.FT];
            int ff  = fisherCounts[(int)TwoByTwo.ParameterIndex.FF];
            int sum = SpecialFunctions.Sum(fisherCounts);

            double pi0 = (double)(tt + tf) / sum;
            double pi1 = (double)(tt + ft) / sum;
            double ptt = (double)tt / sum;
            double ptf = (double)tf / sum;
            double pft = (double)ft / sum;
            double pff = (double)ff / sum;

            OptimizationParameterList nullParamsLeft = OptimizationParameterList.GetInstance(
                OptimizationParameter.GetProbabilityInstance("Pi", pi0, true));
            OptimizationParameterList nullParamsRight = OptimizationParameterList.GetInstance(
                OptimizationParameter.GetProbabilityInstance("Pi", pi1, true));

            OptimizationParameterList altParams = OptimizationParameterList.GetInstance(
                OptimizationParameter.GetProbabilityInstance("P_TT", ptt, true),
                OptimizationParameter.GetProbabilityInstance("P_TF", ptf, true),
                OptimizationParameter.GetProbabilityInstance("P_FT", pft, true));

            ComputeIidScoresGivenParams(fisherCounts, nullParamsLeft, nullParamsRight, altParams, out nullScores, out altScore);
        }
        public override IMessage InitializeMessage(Leaf leaf, OptimizationParameterList discreteParameters)
        {
            int stateCount = DiscreteDistribution.NonMissingClassCount;

            double[] p = new double[stateCount];
            if (IsMissing(leaf))
            {
                //If missing data, return 1 to ignore this branch.
                for (int iParentState = 0; iParentState < stateCount; ++iParentState)
                {
                    p[iParentState] = 1.0;
                }
            }
            else
            {
                double[][] dist       = DiscreteDistribution.CreateDistribution(leaf, discreteParameters, LeafToPredictorStatistics);
                int        distnClass = (DiscreteStatistics)LeafToTargetStatistics(leaf);
                for (int iParentState = 0; iParentState < stateCount; ++iParentState)
                {
                    p[iParentState] = dist[iParentState][distnClass];
                }
            }



            MessageDiscrete message = MessageDiscrete.GetInstance(p);

            return(message);
        }
        public double GetEquilibriumVariance(OptimizationParameterList gaussianParameters)
        {
            double AlphaVariance = gaussianParameters["AlphaVariance"].Value;
            double alpha         = gaussianParameters["Alpha"].Value;

            return(AlphaVariance / alpha);
        }
Exemplo n.º 11
0
        protected virtual OptimizationParameterList GetParameters(bool useConditionalParameter, bool zeroVariance)
        {
            // ignore the initial parameter settings.

            OptimizationParameterList paramStart = OptimizationParameterList.GetInstance(
                OptimizationParameter.GetPositiveFactorInstance("Alpha", 1, true),
                //OptimizationParameter.GetProbabilityInstance("Alpha", .5, true),
                OptimizationParameter.GetPositiveFactorInstance("Variance", 10000, true),
                //OptimizationParameter.GetPositiveFactorInstance("AlphaVariance", 10000, true),
                OptimizationParameter.GetTanInstance("Delta", 0, useConditionalParameter, -1000, 1000),
                OptimizationParameter.GetTanInstance("Mean", 0, true, -1000, 1000),
                zeroVariance ? OptimizationParameter.GetPositiveFactorInstance("vNoise", 0, false)
                             : OptimizationParameter.GetPositiveFactorInstance("vNoise", 75, true)
                );

            //TEMPORARY TESTING!!!!!!!
            //paramStart["Alpha"].Value = 0.165267457;
            //paramStart["AlphaVariance"].Value = 6952.429217;
            //paramStart["Delta"].Value = -23.71002634;
            //paramStart["Delta"].DoSearch = true;
            paramStart["Mean"].Value     = 24.71176471;
            paramStart["Variance"].Value = 35.224;
            //paramStart["vNoise"].Value = 35.4194535;

            return(paramStart);
        }
Exemplo n.º 12
0
        public bool CheckParameterConstraints(OptimizationParameterList parameters)
        {
            double P_AB = parameters[(int)ParameterIndex.P_AB].Value;
            double P_Ab = parameters[(int)ParameterIndex.P_Ab].Value;
            double P_aB = parameters[(int)ParameterIndex.P_aB].Value;

            return(P_AB + P_Ab + P_aB <= 1);
        }
        private Score CombineScores(Score existingScore, Score newScoreToAdd, double pNewScoreToAdd)
        {
            OptimizationParameterList newAverageParamList = AverageParamLists(existingScore.OptimizationParameters, newScoreToAdd.OptimizationParameters, pNewScoreToAdd);
            double newLL    = existingScore.Loglikelihood + newScoreToAdd.Loglikelihood;
            Score  newScore = Score.GetInstance(newLL, newAverageParamList, existingScore.Distribution);

            return(newScore);
        }
 public static MessageInitializerDiscrete GetInstance(
     Converter <Leaf, SufficientStatistics> predictorClassFunction,
     Converter <Leaf, SufficientStatistics> targetClassFunction,
     DistributionDiscrete discreteDistribution,
     OptimizationParameterList initParams,
     IEnumerable <Leaf> fullLeafCollection)
 {
     return(new MessageInitializerDiscrete(SpecialFunctions.CreateSingletonList(predictorClassFunction), targetClassFunction, discreteDistribution, null, initParams, fullLeafCollection));
 }
        public static MessageInitializerDiscrete GetInstance(
            Converter <Leaf, SufficientStatistics> singleVariableClassFunction,
            DistributionDiscrete discreteDistribution,
            OptimizationParameterList initParams,
            IEnumerable <Leaf> fullLeafCollection)
        {
            List <Converter <Leaf, SufficientStatistics> > emptyList = new List <Converter <Leaf, SufficientStatistics> >();

            return(new MessageInitializerDiscrete(emptyList, singleVariableClassFunction, discreteDistribution, null, initParams, fullLeafCollection));
        }
        private OptimizationParameterList AverageParamLists(OptimizationParameterList existingParamList, OptimizationParameterList newParamList, double pNewScoreToAdd)
        {
            OptimizationParameterList resultParamList = existingParamList.Clone();

            foreach (OptimizationParameter param in newParamList)
            {
                param.Value = (1 - pNewScoreToAdd) * param.Value + pNewScoreToAdd * newParamList[param.Name].Value;
            }
            return(resultParamList);
        }
Exemplo n.º 17
0
        protected override OptimizationParameterList GetParameters(bool useConditionalParameter, bool zeroVariance)
        {
            OptimizationParameterList parameters = base.GetParameters(useConditionalParameter, zeroVariance);
            OptimizationParameter     alpha      = parameters["Alpha"];

            alpha.Value = 10000;
            //alpha.Value = double.PositiveInfinity;
            alpha.DoSearch = false;
            return(parameters);
        }
Exemplo n.º 18
0
        public override OptimizationParameterList GetParameters(double[] parametersInPrintOrder)
        {
            OptimizationParameterList parameters = GetParameters(true);

            parameters[(int)ParameterIndex.Lambda_A].Value = parametersInPrintOrder[0];
            parameters[(int)ParameterIndex.Lambda_B].Value = parametersInPrintOrder[1];
            parameters[(int)ParameterIndex.P_AB].Value     = parametersInPrintOrder[2];
            parameters[(int)ParameterIndex.P_Ab].Value     = parametersInPrintOrder[3];
            parameters[(int)ParameterIndex.P_aB].Value     = parametersInPrintOrder[4];
            return(parameters);
        }
Exemplo n.º 19
0
        public override double[] GetPriorProbabilities(OptimizationParameterList discreteParameters)
        {
            //const double eps = 0.0001;
            double[] priors = new double[4];
            priors[(int)DistributionClass.TrueTrue]   = discreteParameters[(int)ParameterIndex.P_AB].Value;
            priors[(int)DistributionClass.TrueFalse]  = discreteParameters[(int)ParameterIndex.P_Ab].Value;
            priors[(int)DistributionClass.FalseTrue]  = discreteParameters[(int)ParameterIndex.P_aB].Value;
            priors[(int)DistributionClass.FalseFalse] = 1 - priors[0] - priors[1] - priors[2];

            return(priors);
        }
        public OptimizationParameterList GetParameters(double[] parametersInPrintOrder)
        {
            OptimizationParameterList parameters = GetParameters(false, false);

            parameters["Alpha"].Value         = parametersInPrintOrder[0];
            parameters["AlphaVariance"].Value = parametersInPrintOrder[1];
            parameters["Delta"].Value         = parametersInPrintOrder[2];
            parameters["Mean"].Value          = parametersInPrintOrder[3];
            parameters["vNoise"].Value        = parametersInPrintOrder[4];
            return(parameters);
        }
Exemplo n.º 21
0
        public override string GetParameterValueString(OptimizationParameterList parameters)
        {
            double eTimesLambdaA = parameters[(int)ParameterIndex.ETimesLambaA].Value;
            double Lambda_Hla    = parameters[(int)ParameterIndex.Lambda_Hla].Value;
            double P_aa          = parameters[(int)ParameterIndex.P_AA].Value;
            double P_Hla         = parameters[(int)ParameterIndex.P_Hla].Value;
            double rTimesLambdaA = parameters[(int)ParameterIndex.RTimesLambdaA].Value;

            //double P_r = parameters[(int)ParameterIndex.P_r].Value;

            return(SpecialFunctions.CreateTabString(eTimesLambdaA, rTimesLambdaA, Lambda_Hla, P_aa, P_Hla));
        }
        public override OptimizationParameterList GetParameters(double[] parametersInPrintOrder)
        {
            OptimizationParameterList parameters = GetParameters(parametersInPrintOrder.Length >= 3, 0.5, null);

            int nullParameterOffset = parametersInPrintOrder.Length - 2;

            parameters[(int)ParameterIndex.Predictor1].Value  = parametersInPrintOrder.Length == 2 ? 0 : parametersInPrintOrder[0];
            parameters[(int)ParameterIndex.Predictor2].Value  = parametersInPrintOrder.Length < 4 ? 0 : parametersInPrintOrder[1];
            parameters[(int)ParameterIndex.Equilibrium].Value = parametersInPrintOrder[nullParameterOffset];
            parameters[(int)ParameterIndex.Lambda].Value      = parametersInPrintOrder[nullParameterOffset + 1];
            return(parameters);
        }
        //public virtual bool UsePredictorVariable(bool useParameter)
        //{
        //    return useParameter;
        //}

        public double[][] CreateDistribution(BranchOrLeaf branchOrLeaf, OptimizationParameterList discreteParameters,
                                             Converter <Leaf, SufficientStatistics> predictorClassFunction)
        {
            if (branchOrLeaf is Branch)
            {
                return(CreateDistribution((Branch)branchOrLeaf, discreteParameters));
            }
            else
            {
                return(CreateDistribution((Leaf)branchOrLeaf, discreteParameters, predictorClassFunction));
            }
        }
 protected MessageInitializerDiscrete(
     List <Converter <Leaf, SufficientStatistics> > predictorClassFunctionList,
     Converter <Leaf, SufficientStatistics> targetClassFunction,
     DistributionDiscrete discreteDistribution,
     int[] fisherCounts,
     OptimizationParameterList initParams,
     IEnumerable <Leaf> fullLeafCollection)
     : base(predictorClassFunctionList, targetClassFunction, discreteDistribution, fullLeafCollection)
 {
     _fisherCounts         = fisherCounts;
     _initializationParams = initParams;
 }
 public ConditionalGaussianDistribution CreateDistributionGaussianOrNull(
     BranchOrLeaf branchOrLeaf, OptimizationParameterList gaussianParameters, Converter <Leaf, SufficientStatistics> predictorLeafToBoolStats)
 {
     if (branchOrLeaf is Branch)
     {
         return(CreateDistributionGaussianOrNull((Branch)branchOrLeaf, gaussianParameters));
     }
     else
     {
         return(CreateDistributionGaussianOrNull((Leaf)branchOrLeaf, gaussianParameters, predictorLeafToBoolStats));
     }
 }
Exemplo n.º 26
0
        public override string GetParameterValueString(OptimizationParameterList parameters)
        {
            double lambdaA = parameters[(int)ParameterIndex.Lambda_A].Value;
            double lambdaB = parameters[(int)ParameterIndex.Lambda_B].Value;
            double P_AB    = parameters[(int)ParameterIndex.P_AB].Value;
            double P_Ab    = parameters[(int)ParameterIndex.P_Ab].Value;
            double P_aB    = parameters[(int)ParameterIndex.P_aB].Value;
            double P_ab    = 1 - P_AB - P_Ab - P_aB;
            double P_A     = P_AB + P_Ab;
            double P_B     = P_AB + P_aB;

            return(SpecialFunctions.CreateTabString(lambdaA, lambdaB, P_AB, P_Ab, P_aB, P_ab, P_A, P_B));
        }
Exemplo n.º 27
0
        public override OptimizationParameterList GetParameters(double[] parametersInPrintOrder)
        {
            OptimizationParameterList parameters = GetParameters(true);

            parameters[(int)ParameterIndex.ETimesLambaA].Value  = parametersInPrintOrder[0];
            parameters[(int)ParameterIndex.RTimesLambdaA].Value = parametersInPrintOrder[1];
            parameters[(int)ParameterIndex.Lambda_Hla].Value    = parametersInPrintOrder[2];
            parameters[(int)ParameterIndex.P_AA].Value          = parametersInPrintOrder[3];
            parameters[(int)ParameterIndex.P_Hla].Value         = parametersInPrintOrder[4];
            //if (parametersInPrintOrder.Length == 6)
            //    parameters[(int)ParameterIndex.P_r].Value = parametersInPrintOrder[5];
            return(parameters);
        }
Exemplo n.º 28
0
        public override OptimizationParameterList GetParameters(int[] fisherCounts, OptimizationParameterList initParams)
        {
            double pAB, pAb, paB, lA, lB;

            if (initParams != null)
            {
                pAB = initParams[(int)ParameterIndex.P_AB].Value;
                pAb = initParams[(int)ParameterIndex.P_Ab].Value;
                paB = initParams[(int)ParameterIndex.P_aB].Value;
                lA  = initParams[(int)ParameterIndex.Lambda_A].Value;
                lB  = initParams[(int)ParameterIndex.Lambda_B].Value;
            }
            else if (fisherCounts.Length == 4)
            {
                double sum = (double)SpecialFunctions.Sum(fisherCounts);
                lA  = lB = 1;
                pAB = fisherCounts[(int)TwoByTwo.ParameterIndex.TT];
                pAb = fisherCounts[(int)TwoByTwo.ParameterIndex.TF];
                paB = fisherCounts[(int)TwoByTwo.ParameterIndex.FT];
            }
            else if (fisherCounts.Length == 2) // primarily for backward compatability testing
            {
                double empiricalEquilibrium = (double)fisherCounts[(int)DistributionDiscreteConditional.DistributionClass.True] / (fisherCounts[0] + fisherCounts[1]);
                lA  = lB = 1;
                pAB = empiricalEquilibrium / 2;
                pAb = empiricalEquilibrium / 2;
                paB = (1 - empiricalEquilibrium) / 2;
            }
            else
            {
                throw new ArgumentException("Cannot parse fisher counts of length " + fisherCounts.Length);
            }


            //double pAB = initParams == null ? empiricalEquilibrium / 2 : initParams[(int)ParameterIndex.P_AB].Value;
            //double pAb = initParams == null ? empiricalEquilibrium / 2 : initParams[(int)ParameterIndex.P_Ab].Value;
            //double paB = initParams == null ? (1 - empiricalEquilibrium) / 2 : initParams[(int)ParameterIndex.P_aB].Value;
            //double lA = initParams == null ? 1 : initParams[(int)ParameterIndex.Lambda_A].Value;
            //double lB = initParams == null ? 1 : initParams[(int)ParameterIndex.Lambda_B].Value;

            OptimizationParameterList optList = OptimizationParameterList.GetInstance();

            optList.Add((int)ParameterIndex.P_AB, OptimizationParameter.GetProbabilityInstance("P_TT", pAB, true));
            optList.Add((int)ParameterIndex.P_Ab, OptimizationParameter.GetProbabilityInstance("P_TF", pAb, true));
            optList.Add((int)ParameterIndex.P_aB, OptimizationParameter.GetProbabilityInstance("P_FT", paB, true));
            optList.Add((int)ParameterIndex.Lambda_A, OptimizationParameter.GetPositiveFactorInstance("Lambda_A", lA, true));
            optList.Add((int)ParameterIndex.Lambda_B, OptimizationParameter.GetPositiveFactorInstance("Lambda_B", lB, true));

            optList.SetCheckConditions(CheckParameterConstraints);
            return(optList);
        }
Exemplo n.º 29
0
        public override OptimizationParameterList GenerateInitialParams(OptimizationParameterList var1Params, OptimizationParameterList var2Params)
        {
            OptimizationParameterList initParams = GetParameters();
            double pA = var1Params[(int)DistributionDiscreteConditional.ParameterIndex.Equilibrium].Value;
            double pB = var2Params[(int)DistributionDiscreteConditional.ParameterIndex.Equilibrium].Value;

            initParams[(int)ParameterIndex.Lambda_A].Value = var1Params[(int)DistributionDiscreteConditional.ParameterIndex.Lambda].Value;
            initParams[(int)ParameterIndex.Lambda_B].Value = var2Params[(int)DistributionDiscreteConditional.ParameterIndex.Lambda].Value;
            initParams[(int)ParameterIndex.P_AB].Value     = pA * pB;
            initParams[(int)ParameterIndex.P_Ab].Value     = pA * (1 - pB);
            initParams[(int)ParameterIndex.P_aB].Value     = (1 - pA) * pB;

            return(initParams);
        }
Exemplo n.º 30
0
        /// <summary>
        /// Sets the initial parameter values to the independent model under the two given models.
        /// </summary>
        /// <param name="independent1"></param>
        /// <param name="independent2"></param>
        public virtual void SetInitialParams(OptimizationParameterList predictorParams, OptimizationParameterList targetParams)
        {
            OptimizationParameterList initParams = GetParameters(false);
            double pA = predictorParams[(int)DistributionDiscreteBinary.ParameterIndex.Equilibrium].Value;
            double pB = targetParams[(int)DistributionDiscreteBinary.ParameterIndex.Equilibrium].Value;

            initParams[(int)ParameterIndex.Lambda_A].Value = predictorParams[(int)DistributionDiscreteBinary.ParameterIndex.Lambda].Value;
            initParams[(int)ParameterIndex.Lambda_B].Value = targetParams[(int)DistributionDiscreteBinary.ParameterIndex.Lambda].Value;
            initParams[(int)ParameterIndex.P_AB].Value     = pA * pB;
            initParams[(int)ParameterIndex.P_Ab].Value     = pA * (1 - pB);
            initParams[(int)ParameterIndex.P_aB].Value     = (1 - pA) * pB;

            InitialParamVals = initParams;
        }