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); }
//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)); } }
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)); } }
public static Branch GetBranchInstance(StreamReader streamreader, bool isRoot) { Branch branch = new Branch(); branch.IsRoot = isRoot; //!!!fix it so that it can parse empty lists bool first = true; while (true) { char peek = Peek(streamreader); if (!first && peek == ')') { break; } char c = Read(streamreader); if (first) { SpecialFunctions.CheckCondition(c == '('); first = false; } else { SpecialFunctions.CheckCondition(c == ','); } branch.BranchOrLeafCollection.Add(BranchOrLeaf.GetInstance(streamreader, false)); } char rightChar = Read(streamreader); SpecialFunctions.CheckCondition(rightChar == ')'); return(branch); }
protected abstract double[][] DefaultDistribution(BranchOrLeaf branchOrLeaf, OptimizationParameterList discreteParameters);
protected override ConditionalGaussianDistribution GetPlainConditionalGaussianDistribution(BranchOrLeaf branchOrLeaf, OptimizationParameterList gaussianParameters) { double alphaTimesVariance = gaussianParameters["AlphaVariance"].Value; ConditionalGaussianDistribution plainConditionalDistribution = ConditionalGaussianDistribution.GetInstance(); // 0 (const part of mean) ax + b, Mean := b plainConditionalDistribution.Mean = 0; // 1 (ax + b = x), linearCoefficent := a. plainConditionalDistribution.LinearCoefficent = 1; plainConditionalDistribution.Variance = alphaTimesVariance * branchOrLeaf.Length; return(plainConditionalDistribution); }
protected override ConditionalGaussianDistribution GetPlainConditionalGaussianDistribution(BranchOrLeaf branchOrLeaf, OptimizationParameterList gaussianParameters) { double alphaTimesVariance = gaussianParameters["AlphaVariance"].Value; double mean = gaussianParameters["Mean"].Value; double alpha = gaussianParameters["Alpha"].Value; ConditionalGaussianDistribution plainConditionalDistribution = ConditionalGaussianDistribution.GetInstance(); double root1MinusAlphaTimesBranchLength = Math.Sqrt(1 - alpha * branchOrLeaf.Length); // ax + b, Mean := b plainConditionalDistribution.Mean = mean * (1.0 - root1MinusAlphaTimesBranchLength); // ax + b = x, LinearCoefficent := a plainConditionalDistribution.LinearCoefficent = root1MinusAlphaTimesBranchLength; plainConditionalDistribution.Variance = alphaTimesVariance * branchOrLeaf.Length; return(plainConditionalDistribution); }
protected abstract ConditionalGaussianDistribution GetPlainConditionalGaussianDistribution( BranchOrLeaf branchOrLeaf, OptimizationParameterList gaussianParameters);
protected override ConditionalGaussianDistributionParams GetPlainConditionalGaussianDistribution(BranchOrLeaf branchOrLeaf, OptimizationParameterList gaussianParameters) { // NOTE: For BM, interpret Alpha as AlphaTimesVariance. Alpha is only used to multiply against variance, and searching is easier we we do // it this way, as otherwise alphaTimesVariance is affected by both alpha and variance when we're searching. double alphaTimesVariance = gaussianParameters["Alpha"].Value; //double alpha = gaussianParameters["Alpha"].Value; //double variance = gaussianParameters["Variance"].Value; // 0 (const part of mean) ax + b, Mean := b double mean = 0; // 1 (ax + b = x), linearCoefficent := a. double linearCoefficient = 1; //double conditionalVariance = alpha * variance * branchOrLeaf.Length; double conditionalVariance = alphaTimesVariance * branchOrLeaf.Length; ConditionalGaussianDistributionParams plainConditionalDistribution = ConditionalGaussianDistributionParams.GetInstance(mean, conditionalVariance, linearCoefficient); return(plainConditionalDistribution); }
protected override ConditionalGaussianDistributionParams GetPlainConditionalGaussianDistribution(BranchOrLeaf branchOrLeaf, OptimizationParameterList gaussianParameters) { double variance = gaussianParameters["Variance"].Value; ConditionalGaussianDistributionParams plainConditionalDistribution = ConditionalGaussianDistributionParams.GetInstance(0, variance, 1); return(plainConditionalDistribution); }
protected override ConditionalGaussianDistributionParams GetPlainConditionalGaussianDistribution(BranchOrLeaf branchOrLeaf, OptimizationParameterList gaussianParameters) { double variance = gaussianParameters["Variance"].Value; //double alphaTimesVariance = gaussianParameters["AlphaVariance"].Value; double mean = gaussianParameters["Mean"].Value; double alpha = gaussianParameters["Alpha"].Value; double fOfBranchLength = FOfBranchLength(branchOrLeaf.Length, alpha); //ConditionalGaussianDistributionParams plainConditionalDistribution = ConditionalGaussianDistributionParams.GetInstance(); //double root1MinusAlphaTimesBranchLength = Math.Sqrt(1 - alpha * branchOrLeaf.Length); double root1MinusFofBranchLength = Math.Sqrt(1 - FOfBranchLength(branchOrLeaf.Length, alpha)); // ax + b, Mean := b double meanForGaussDistParams = mean * (1.0 - root1MinusFofBranchLength); //double meanForGausDistParams = mean * (1.0 - root1MinusAlphaTimesBranchLength); // ax + b = x, LinearCoefficent := a double linearCoeffForGaussDistParams = root1MinusFofBranchLength; //double linearCoeffForGausDistParams = root1MinusAlphaTimesBranchLength; //double varForGausDistParams = alphaTimesVariance * branchOrLeaf.Length; double varianceForGaussDistParams = fOfBranchLength * variance; ConditionalGaussianDistributionParams plainConditionalDistribution = ConditionalGaussianDistributionParams.GetInstance(meanForGaussDistParams, varianceForGaussDistParams, linearCoeffForGaussDistParams); return(plainConditionalDistribution); }
protected override double[][] DefaultDistribution(BranchOrLeaf branchOrLeaf, OptimizationParameterList parameters) { double[][] P = GetTransitionProbabilityMatrix(parameters, branchOrLeaf.Length); return(P); }