public void BetaMLEFitTest1()
        {
            double[] x = samples;

            {
                var target  = GeneralizedBetaDistribution.Standard(1, 1);
                var options = new BetaOptions()
                {
                    Method = BetaEstimationMethod.Moments
                };
                target.Fit(x, options);

                Assert.AreEqual(1, target.Alpha, 0.04);
                Assert.AreEqual(3, target.Beta, 0.5);
            }

            {
                var target  = GeneralizedBetaDistribution.Standard(0, 1);
                var options = new BetaOptions()
                {
                    Method = BetaEstimationMethod.MaximumLikelihood
                };
                target.Fit(x, options);

                Assert.AreEqual(1, target.Alpha, 0.04);
                Assert.AreEqual(3, target.Beta, 0.55);
            }
        }
        public void BetaFitTest1()
        {
            double[] x = { 0.1, 0.5, 0.3, 0.8, 0.6, 0.7, 0.9, 0.9, 0.9, 0.9 };

            var target = GeneralizedBetaDistribution.Standard(0, 1);

            target.Fit(x);

            Assert.AreEqual(1.1810718232044195, target.Alpha, 1e-10);
            Assert.AreEqual(0.60843093922651903, target.Beta, 1e-10);
        }
        public void BetaMLEFit_IntWeights()
        {
            double[] x = { 1.0, 0.1, 0.5, 0.3, 0.5, 0.8, 0.6, 0.7, 0.9, 0.9, 0.9 };
            int[]    w = { 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 2 };

            var target = GeneralizedBetaDistribution.Standard(0, 1);


            var options = new BetaOptions()
            {
                Method = BetaEstimationMethod.MaximumLikelihood
            };

            target.Fit(x, w, options);

            Assert.AreEqual(1.1810718232044195, target.Alpha);
            Assert.AreEqual(0.60843093922651903, target.Beta, 1e-10);
        }
        public void BetaMeanTest2()
        {
            int trials    = 161750;
            int successes = 10007;

            var betaDistribution = GeneralizedBetaDistribution.Standard(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, min = 0, max = 1)", str);
        }
        public void BetaMeanTest3()
        {
            int trials    = 100;
            int successes = 78;

            var betaDistribution = GeneralizedBetaDistribution.Standard(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);
        }