Пример #1
0
        public void ConstructorTest()
        {
            double[] ranks = { 1, 2, 3, 4, 5.5, 5.5, 7, 8, 9, 10, 11, 12 };

            var W = new WilcoxonDistribution(ranks);

            double mean   = W.Mean;                                    // 39.0
            double median = W.Median;                                  // 38.5
            double var    = W.Variance;                                // 162.5

            double cdf  = W.DistributionFunction(w: 42);               // 0.60817384423279575
            double pdf  = W.ProbabilityDensityFunction(w: 42);         // 0.38418508862319295
            double lpdf = W.LogProbabilityDensityFunction(w: 42);      // 0.38418508862319295

            double ccdf  = W.ComplementaryDistributionFunction(x: 42); // 0.39182615576720425
            double icdf  = W.InverseDistributionFunction(p: cdf);      // 42
            double icdf2 = W.InverseDistributionFunction(p: 0.5);      // 42

            double hf  = W.HazardFunction(x: 42);                      // 0.98049883339449373
            double chf = W.CumulativeHazardFunction(x: 42);            // 0.936937017743799

            string str = W.ToString();                                 // "W+(x; R)"

            Assert.AreEqual(39.0, mean);
            Assert.AreEqual(38.5, median, 1e-6);
            Assert.AreEqual(162.5, var);
            Assert.AreEqual(0.936937017743799, chf);
            Assert.AreEqual(0.60817384423279575, cdf);
            Assert.AreEqual(0.38418508862319295, pdf);
            Assert.AreEqual(-0.95663084089698047, lpdf);
            Assert.AreEqual(0.98049883339449373, hf);
            Assert.AreEqual(0.39182615576720425, ccdf);
            Assert.AreEqual(42, icdf, 1e-6);
            Assert.AreEqual("W+(x; R)", str);
        }
