예제 #1
0
        public void doc()
        {
            var grubb = new GrubbDistribution(samples: 8);

            double chf  = grubb.CumulativeHazardFunction(x: 1.27);                          // 0.25670891803568036
            double cdf  = grubb.DistributionFunction(x: 1.27);                              // 0.22640663992932097
            double ccdf = grubb.ComplementaryDistributionFunction(x: 1.27);                 // 0.773593360070679
            double icdf = grubb.InverseDistributionFunction(p: cdf);                        // 1.27

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

            Assert.AreEqual(0.25670891803568036, chf);
            Assert.AreEqual(0.22640663992932097, cdf);
            Assert.AreEqual(0.773593360070679, ccdf);
            Assert.AreEqual(1.27, icdf, 1e-10);
            Assert.AreEqual("Grubb(x; n = 8)", str);

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

            Assert.AreEqual(1.1684847650106549, range1.Min);
            Assert.AreEqual(2.031652001549944, range1.Max);
            Assert.AreEqual(1.1468556105506391, range2.Min);
            Assert.AreEqual(2.2208334515104258, range2.Max);
            Assert.AreEqual(1.1468556105506391, range3.Min);
            Assert.AreEqual(2.2208334515104258, range3.Max);

            Assert.AreEqual(1.1415178307749025, grubb.Support.Min, 1e-10);
            Assert.AreEqual(2.4748737341529163, grubb.Support.Max, 1e-10);

            Assert.AreEqual(grubb.InverseDistributionFunction(0), grubb.Support.Min);
            Assert.AreEqual(grubb.InverseDistributionFunction(1), grubb.Support.Max);
        }
예제 #2
0
        public void icdf()
        {
            var target = new GrubbDistribution(8);

            double icdf;

            icdf = target.InverseDistributionFunction(0);
            Assert.AreEqual(1.1415178307749025, icdf, 1e-8);

            icdf = target.InverseDistributionFunction(0.8);
            Assert.AreEqual(1.7490784053905972, icdf, 1e-8);

            icdf = target.InverseDistributionFunction(0.5);
            Assert.AreEqual(1.4560387907016017, icdf, 1e-8);

            icdf = target.InverseDistributionFunction(0.2);
            Assert.AreEqual(1.2540855738963992, icdf, 1e-8);

            icdf = target.InverseDistributionFunction(0.1);
            Assert.AreEqual(1.1961855587900832, icdf, 1e-8);

            icdf = target.InverseDistributionFunction(1);
            Assert.AreEqual(2.4748737341529163, icdf, 1e-8);

            Assert.Throws <ArgumentOutOfRangeException>(() => target.InverseDistributionFunction(1.5));
            Assert.Throws <ArgumentOutOfRangeException>(() => target.InverseDistributionFunction(-0.5));
        }
예제 #3
0
        public void cdf()
        {
            double[] x = Vector.Range(0.0, 1.0, stepSize: 1e-3);

            var target = new GrubbDistribution(7);

            double[] cdf = x.Apply(xi => target.InverseDistributionFunction(xi));

            double min = cdf.Min();
            double max = cdf.Max();

            Assert.AreEqual(2.2677868380553634, max, 1e-10);
            Assert.AreEqual(max, target.Support.Max, 1e-10);

            Assert.AreEqual(1.0688047803397081, min, 1e-10);
            Assert.AreEqual(min, target.Support.Min, 1e-10);

            double actual;

            Assert.AreEqual(0, target.DistributionFunction(-1));
            Assert.AreEqual(0, target.DistributionFunction(0));
            Assert.AreEqual(0, target.DistributionFunction(1));
            Assert.AreEqual(0, target.DistributionFunction((max - min) / 2.0));
            Assert.AreEqual(0.33127709351171297d, target.DistributionFunction(1.27), 1e-8);
            Assert.AreEqual(0, target.DistributionFunction(min));
            Assert.AreEqual(0, target.DistributionFunction(min - 1e-10));
            actual = target.DistributionFunction(min + 1e-10);
            Assert.AreEqual(2.5226376543230344E-10, actual, 1e-10);

            Assert.AreEqual(1, target.DistributionFunction(max), 1e-10);
            Assert.AreEqual(1, target.DistributionFunction(max - 1e-10), 1e-10);
            actual = target.DistributionFunction(max + 1e-10);
            Assert.AreEqual(1, actual, 1e-10);
        }
예제 #4
0
        public void cdf()
        {
            double[] x = Vector.Range(0.0, 1.0, stepSize: 1e-3);

            var target = new GrubbDistribution(42);

            double[] cdf = x.Apply(xi => target.InverseDistributionFunction(xi));

            double min = cdf.Min();
            double max = cdf.Max();

            Assert.AreEqual(6.3264373484457685, max, 1e-10);
            Assert.AreEqual(max, target.Support.Max, 1e-10);

            Assert.AreEqual(1.9451708565372674, min, 1e-10);

            Assert.AreEqual(0, target.DistributionFunction(-1));
            Assert.AreEqual(0, target.DistributionFunction(0));
            Assert.AreEqual(0, target.DistributionFunction(min));
            Assert.AreEqual(0, target.DistributionFunction(min - 1e-10));
            double actual = target.DistributionFunction(min + 1e-10);

            Assert.AreEqual(2.5226376543230344E-10, actual, 1e-10);
        }