public void BetaMeanTest()
        {
            double alpha = 0.42;
            double beta  = 1.57;

            BetaDistribution betaDistribution = new BetaDistribution(alpha, beta);

            double mean   = betaDistribution.Mean;                                                     // 0.21105527638190955
            double median = betaDistribution.Median;                                                   // 0.11577706212908731
            double var    = betaDistribution.Variance;                                                 // 0.055689279830523512
            double mode   = betaDistribution.Mode;                                                     // 57.999999999999957

            double chf  = betaDistribution.CumulativeHazardFunction(x: 0.27);                          // 1.1828193992944409
            double cdf  = betaDistribution.DistributionFunction(x: 0.27);                              // 0.69358638272337991
            double pdf  = betaDistribution.ProbabilityDensityFunction(x: 0.27);                        // 0.94644031936694828
            double lpdf = betaDistribution.LogProbabilityDensityFunction(x: 0.27);                     // -0.055047364344046057
            double hf   = betaDistribution.HazardFunction(x: 0.27);                                    // 3.0887671630877072
            double ccdf = betaDistribution.ComplementaryDistributionFunction(x: 0.27);                 // 0.30641361727662009
            double icdf = betaDistribution.InverseDistributionFunction(p: cdf);                        // 0.26999999068687469

            string str = betaDistribution.ToString(System.Globalization.CultureInfo.InvariantCulture); // "B(x; α = 0.42, β = 1.57)

            Assert.AreEqual(0.21105527638190955, mean);
            Assert.AreEqual(0.11577706212908731, median);
            Assert.AreEqual(57.999999999999957, mode);
            Assert.AreEqual(0.055689279830523512, var);
            Assert.AreEqual(1.1828193992944409, chf);
            Assert.AreEqual(0.69358638272337991, cdf);
            Assert.AreEqual(0.94644031936694828, pdf);
            Assert.AreEqual(-0.055047364344046057, lpdf);
            Assert.AreEqual(3.0887671630877072, hf);
            Assert.AreEqual(0.30641361727662009, ccdf);
            Assert.AreEqual(0.27, icdf, 1e-10);
            Assert.AreEqual("B(x; α = 0.42, β = 1.57)", str);

            Assert.IsFalse(Double.IsNaN(median));

            var range1 = betaDistribution.GetRange(0.95);
            var range2 = betaDistribution.GetRange(0.99);
            var range3 = betaDistribution.GetRange(0.01);

            Assert.AreEqual(0.00045925525776717733, range1.Min);
            Assert.AreEqual(0.72381020663218609, range1.Max);
            Assert.AreEqual(0.0000099485893745082635, range2.Min);
            Assert.AreEqual(0.89625688707910811, range2.Max);
            Assert.AreEqual(0.0000099485893745082432, range3.Min);
            Assert.AreEqual(0.89625688707910811, range3.Max);

            Assert.AreEqual(0, betaDistribution.Support.Min);
            Assert.AreEqual(1, betaDistribution.Support.Max);

            Assert.AreEqual(betaDistribution.InverseDistributionFunction(0), betaDistribution.Support.Min);
            Assert.AreEqual(betaDistribution.InverseDistributionFunction(1), betaDistribution.Support.Max);
        }
예제 #2
0
        public static (double faintSuspicion, double strongSuspicion) GetSuspicionLevels(double mean, double sigma, double faintSuspicionCoefficient, double strongSuspicionCoefficient)
        {
            if (Math.Abs(sigma) < 1e-7)
            {
                return(1, 1);
            }
            var(alpha, beta) = GetBetaParameters(mean, sigma);
            var betaDistribution         = new BetaDistribution(alpha, beta);
            var faintSigmaToProbability  = new NormalDistribution(0, 1).DistributionFunction(faintSuspicionCoefficient);
            var strongSigmaToProbability = new NormalDistribution(0, 1).DistributionFunction(strongSuspicionCoefficient);
            var faintSuspicion           = betaDistribution.InverseDistributionFunction(faintSigmaToProbability);
            var strongSuspicion          = betaDistribution.InverseDistributionFunction(strongSigmaToProbability);

            return(faintSuspicion, strongSuspicion);
        }