Пример #2
0
        public void ConstructorTest2()
        {
            double[] ranks = { 1, 2, 3, 4, 5.5, 5.5, 7, 8, 9, 10, 11, 12 };

            var W = new WilcoxonDistribution(ranks, forceExact: true);

            double mean   = W.Mean;                                    // 39
            double median = W.Median;                                  // 39
            double var    = W.Variance;                                // 162.5

            double cdf  = W.DistributionFunction(w: 42);               // 0.582763671875
            double pdf  = W.ProbabilityDensityFunction(w: 42);         // 0.014404296875
            double lpdf = W.LogProbabilityDensityFunction(w: 42);      // -4.2402287228136233

            double ccdf  = W.ComplementaryDistributionFunction(x: 42); // 0.417236328125
            double icdf  = W.InverseDistributionFunction(p: cdf);      // 41.965447500067114
            double icdf2 = W.InverseDistributionFunction(p: 0.5);      // 39.000000487005138

            double hf  = W.HazardFunction(x: 42);                      // 0.03452311293153891
            double chf = W.CumulativeHazardFunction(x: 42);            // 0.87410248360375287

            string str = W.ToString();                                 // "W+(x; R)"

            Assert.AreEqual(39.0, mean);
            Assert.AreEqual(39.0, median, 1e-6);
            Assert.AreEqual(162.5, var);
            Assert.AreEqual(0.87410248360375287, chf);
            Assert.AreEqual(0.582763671875, cdf);
            Assert.AreEqual(0.014404296875, pdf);
            Assert.AreEqual(-4.2402287228136233, lpdf);
            Assert.AreEqual(0.03452311293153891, hf);
            Assert.AreEqual(0.417236328125, ccdf);
            Assert.AreEqual(42, icdf, 0.05);
            Assert.AreEqual("W+(x; R)", str);
        }
        public void ConstructorTest2()
        {
            double[] ranks = { 1, 2, 3, 4, 5.5, 5.5, 7, 8, 9, 10, 11, 12 };

            var W = new WilcoxonDistribution(ranks, exact: true);

            double mean   = W.Mean;                                    // 39
            double median = W.Median;                                  // 39
            double var    = W.Variance;                                // 162.5

            double cdf  = W.DistributionFunction(x: 42);               // 0.582763671875
            double pdf  = W.ProbabilityDensityFunction(x: 42);         // 0.014404296875
            double lpdf = W.LogProbabilityDensityFunction(x: 42);      // -4.2402287228136233

            double ccdf  = W.ComplementaryDistributionFunction(x: 42); // 0.417236328125
            double icdf  = W.InverseDistributionFunction(p: cdf);      // 41.965447500067114
            double icdf2 = W.InverseDistributionFunction(p: 0.5);      // 39.000000487005138

            double hf  = W.HazardFunction(x: 42);                      // 0.03452311293153891
            double chf = W.CumulativeHazardFunction(x: 42);            // 0.87410248360375287

            string str = W.ToString();                                 // "W+(x; R)"

            Assert.AreEqual(39.0, mean);
            Assert.AreEqual(39.0, median, 1e-6);
            Assert.AreEqual(162.5, var);
            Assert.AreEqual(0.87410248360375287, chf);
            Assert.AreEqual(0.59716796875, cdf, 1e-5);
            Assert.AreEqual(0.014404296875, pdf, 1e-8);
            Assert.AreEqual(-4.2402287228136233, lpdf);
            Assert.AreEqual(0.03452311293153891, hf);
            Assert.AreEqual(0.417236328125, ccdf);
            Assert.AreEqual(42.5, icdf, 0.05);
            Assert.AreEqual("W+(x; R)", str);

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

            Assert.AreEqual(17.999999736111114, range1.Min, 1e-6);
            Assert.AreEqual(60.000000315408002, range1.Max, 1e-6);
            Assert.AreEqual(10.000000351098127, range2.Min, 1e-6);
            Assert.AreEqual(67.99999981945885, range2.Max, 1e-6);
            Assert.AreEqual(10.000000351098119, range3.Min, 1e-6);
            Assert.AreEqual(67.99999981945885, range3.Max, 1e-6);
        }
        public void ProbabilityTest()
        {
            // Example from https://onlinecourses.science.psu.edu/stat414/node/319

            double[] ranks = { 1, 2, 3 };

            WilcoxonDistribution target = new WilcoxonDistribution(ranks);

            double[] expected = { 1 / 8.0, 1 / 8.0, 1 / 8.0, 2 / 8.0, 1 / 8.0, 1 / 8.0, 1 / 8.0 };

            for (int i = 0; i < expected.Length; i++)
            {
                // P(W=i)
                double actual = target.ProbabilityDensityFunction(i);
                Assert.AreEqual(expected[i], actual);
            }
        }
        public void ConstructorTest()
        {
            double[] ranks = { 1, 2, 3, 4, 5.5, 5.5, 7, 8, 9, 10, 11, 12 };

            var W = new WilcoxonDistribution(ranks);

            double mean   = W.Mean;                                    // 39.0
            double median = W.Median;                                  // 38.5
            double var    = W.Variance;                                // 162.5
            double mode   = W.Mode;                                    // 39.0

            double cdf  = W.DistributionFunction(x: 42);               // 0.60817384423279575
            double pdf  = W.ProbabilityDensityFunction(x: 42);         // 0.38418508862319295
            double lpdf = W.LogProbabilityDensityFunction(x: 42);      // 0.38418508862319295

            double ccdf  = W.ComplementaryDistributionFunction(x: 42); // 0.39182615576720425
            double icdf  = W.InverseDistributionFunction(p: cdf);      // 42
            double icdf2 = W.InverseDistributionFunction(p: 0.5);      // 42

            double hf  = W.HazardFunction(x: 42);                      // 0.98049883339449373
            double chf = W.CumulativeHazardFunction(x: 42);            // 0.936937017743799

            string str = W.ToString();                                 // "W+(x; R)"

            Assert.AreEqual(39.0, mean);
            Assert.AreEqual(39, median, 1e-6);
            Assert.AreEqual(39.0, mode, 1e-8);
            Assert.AreEqual(162.5, var);
            Assert.AreEqual(0.87410248360375287, chf, 1e-8);
            Assert.AreEqual(0.59716796875, cdf, 1e-8);
            Assert.AreEqual(0.014404296875, pdf, 1e-8);
            Assert.AreEqual(-4.2402287228136233, lpdf, 1e-8);
            Assert.AreEqual(0.03452311293153891, hf, 1e-8);
            Assert.AreEqual(0.417236328125, ccdf, 1e-8);
            Assert.AreEqual(42.5, icdf, 0.05);
            Assert.AreEqual("W+(x; R)", str);

            Assert.AreEqual(0, W.Support.Min);
            Assert.AreEqual(double.PositiveInfinity, W.Support.Max);

            Assert.AreEqual(W.InverseDistributionFunction(0), W.Support.Min);
            Assert.AreEqual(W.InverseDistributionFunction(1), W.Support.Max);
        }