예제 #3
0
        public void BetaMeanTest()
        {
            double alpha = 0.42;
            double beta  = 1.57;

            BetaDistribution betaDistribution = new BetaDistribution(alpha, beta);

            double mean   = betaDistribution.Mean;                                                     // 0.21105527638190955
            double median = betaDistribution.Median;                                                   // 0.11577706212908731
            double var    = betaDistribution.Variance;                                                 // 0.055689279830523512
            double chf    = betaDistribution.CumulativeHazardFunction(x: 0.27);                        // 1.1828193992944409
            double cdf    = betaDistribution.DistributionFunction(x: 0.27);                            // 0.69358638272337991
            double pdf    = betaDistribution.ProbabilityDensityFunction(x: 0.27);                      // 0.94644031936694828
            double lpdf   = betaDistribution.LogProbabilityDensityFunction(x: 0.27);                   // -0.055047364344046057
            double hf     = betaDistribution.HazardFunction(x: 0.27);                                  // 3.0887671630877072
            double ccdf   = betaDistribution.ComplementaryDistributionFunction(x: 0.27);               // 0.30641361727662009
            double icdf   = betaDistribution.InverseDistributionFunction(p: cdf);                      // 0.26999999068687469

            string str = betaDistribution.ToString(System.Globalization.CultureInfo.InvariantCulture); // "B(x; α = 0.42, β = 1.57)

            Assert.AreEqual(0.21105527638190955, mean);
            Assert.AreEqual(0.11577706212908731, median);
            Assert.AreEqual(0.055689279830523512, var);
            Assert.AreEqual(1.1828193992944409, chf);
            Assert.AreEqual(0.69358638272337991, cdf);
            Assert.AreEqual(0.94644031936694828, pdf);
            Assert.AreEqual(-0.055047364344046057, lpdf);
            Assert.AreEqual(3.0887671630877072, hf);
            Assert.AreEqual(0.30641361727662009, ccdf);
            Assert.AreEqual(0.27, icdf, 1e-10);
            Assert.AreEqual("B(x; α = 0.42, β = 1.57)", str);

            Assert.IsFalse(Double.IsNaN(median));
        }
예제 #4
0
        public void MedianTest()
        {
            double alpha = 0.42;
            double beta  = 1.57;

            BetaDistribution target = new BetaDistribution(alpha, beta);

            Assert.AreEqual(target.Median, target.InverseDistributionFunction(0.5));
        }
예제 #5
0
        public void BetaMeanTest2()
        {
            int trials    = 161750;
            int successes = 10007;

            BetaDistribution betaDistribution = new BetaDistribution(successes, trials);

            double mean   = betaDistribution.Mean;                                  // 0.06187249616697166
            double median = betaDistribution.Median;                                // 0.06187069085946604
            double p025   = betaDistribution.InverseDistributionFunction(p: 0.025); // 0.06070354581334864
            double p975   = betaDistribution.InverseDistributionFunction(p: 0.975); // 0.0630517079399996

            string str = betaDistribution.ToString();

            Assert.AreEqual(0.06187249616697166, mean);
            Assert.AreEqual(0.06187069085946604, median, 1e-6);
            Assert.AreEqual(0.06070354581334864, p025, 1e-6);
            Assert.AreEqual(0.0630517079399996, p975, 1e-6);
            Assert.AreEqual("B(x; α = 10008, β = 151744)", str);
        }
예제 #6
0
        public void BetaMeanTest3()
        {
            int trials    = 100;
            int successes = 78;

            BetaDistribution betaDistribution = new BetaDistribution(successes, trials);

            double mean   = betaDistribution.Mean;                                  // 0.77450980392156865
            double median = betaDistribution.Median;                                // 0.77630912598534851
            double p025   = betaDistribution.InverseDistributionFunction(p: 0.025); // 0.68899653915764347
            double p975   = betaDistribution.InverseDistributionFunction(p: 0.975); // 0.84983461640764513

            double orig025 = betaDistribution.DistributionFunction(p025);
            double orig975 = betaDistribution.DistributionFunction(p975);

            Assert.AreEqual(0.025, orig025, 1e-8);
            Assert.AreEqual(0.975, orig975, 1e-8);
            Assert.AreEqual(0.77450980392156865, mean, 1e-9);
            Assert.AreEqual(0.7763091275412235, median, 1e-9);
            Assert.AreEqual(0.68899667463246894, p025, 1e-6);
            Assert.AreEqual(0.84983461640764513, p975, 1e-6);
        }