Example #1
0
        protected override void EndProcessing()
        {
            var hypo = TestingHelper.GetTwoSampleHypothesis(Alternate);

            MannWhitneyWilcoxonTest test;

            if (ParameterSetName == "Pipeline")
            {
                var samples = _data.GroupBy(CategoryName).ToDoubleJaggedArrayOf(ValueName);
                if (samples.Length != 2)
                {
                    WriteError(new ErrorRecord(new RuntimeException("The number of categories is not two"), "", ErrorCategory.InvalidArgument, null));
                    return;
                }
                test = new MannWhitneyWilcoxonTest(samples[0], samples[1], hypo, (Exact ? true : (Nullable <bool>)null), !NoAdjustForTies);
            }
            else
            {
                test = new MannWhitneyWilcoxonTest(Sample1, Sample2, hypo, (Exact ? true : (Nullable <bool>)null), !NoAdjustForTies);
            }

            test.Size = Size;

            WriteObject(test);
        }
Example #2
0
        public void same_vectors()
        {
            // https://github.com/accord-net/framework/issues/857

            /*
             *  a <- c(250,200,450,400,250,250,350,0,200,400,300,600,200,200,
             *         550,100,300,250,350,200,550,200,450,400,200,400,450,
             *         200,400,400,500,450,300,250,200)
             *  b <- c(250,200,450,400,250,250,350,0,200,400,300,600,200,200,
             *         550,100,300,250,350,200,550,200,450,400,200,400,450,
             *         200,400,400,500,450,300,250,200)
             *
             *  wilcox.test(a, b)
             */

            double[] a = new double[] { 250, 200, 450, 400, 250, 250, 350, 0, 200, 400, 300, 600, 200, 200,
                                        550, 100, 300, 250, 350, 200, 550, 200, 450, 400, 200, 400, 450,
                                        200, 400, 400, 500, 450, 300, 250, 200 };
            double[] b = new double[] { 250, 200, 450, 400, 250, 250, 350, 0, 200, 400, 300, 600, 200, 200,
                                        550, 100, 300, 250, 350, 200, 550, 200, 450, 400, 200, 400, 450,
                                        200, 400, 400, 500, 450, 300, 250, 200 };

            var target = new MannWhitneyWilcoxonTest(a, b, adjustForTies: true);

            Assert.AreEqual(1.0, target.PValue, 5e-3);
        }
Example #3
0
        public void same_as_above_inverted_order()
        {
            double[] sample2 = { 4.6, 4.7, 4.9, 5.1, 5.2, 5.5, 5.8, 6.1, 6.5, 6.5, 7.2 };
            double[] sample1 = { 5.2, 5.3, 5.4, 5.6, 6.2, 6.3, 6.8, 7.7, 8.0, 8.1 };

            var test = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                   TwoSampleHypothesis.FirstValueIsGreaterThanSecond);

            Assert.AreEqual(096.5, test.RankSum2);
            Assert.AreEqual(134.5, test.RankSum1);

            Assert.AreEqual(79.5, test.Statistic1);
            Assert.AreEqual(30.5, test.Statistic2);
            //Assert.AreEqual(30.5, test.Statistic);

            Assert.AreEqual(DistributionTail.OneUpper, test.Tail);
            Assert.AreEqual(TwoSampleHypothesis.FirstValueIsGreaterThanSecond, test.Hypothesis);

            Assert.IsTrue(test.Significant);
            Assert.AreEqual(0.043834132843420769, test.PValue, 1e-10);


            test = new MannWhitneyWilcoxonTest(sample1, sample2);
            Assert.AreEqual(TwoSampleHypothesis.ValuesAreDifferent, test.Hypothesis);

            double[] expectedRank2 = { 1, 2, 3, 4, 5.5, 9, 11, 12, 15.5, 15.5, 18 };
            double[] expectedRank1 = { 5.5, 7, 8, 10, 13, 14, 17, 19, 20, 21 };

            Assert.IsTrue(test.Rank1.IsEqual(expectedRank1));
            Assert.IsTrue(test.Rank2.IsEqual(expectedRank2));

            Assert.AreEqual(096.5, test.RankSum2);
            Assert.AreEqual(134.5, test.RankSum1);

            Assert.AreEqual(79.5, test.Statistic1);
            Assert.AreEqual(30.5, test.Statistic2);

            Assert.IsFalse(test.Significant);
            Assert.AreEqual(0.087668265686841537, test.PValue, 1e-10);



            // Create a new Mann-Whitney-Wilcoxon's test to compare the two samples
            test = new MannWhitneyWilcoxonTest(sample1, sample2,
                                               TwoSampleHypothesis.FirstValueIsSmallerThanSecond);

            Assert.AreEqual(096.5, test.RankSum2);
            Assert.AreEqual(134.5, test.RankSum1);

            Assert.AreEqual(79.5, test.Statistic1);
            Assert.AreEqual(30.5, test.Statistic2);
            //Assert.AreEqual(30.5, test.Statistic);

            Assert.AreEqual(DistributionTail.OneLower, test.Tail);
            Assert.AreEqual(TwoSampleHypothesis.FirstValueIsSmallerThanSecond, test.Hypothesis);

            Assert.IsFalse(test.Significant);
            Assert.AreEqual(0.959420610349403, test.PValue, 1e-10);
        }
Example #4
0
        public void non_exact_symmetry_same_size()
        {
            double[] sample2 = { 4.6, 4.7, 4.9, 5.1, 5.2, 5.5, 5.8, 6.1, 6.5, 6.5 };
            double[] sample1 = { 5.2, 5.3, 5.4, 5.6, 6.2, 6.3, 6.8, 7.7, 8.0, 8.1 };
            {
                // Those should be equal
                var e12 = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                      TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: true);
                Assert.AreEqual(e12.PValue, 0.97945122400837448, 1e-5); // ok
                var a12 = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                      TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: false);
                Assert.AreEqual(a12.PValue, 0.97945122400837448, 1e-5); // ok
                var e21 = new MannWhitneyWilcoxonTest(sample2, sample1,
                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: true);
                Assert.AreEqual(e21.PValue, 0.97945122400837448, 1e-5); // ok
                var a21 = new MannWhitneyWilcoxonTest(sample2, sample1,
                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: false);
                Assert.AreEqual(a21.PValue, 0.97945122400837448, 1e-5); // ok

                Assert.IsFalse(a12.IsExact);
                Assert.IsFalse(a21.IsExact);
                Assert.IsFalse(a12.IsExact);
                Assert.IsFalse(e12.IsExact);

                Assert.AreEqual(a12.PValue, e12.PValue, 1e-8);
                Assert.AreEqual(a21.PValue, e21.PValue, 1e-8);
                Assert.AreEqual(a12.PValue, e21.PValue, 1e-8);
                Assert.AreEqual(e12.PValue, e21.PValue, 1e-8);
            }

            {
                // Those should be equal
                var e12 = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: true);
                Assert.AreEqual(e12.PValue, 0.024597676755701903, 1e-5); // ok
                var a12 = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: false);
                Assert.AreEqual(a12.PValue, 0.024597676755701903, 1e-5); // ok
                var e21 = new MannWhitneyWilcoxonTest(sample2, sample1,
                                                      TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: true);
                Assert.AreEqual(e21.PValue, 0.024597676755701903, 1e-5); // ok
                var a21 = new MannWhitneyWilcoxonTest(sample2, sample1,
                                                      TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: false);
                Assert.AreEqual(a21.PValue, 0.024597676755701903, 1e-5); // ok

                Assert.IsFalse(a12.IsExact);
                Assert.IsFalse(a21.IsExact);
                Assert.IsFalse(a12.IsExact);
                Assert.IsFalse(e12.IsExact);

                Assert.AreEqual(a12.PValue, e12.PValue, 1e-8);
                Assert.AreEqual(a21.PValue, e21.PValue, 1e-8);
                Assert.AreEqual(a12.PValue, e21.PValue, 1e-8);
                Assert.AreEqual(e12.PValue, e21.PValue, 1e-8);
            }
        }
        public void MannWhitneyWilcoxonTestConstructorTest()
        {
            // The following example comes from Richard Lowry's page at
            // http://vassarstats.net/textbook/ch11a.html. As stated by
            // Richard, this example deals with persons seeking treatment
            // by claustrophobia. Those persons are randomly divided into
            // two groups, and each group receive a different treatment
            // for the disorder.

            // The hypothesis would be that treatment A would more effective
            // than B. To check this hypothesis, we can use Mann-Whitney's Test
            // to compare the medians of both groups.

            // Claustrophobia test scores for people treated with treatment A
            double[] sample1 = { 4.6, 4.7, 4.9, 5.1, 5.2, 5.5, 5.8, 6.1, 6.5, 6.5, 7.2 };

            // Claustrophobia test scores for people treated with treatment B
            double[] sample2 = { 5.2, 5.3, 5.4, 5.6, 6.2, 6.3, 6.8, 7.7, 8.0, 8.1 };

            // Create a new Mann-Whitney-Wilcoxon's test to compare the two samples
            MannWhitneyWilcoxonTest test = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                                       TwoSampleHypothesis.FirstValueIsSmallerThanSecond);

            Assert.AreEqual(096.5, test.RankSum1);
            Assert.AreEqual(134.5, test.RankSum2);

            Assert.AreEqual(79.5, test.Statistic1);
            Assert.AreEqual(30.5, test.Statistic2);

            Assert.AreEqual(TwoSampleHypothesis.FirstValueIsSmallerThanSecond, test.Hypothesis);

            // Directional should be significant
            Assert.IsTrue(test.Significant);
            Assert.AreEqual(0.043834132843420748, test.PValue);


            test = new MannWhitneyWilcoxonTest(sample1, sample2);

            Assert.AreEqual(TwoSampleHypothesis.ValuesAreDifferent, test.Hypothesis);

            double[] expectedRank1 = { 1, 2, 3, 4, 5.5, 9, 11, 12, 15.5, 15.5, 18 };
            double[] expectedRank2 = { 5.5, 7, 8, 10, 13, 14, 17, 19, 20, 21 };

            Assert.IsTrue(expectedRank1.IsEqual(expectedRank1));
            Assert.IsTrue(expectedRank2.IsEqual(expectedRank2));

            Assert.AreEqual(096.5, test.RankSum1);
            Assert.AreEqual(134.5, test.RankSum2);

            Assert.AreEqual(79.5, test.Statistic1);
            Assert.AreEqual(30.5, test.Statistic2);

            // Non-directional is non-significant
            Assert.IsFalse(test.Significant);
        }
        public void MannWhitneyWilcoxonTestConstructorTest()
        {
            // The following example comes from Richard Lowry's page at
            // http://vassarstats.net/textbook/ch11a.html. As stated by
            // Richard, this example deals with persons seeking treatment
            // by claustrophobia. Those persons are randomly divided into
            // two groups, and each group receive a different treatment
            // for the disorder.
            
            // The hypothesis would be that treatment A would more effective
            // than B. To check this hypothesis, we can use Mann-Whitney's Test
            // to compare the medians of both groups.
            
            // Claustrophobia test scores for people treated with treatment A
            double[] sample1 = { 4.6, 4.7, 4.9, 5.1, 5.2, 5.5, 5.8, 6.1, 6.5, 6.5, 7.2 };

            // Claustrophobia test scores for people treated with treatment B
            double[] sample2 = { 5.2, 5.3, 5.4, 5.6, 6.2, 6.3, 6.8, 7.7, 8.0, 8.1 };

            // Create a new Mann-Whitney-Wilcoxon's test to compare the two samples
            MannWhitneyWilcoxonTest test = new MannWhitneyWilcoxonTest(sample1, sample2,
                TwoSampleHypothesis.FirstValueIsSmallerThanSecond);

            Assert.AreEqual(096.5, test.RankSum1);
            Assert.AreEqual(134.5, test.RankSum2);

            Assert.AreEqual(79.5, test.Statistic1);
            Assert.AreEqual(30.5, test.Statistic2);

            Assert.AreEqual(TwoSampleHypothesis.FirstValueIsSmallerThanSecond, test.Hypothesis);

            // Directional should be significant
            Assert.IsTrue(test.Significant);
            Assert.AreEqual(0.043834132843420748, test.PValue);


            test = new MannWhitneyWilcoxonTest(sample1, sample2);

            Assert.AreEqual(TwoSampleHypothesis.ValuesAreDifferent, test.Hypothesis);

            double[] expectedRank1 = { 1, 2, 3, 4, 5.5, 9, 11, 12, 15.5, 15.5, 18 };
            double[] expectedRank2 = { 5.5, 7, 8, 10, 13, 14, 17, 19, 20, 21 };

            Assert.IsTrue(expectedRank1.IsEqual(expectedRank1));
            Assert.IsTrue(expectedRank2.IsEqual(expectedRank2));

            Assert.AreEqual(096.5, test.RankSum1);
            Assert.AreEqual(134.5, test.RankSum2);

            Assert.AreEqual(79.5, test.Statistic1);
            Assert.AreEqual(30.5, test.Statistic2);

            // Non-directional is non-significant
            Assert.IsFalse(test.Significant);
        }
Example #7
0
        public void non_exact_symmetry()
        {
            /*
             *   a = c(4.6, 4.7, 4.9, 5.1, 5.2, 5.5, 5.8, 6.1, 6.5, 6.5, 7.2)
             *   b = c(5.2, 5.3, 5.4, 5.6, 6.2, 6.3, 6.8, 7.7, 8.0, 8.1)
             *   wilcox.test(a,b,'greater') # W = 30.5, p-value = 0.9609
             *   wilcox.test(a,b,'less')    # W = 30.5, p-value = 0.04541
             */
            double[] sample2 = { 4.6, 4.7, 4.9, 5.1, 5.2, 5.5, 5.8, 6.1, 6.5, 6.5, 7.2 };
            double[] sample1 = { 5.2, 5.3, 5.4, 5.6, 6.2, 6.3, 6.8, 7.7, 8.0, 8.1 };
            {
                // Those should be equal
                var e12 = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                      TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: true);
                Assert.AreEqual(e12.PValue, 0.96093080726732927, 1e-5); // ok
                Assert.IsFalse(e12.IsExact);                            // the data contains ties
                var a12 = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                      TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: false);
                Assert.IsFalse(a12.IsExact);                            // the data contains ties
                Assert.AreEqual(a12.PValue, 0.96093080726732927, 1e-5); // ok
                var e21 = new MannWhitneyWilcoxonTest(sample2, sample1,
                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: true);
                Assert.IsFalse(e21.IsExact);                            // the data contains ties
                Assert.AreEqual(e21.PValue, 0.96093080726732927, 1e-5); // ok
                var a21 = new MannWhitneyWilcoxonTest(sample2, sample1,
                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: false);
                Assert.AreEqual(a21.PValue, 0.96093080726732927, 1e-5); // ok
                Assert.IsFalse(a21.IsExact);                            // the data contains ties

                Assert.AreEqual(a12.PValue, e12.PValue, 1e-8);
                Assert.AreEqual(a21.PValue, e21.PValue, 1e-8);
                Assert.AreEqual(a12.PValue, e21.PValue, 1e-8);
            }

            {
                // Those should be equal
                var e12 = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: true);
                Assert.AreEqual(e12.PValue, 0.0454062185864162, 1e-5); // ok
                var a12 = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: false);
                Assert.AreEqual(a12.PValue, 0.0454062185864162, 1e-5); // ok
                var e21 = new MannWhitneyWilcoxonTest(sample2, sample1,
                                                      TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: true);
                Assert.AreEqual(e21.PValue, 0.0454062185864162, 1e-5); // ok
                var a21 = new MannWhitneyWilcoxonTest(sample2, sample1,
                                                      TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: false);
                Assert.AreEqual(a21.PValue, 0.0454062185864162, 1e-5); // ok

                Assert.AreEqual(a12.PValue, e12.PValue, 1e-8);
                Assert.AreEqual(a21.PValue, e21.PValue, 1e-8);
                Assert.AreEqual(a12.PValue, e21.PValue, 1e-8);
            }
        }
Example #8
0
        public void symmetry_test()
        {
            // Example from https://www.r-bloggers.com/wilcoxon-mann-whitney-rank-sum-test-or-test-u/

            double[] a = { 6, 8, 2, 4, 4, 5 };
            double[] b = { 7, 10, 4, 3, 5, 6 };

            var ab = new MannWhitneyWilcoxonTest(a, b);
            var ba = new MannWhitneyWilcoxonTest(b, a);

            Assert.AreEqual(0.5736, ab.PValue, 1e-4);
            Assert.AreEqual(ab.PValue, ba.PValue, 1e-10);
        }
Example #9
0
        public void MannWhitneyWilcoxonTestConstructorTest1()
        {
            // Example from Conover, "Practical nonparametric statistics", 1999  (pg. 218)

            double[] sample1 = { 14.8, 7.3, 5.6, 6.3, 9.0, 4.2, 10.6, 12.5, 12.9, 16.1, 11.4, 2.7 };

            double[] sample2 =
            {
                12.7, 14.2, 12.6,  2.1, 17.7, 11.8, 16.9,  7.9, 16.0, 10.6, 5.6,
                5.6,   7.6, 11.3,  8.3,  6.7,  3.6,  1.0,  2.4,  6.4,  9.1, 6.7,18.6, 3.2,
                6.2,   6.1, 15.3, 10.6,  1.8,  5.9,  9.9, 10.6, 14.8,  5.0, 2.6, 4.0
            };

            var target = new MannWhitneyWilcoxonTest(sample1, sample2);

            Assert.IsFalse(target.StatisticDistribution.Exact);
            Assert.AreEqual(216, target.StatisticDistribution.Mean); // mean of U (not W as in R)
            Assert.AreEqual(1762.4680851063831, target.StatisticDistribution.Variance, 1e-10);
            Assert.AreEqual(0.52789241803534459, target.PValue, 1e-10);

            target = new MannWhitneyWilcoxonTest(sample1, sample2, TwoSampleHypothesis.FirstValueIsGreaterThanSecond);
            Assert.IsFalse(target.StatisticDistribution.Exact);
            Assert.AreEqual(DistributionTail.OneUpper, target.Tail);
            Assert.AreEqual(target.Tail, DistributionTail.OneUpper);
            Assert.AreEqual(0.2639462090176723, target.PValue, 1e-10);

            target = new MannWhitneyWilcoxonTest(sample1, sample2, TwoSampleHypothesis.FirstValueIsSmallerThanSecond);
            Assert.IsFalse(target.StatisticDistribution.Exact);
            Assert.AreEqual(DistributionTail.OneLower, target.Tail);
            Assert.AreEqual(0.743781059309828, target.PValue, 1e-10);



            // Same but with inverted sample1 & sample2
            target = new MannWhitneyWilcoxonTest(sample2, sample1);
            Assert.IsFalse(target.StatisticDistribution.Exact);
            Assert.AreEqual(216, target.StatisticDistribution.Mean); // mean of U (not W as in R)
            Assert.AreEqual(1762.4680851063831, target.StatisticDistribution.Variance, 1e-10);
            Assert.AreEqual(0.52789241803534459, target.PValue, 1e-10);

            target = new MannWhitneyWilcoxonTest(sample2, sample1, TwoSampleHypothesis.FirstValueIsGreaterThanSecond);
            Assert.IsFalse(target.StatisticDistribution.Exact);
            Assert.AreEqual(DistributionTail.OneUpper, target.Tail);
            Assert.AreEqual(0.743781059309828, target.PValue, 1e-10);

            target = new MannWhitneyWilcoxonTest(sample2, sample1, TwoSampleHypothesis.FirstValueIsSmallerThanSecond);
            Assert.IsFalse(target.StatisticDistribution.Exact);
            Assert.AreEqual(DistributionTail.OneLower, target.Tail);
            Assert.AreEqual(0.2639462090176723, target.PValue, 1e-10);
        }
        private static void RealTest(AggregateMetrics first, AggregateMetrics second)
        {
            // Wilcoxon test to not assume normal distributions

            var mannWhitneyWilcoxonTest = new MannWhitneyWilcoxonTest(
                first.Runs.Select(run => run.ElapsedNanos).ToArray(),
                second.Runs.Select(run => run.ElapsedNanos).ToArray(),
                TwoSampleHypothesis.FirstValueIsSmallerThanSecond);

            Trace.WriteLine(
                "MannWWT s1 < s2:  " + mannWhitneyWilcoxonTest.PValue +
                " Stat1: " + mannWhitneyWilcoxonTest.Statistic1 + "; Stat2: " + mannWhitneyWilcoxonTest.Statistic2 +
                " - Significant: " + mannWhitneyWilcoxonTest.Significant + " - Hyp: " + mannWhitneyWilcoxonTest.Hypothesis);

            PerfAssertContext.AssertIsTrue(mannWhitneyWilcoxonTest.Significant);
        }
Example #11
0
        public void RCompatibilityTest()
        {
            // Test case from https://github.com/accord-net/framework/issues/389

            /*
             *   // Test against R:
             *   a <- c(35, 15, 25, 10, 45, 20, 21, 22, 30, 17)
             *   b <- c(20, 17, 23, 15, 49, 19, 24, 26, 33, 18)
             *
             *   wilcox.test(a,b, paired=FALSE, alternative="greater")     # W = 49.5, p-value = 0.5302
             *   wilcox.test(a,b, paired=FALSE, alternative="two.sided")   # W = 49.5, p-value = 1
             *   wilcox.test(a,b, paired=FALSE, alternative="less")        # W = 49.5, p-value = 0.5
             */

            var s1 = new double[] { 35, 15, 25, 10, 45, 20, 21, 22, 30, 17 };
            var s2 = new double[] { 20, 17, 23, 15, 49, 19, 24, 26, 33, 18 };

            var mannWhitneyWilcoxonTest = new MannWhitneyWilcoxonTest(s1, s2,
                                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: false);

            Assert.AreEqual(0.5302, mannWhitneyWilcoxonTest.PValue, 1e-4);
            // Assert.AreEqual(49.5, mannWhitneyWilcoxonTest.Statistic);
            Assert.AreEqual(49.5, mannWhitneyWilcoxonTest.Statistic1);
            Assert.AreEqual(50.5, mannWhitneyWilcoxonTest.Statistic2);
            Assert.AreEqual(false, mannWhitneyWilcoxonTest.Significant);
            Assert.AreEqual(DistributionTail.OneUpper, mannWhitneyWilcoxonTest.Tail);
            Assert.AreEqual(TwoSampleHypothesis.FirstValueIsGreaterThanSecond, mannWhitneyWilcoxonTest.Hypothesis);

            mannWhitneyWilcoxonTest = new MannWhitneyWilcoxonTest(s1, s2,
                                                                  TwoSampleHypothesis.ValuesAreDifferent, exact: false);
            Assert.AreEqual(1, mannWhitneyWilcoxonTest.PValue);
            // Assert.AreEqual(49.5, mannWhitneyWilcoxonTest.Statistic);
            Assert.AreEqual(49.5, mannWhitneyWilcoxonTest.Statistic1);
            Assert.AreEqual(50.5, mannWhitneyWilcoxonTest.Statistic2);
            Assert.AreEqual(false, mannWhitneyWilcoxonTest.Significant);
            Assert.AreEqual(TwoSampleHypothesis.ValuesAreDifferent, mannWhitneyWilcoxonTest.Hypothesis);

            mannWhitneyWilcoxonTest = new MannWhitneyWilcoxonTest(s1, s2,
                                                                  TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: false);
            Assert.AreEqual(0.5, mannWhitneyWilcoxonTest.PValue);
            //Assert.AreEqual(49.5, mannWhitneyWilcoxonTest.Statistic);
            Assert.AreEqual(49.5, mannWhitneyWilcoxonTest.Statistic1);
            Assert.AreEqual(50.5, mannWhitneyWilcoxonTest.Statistic2);
            Assert.AreEqual(false, mannWhitneyWilcoxonTest.Significant);
            Assert.AreEqual(TwoSampleHypothesis.FirstValueIsSmallerThanSecond, mannWhitneyWilcoxonTest.Hypothesis);
        }
        public void MannWhitneyWilcoxonTestConstructorTest1()
        {
            // Example from Conover, "Practical nonparametric statistics", 1999  (pg. 218)

            double[] sample1 = { 14.8, 7.3, 5.6, 6.3, 9.0, 4.2, 10.6, 12.5, 12.9, 16.1, 11.4, 2.7 };

            double[] sample2 =
            {
                12.7, 14.2, 12.6,  2.1, 17.7, 11.8, 16.9,  7.9, 16.0, 10.6, 5.6,
                5.6,   7.6, 11.3,  8.3,  6.7,  3.6,  1.0,  2.4,  6.4,  9.1, 6.7,18.6, 3.2,
                6.2,   6.1, 15.3, 10.6,  1.8,  5.9,  9.9, 10.6, 14.8,  5.0, 2.6, 4.0
            };

            var target = new MannWhitneyWilcoxonTest(sample1, sample2);

            Assert.AreEqual(0.529, target.PValue, 1e-3);
        }
Example #13
0
        public void non_exact_symmetry()
        {
            // DO NOT CHANGE
            double[] sample2 = { 4.6, 4.7, 4.9, 5.1, 5.2, 5.5, 5.8, 6.1, 6.5, 6.5, 7.2 };
            double[] sample1 = { 5.2, 5.3, 5.4, 5.6, 6.2, 6.3, 6.8, 7.7, 8.0, 8.1 };
            {
                // Those should be equal
                var e12 = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                      TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: true);
                Assert.AreEqual(e12.PValue, 0.959420610349403, 1e-5); // ok
                var a12 = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                      TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: false);
                Assert.AreEqual(a12.PValue, 0.96093080726732927, 1e-5); // ok
                var e21 = new MannWhitneyWilcoxonTest(sample2, sample1,
                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: true);
                Assert.AreEqual(e21.PValue, 0.959420610349403, 1e-5); // ok
                var a21 = new MannWhitneyWilcoxonTest(sample2, sample1,
                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: false);
                Assert.AreEqual(a21.PValue, 0.96093080726732927, 1e-5); // ok

                Assert.AreEqual(a12.PValue, e12.PValue, 1e-2);
                Assert.AreEqual(a21.PValue, e21.PValue, 1e-2);
                Assert.AreEqual(a12.PValue, e21.PValue, 1e-2);
            }

            {
                // Those should be equal
                var e12 = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: true);
                Assert.AreEqual(e12.PValue, 0.043834132843420769, 1e-5); // ok
                var a12 = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: false);
                Assert.AreEqual(a12.PValue, 0.0454062185864162, 1e-5); // ok
                var e21 = new MannWhitneyWilcoxonTest(sample2, sample1,
                                                      TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: true);
                Assert.AreEqual(e21.PValue, 0.043834132843420769, 1e-5); // ok
                var a21 = new MannWhitneyWilcoxonTest(sample2, sample1,
                                                      TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: false);
                Assert.AreEqual(a21.PValue, 0.0454062185864162, 1e-5); // ok

                Assert.AreEqual(a12.PValue, e12.PValue, 1e-2);
                Assert.AreEqual(a21.PValue, e21.PValue, 1e-2);
                Assert.AreEqual(a12.PValue, e21.PValue, 1e-2);
            }
        }
Example #14
0
        public void RCompatibilityTest2()
        {
            // Test case from https://github.com/accord-net/framework/issues/389

            /*
             *   // Test against R:
             *   c <- c(45,45,15,50,30,15,30,35,25)
             *   d <- c(45,55,20,55,20,25,35,45,20)
             *   wilcox.test(c,d, paired=FALSE, alternative="two.sided", conf.level=0.95, exact=TRUE) # W=49.5, p-value=0.6557
             *   wilcox.test(c,d, paired=FALSE, alternative="less", conf.level=0.95, exact=TRUE)      # W=49.5, p-value=0.3278
             *   wilcox.test(c,d, paired=FALSE, alternative="greater", conf.level=0.95, exact=TRUE)   # W=35, p-value=0.7037
             */

            var s1 = new double[] { 45, 45, 15, 50, 30, 15, 30, 35, 25 };
            var s2 = new double[] { 45, 55, 20, 55, 20, 25, 35, 45, 20 };

            var mannWhitneyWilcoxonTest = new MannWhitneyWilcoxonTest(s1, s2,
                                                                      TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: false);

            Assert.AreEqual(0.7037, mannWhitneyWilcoxonTest.PValue, 1e-4);
            // Assert.AreEqual(49.5, mannWhitneyWilcoxonTest.Statistic);
            Assert.AreEqual(35, mannWhitneyWilcoxonTest.Statistic1);
            Assert.AreEqual(46, mannWhitneyWilcoxonTest.Statistic2);
            Assert.AreEqual(false, mannWhitneyWilcoxonTest.Significant);
            Assert.AreEqual(DistributionTail.OneUpper, mannWhitneyWilcoxonTest.Tail);
            Assert.AreEqual(TwoSampleHypothesis.FirstValueIsGreaterThanSecond, mannWhitneyWilcoxonTest.Hypothesis);

            mannWhitneyWilcoxonTest = new MannWhitneyWilcoxonTest(s1, s2,
                                                                  TwoSampleHypothesis.ValuesAreDifferent, exact: false);
            Assert.AreEqual(0.6557, mannWhitneyWilcoxonTest.PValue, 1e-4);
            // Assert.AreEqual(49.5, mannWhitneyWilcoxonTest.Statistic);
            Assert.AreEqual(35, mannWhitneyWilcoxonTest.Statistic1);
            Assert.AreEqual(46, mannWhitneyWilcoxonTest.Statistic2);
            Assert.AreEqual(false, mannWhitneyWilcoxonTest.Significant);
            Assert.AreEqual(TwoSampleHypothesis.ValuesAreDifferent, mannWhitneyWilcoxonTest.Hypothesis);

            mannWhitneyWilcoxonTest = new MannWhitneyWilcoxonTest(s1, s2,
                                                                  TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: false);
            Assert.AreEqual(0.3278, mannWhitneyWilcoxonTest.PValue, 1e-4);
            //Assert.AreEqual(49.5, mannWhitneyWilcoxonTest.Statistic);
            Assert.AreEqual(35, mannWhitneyWilcoxonTest.Statistic1);
            Assert.AreEqual(46, mannWhitneyWilcoxonTest.Statistic2);
            Assert.AreEqual(false, mannWhitneyWilcoxonTest.Significant);
            Assert.AreEqual(TwoSampleHypothesis.FirstValueIsSmallerThanSecond, mannWhitneyWilcoxonTest.Hypothesis);
        }
        public static void FirstIsNotSlower(AggregateMetrics first, AggregateMetrics second)
        {
            double[] firstSamples  = first.Runs.Select(run => run.ElapsedNanos).ToArray();
            double[] secondSamples = second.Runs.Select(run => run.ElapsedNanos).ToArray();

            // Wilcoxon test to not assume normal distributions

            var mannWhitneyWilcoxonTest = new MannWhitneyWilcoxonTest(
                firstSamples,
                secondSamples,
                TwoSampleHypothesis.FirstValueIsGreaterThanSecond);

            Trace.WriteLine($"Sample 1 mean: {firstSamples.Average()} Sample 2 mean: {secondSamples.Average()}");
            Trace.WriteLine(
                "MannWWT s1 > s2:  " + mannWhitneyWilcoxonTest.PValue +
                " Stat1: " + mannWhitneyWilcoxonTest.Statistic1 + "; Stat2: " + mannWhitneyWilcoxonTest.Statistic2 +
                " - Significant: " + mannWhitneyWilcoxonTest.Significant + " - Hyp: " + mannWhitneyWilcoxonTest.Hypothesis);

            // We want to assert that we CANNOT statistically say that first > second (it can be less than, equal, or it might be greater than but not
            // with statistical significance -- the only thing it CAN'T be, is KNOWN to be slower [>])
            PerfAssertContext.AssertIsFalse(mannWhitneyWilcoxonTest.Significant);
        }
        public void MannWhitneyWilcoxonTestConstructorTest1()
        {
            // Example from Conover, "Practical nonparametric statistics", 1999  (pg. 218)

            double[] sample1 = { 14.8, 7.3, 5.6, 6.3, 9.0, 4.2, 10.6, 12.5, 12.9, 16.1, 11.4, 2.7 };

            double[] sample2 = 
            {
                12.7, 14.2, 12.6, 2.1, 17.7, 11.8, 16.9, 7.9, 16.0, 10.6,      5.6,
                5.6, 7.6, 11.3, 8.3,6.7, 3.6, 1.0, 2.4, 6.4, 9.1, 6.7, 18.6, 3.2, 
                6.2, 6.1, 15.3, 10.6, 1.8, 5.9, 9.9, 10.6, 14.8, 5.0, 2.6, 4.0
            };

            var target = new MannWhitneyWilcoxonTest(sample1, sample2);

            Assert.AreEqual(0.529, target.PValue, 1e-3);
        }
Example #17
0
        static void Main(String[] args)
        {
            double[] all_electrodes = new double[] { 0.85334198572355613, 0.85918234912394553, 0.84620376378974693, 0.835820895522388,
                                                     0.84815055158987673, 0.82543802725502924, 0.83517196625567813, 0.85074626865671643,
                                                     0.85269305645684623, 0.83776768332251783, 0.84445165476963013 };

            double[][] electrodes = new double[][]
            {
                //2
                new double[] { 0.88384166125892283, 0.84944841012329653, 0.84750162232316673, 0.84944841012329653, 0.84295911745619723, 0.84685269305645683, 0.86242699545749513, 0.84685269305645683, 0.85204412719013622, 0.84815055158987673, 0.85295262816353024 },
                //3
                new double[] { 0.85918234912394553, 0.86242699545749513, 0.86437378325762493, 0.82933160285528873, 0.85334198572355613, 0.84425697598961713, 0.85139519792342633, 0.84879948085658663, 0.87865022712524332, 0.84815055158987673, 0.853990914990266 },
                //4
                new double[] { 0.86502271252433482, 0.86956521739130432, 0.87410772225827382, 0.84944841012329653, 0.86956521739130432, 0.853990914990266, 0.835820895522388, 0.85788449059052563, 0.82219338092147953, 0.85593770279039583, 0.85535366645035693 },
                //5
                new double[] { 0.85139519792342633, 0.84620376378974693, 0.872809863724854, 0.853990914990266, 0.83517196625567813, 0.83906554185593774, 0.86826735885788453, 0.87929915639195333, 0.85139519792342633, 0.85723556132381573, 0.85548345230369871 },
                //6
                new double[] { 0.85074626865671643, 0.87345879299156393, 0.863075924724205, 0.83062946138870863, 0.85139519792342633, 0.85334198572355613, 0.84944841012329653, 0.86567164179104472, 0.85723556132381573, 0.85334198572355613, 0.85483452303698915 },
                //7
                new double[] { 0.85204412719013622, 0.85269305645684623, 0.845554834523037, 0.863075924724205, 0.84295911745619723, 0.854639844256976, 0.85723556132381573, 0.86632057105775473, 0.85269305645684623, 0.85074626865671643, 0.85379623621025336 },
                //8
                new double[] { 0.81116158338741073, 0.84231018818948733, 0.84620376378974693, 0.86891628812459443, 0.845554834523037, 0.86761842959117452, 0.85528877352368593, 0.88384166125892283, 0.84944841012329653, 0.86826735885788453, 0.85386112913692414 },
                //9
                new double[] { 0.84815055158987673, 0.85983127839065543, 0.863075924724205, 0.845554834523037, 0.86177806619078523, 0.86502271252433482, 0.85204412719013622, 0.82608695652173914, 0.853990914990266, 0.85334198572355613, 0.85288773523685923 },
                //10
                new double[] { 0.85074626865671643, 0.84685269305645683, 0.84036340038935753, 0.85334198572355613, 0.87151200519143412, 0.85853341985723552, 0.854639844256976, 0.85788449059052563, 0.854639844256976, 0.853990914990266, 0.85425048669695 },
                //11
                new double[] { 0.85983127839065543, 0.85918234912394553, 0.84295911745619723, 0.845554834523037, 0.86048020765736533, 0.84879948085658663, 0.86242699545749513, 0.86826735885788453, 0.881245944192083, 0.82478909798831923, 0.85535366645035682 },
                //12
                new double[] { 0.86956521739130432, 0.863075924724205, 0.853990914990266, 0.83127839065541853, 0.83776768332251783, 0.85983127839065543, 0.85593770279039583, 0.87021414665801433, 0.85334198572355613, 0.82998053212199874, 0.85249837767683323 },
                //13
                new double[] { 0.845554834523037, 0.87605451005840362, 0.84815055158987673, 0.84101232965606754, 0.85788449059052563, 0.84295911745619723, 0.85983127839065543, 0.85139519792342633, 0.87021414665801433, 0.85983127839065543, 0.855288773523686 },
                //14
                new double[] { 0.85204412719013622, 0.85723556132381573, 0.86956521739130432, 0.84750162232316673, 0.854639844256976, 0.84231018818948733, 0.84360804672290723, 0.863724853990915, 0.85204412719013622, 0.84620376378974693, 0.85288773523685912 },
                //15
                new double[] { 0.84620376378974693, 0.863075924724205, 0.83906554185593774, 0.85658663205710572, 0.872809863724854, 0.84750162232316673, 0.863075924724205, 0.844905905256327, 0.84620376378974693, 0.85853341985723552, 0.85379623621025291 },
                //16
                new double[] { 0.85788449059052563, 0.85658663205710572, 0.83257624918883844, 0.85204412719013622, 0.85139519792342633, 0.84815055158987673, 0.872809863724854, 0.84944841012329653, 0.86112913692407522, 0.85723556132381573, 0.85392602206359491 },
                //17
                new double[] { 0.84750162232316673, 0.85204412719013622, 0.85139519792342633, 0.85334198572355613, 0.84036340038935753, 0.85139519792342633, 0.86761842959117452, 0.853990914990266, 0.85334198572355613, 0.863075924724205, 0.85340687865022713 },
                //18
                new double[] { 0.85269305645684623, 0.872160934458144, 0.85788449059052563, 0.85593770279039583, 0.853990914990266, 0.85334198572355613, 0.826735885788449, 0.86242699545749513, 0.85528877352368593, 0.85139519792342633, 0.85418559377027914 }
            };

            Console.WriteLine("Evolving electrodes only:");
            Console.WriteLine("");
            Console.WriteLine("");

            for (var i = 0; i < electrodes.Length; i++)
            {
                MannWhitneyWilcoxonTest mwTest = new MannWhitneyWilcoxonTest(all_electrodes, electrodes[i], TwoSampleHypothesis.FirstValueIsSmallerThanSecond);
                Console.WriteLine((i + 2) + " electrodes:");
                Console.WriteLine("MWW Test: Statistic - " + mwTest.Statistic + " , PValue - " + mwTest.PValue + " , Significant - " + mwTest.Significant);
                Console.WriteLine("");
            }

            double[][] powerbands = new double[][]
            {
                //2
                new double[] { 0.83971447112264763, 0.85788449059052563, 0.85269305645684623, 0.86437378325762493, 0.845554834523037, 0.84231018818948733, 0.87345879299156393, 0.85528877352368593, 0.85009733939000653, 0.854639844256976, 0.85360155743024024 },
                //3
                new double[] { 0.853990914990266, 0.85983127839065543, 0.84879948085658663, 0.84750162232316673, 0.85334198572355613, 0.854639844256976, 0.85918234912394553, 0.84879948085658663, 0.85204412719013622, 0.86177806619078523, 0.85399091499026591 },
                //4
                new double[] { 0.863724853990915, 0.85658663205710572, 0.83711875405580793, 0.86567164179104472, 0.85139519792342633, 0.83257624918883844, 0.85918234912394553, 0.83906554185593774, 0.83776768332251783, 0.88578844905905252, 0.85288773523685912 },
                //5
                new double[] { 0.86567164179104472, 0.86826735885788453, 0.845554834523037, 0.84101232965606754, 0.86112913692407522, 0.85593770279039583, 0.85009733939000653, 0.86048020765736533, 0.83776768332251783, 0.85918234912394553, 0.854510058403634 },
                //6
                new double[] { 0.844905905256327, 0.85204412719013622, 0.85723556132381573, 0.86048020765736533, 0.84815055158987673, 0.84360804672290723, 0.85788449059052563, 0.86632057105775473, 0.86891628812459443, 0.85788449059052563, 0.85574302401038282 },
                //7
                new double[] { 0.863724853990915, 0.854639844256976, 0.854639844256976, 0.85918234912394553, 0.85983127839065543, 0.85658663205710572, 0.84166125892277743, 0.84879948085658663, 0.85009733939000653, 0.84815055158987673, 0.85373134328358213 },
                //8
                new double[] { 0.84879948085658663, 0.86112913692407522, 0.86502271252433482, 0.84231018818948733, 0.84815055158987673, 0.88319273199221282, 0.85204412719013622, 0.85074626865671643, 0.835820895522388, 0.85204412719013622, 0.85392602206359514 },
                //9
                new double[] { 0.854639844256976, 0.85139519792342633, 0.872809863724854, 0.82868267358857883, 0.87475665152498383, 0.83776768332251783, 0.854639844256976, 0.854639844256976, 0.84620376378974693, 0.86502271252433482, 0.854055807916937 }
            };

            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine("Evolving electrodes AND powerband");
            Console.WriteLine("");

            for (var i = 0; i < powerbands.Length; i++)
            {
                MannWhitneyWilcoxonTest mwTest = new MannWhitneyWilcoxonTest(all_electrodes, powerbands[i], TwoSampleHypothesis.FirstValueIsSmallerThanSecond);
                Console.WriteLine((i + 2) + " electrodes:");
                Console.WriteLine("MWW Test: Statistic - " + mwTest.Statistic + " , PValue - " + mwTest.PValue + " , Significant - " + mwTest.Significant);
                Console.WriteLine("");
            }

            Console.ReadKey();
        }
Example #18
0
        public void same_as_above_non_exact()
        {
            double[] sample2 = { 4.6, 4.7, 4.9, 5.1, 5.2, 5.5, 5.8, 6.1, 6.5, 6.5, 7.2 };
            double[] sample1 = { 5.2, 5.3, 5.4, 5.6, 6.2, 6.3, 6.8, 7.7, 8.0, 8.1 };

            // Create a new Mann-Whitney-Wilcoxon's test to compare the two samples
            var test = new MannWhitneyWilcoxonTest(sample1, sample2,
                                                   TwoSampleHypothesis.FirstValueIsGreaterThanSecond, exact: false);

            Assert.AreEqual(096.5, test.RankSum2);
            Assert.AreEqual(134.5, test.RankSum1);

            Assert.AreEqual(79.5, test.Statistic1);
            Assert.AreEqual(30.5, test.Statistic2);
            //Assert.AreEqual(30.5, test.Statistic);

            Assert.AreEqual(DistributionTail.OneUpper, test.Tail);
            Assert.AreEqual(TwoSampleHypothesis.FirstValueIsGreaterThanSecond, test.Hypothesis);

            Assert.IsTrue(test.Significant);
            Assert.AreEqual(0.0454062185864162, test.PValue, 1e-10);



            // Create a new Mann-Whitney-Wilcoxon's test to compare the two samples
            test = new MannWhitneyWilcoxonTest(sample1, sample2, exact: false);

            Assert.AreEqual(TwoSampleHypothesis.ValuesAreDifferent, test.Hypothesis);

            double[] expectedRank2 = { 1, 2, 3, 4, 5.5, 9, 11, 12, 15.5, 15.5, 18 };
            double[] expectedRank1 = { 5.5, 7, 8, 10, 13, 14, 17, 19, 20, 21 };

            Assert.IsTrue(test.Rank1.IsEqual(expectedRank1));
            Assert.IsTrue(test.Rank2.IsEqual(expectedRank2));

            Assert.AreEqual(096.5, test.RankSum2);
            Assert.AreEqual(134.5, test.RankSum1);

            Assert.AreEqual(79.5, test.Statistic1);
            Assert.AreEqual(30.5, test.Statistic2);

            // Non-directional is non-significant
            Assert.IsFalse(test.Significant);
            Assert.AreEqual(0.0908124371728325, test.PValue, 1e-10);



            // Create a new Mann-Whitney-Wilcoxon's test to compare the two samples
            test = new MannWhitneyWilcoxonTest(sample1, sample2,
                                               TwoSampleHypothesis.FirstValueIsSmallerThanSecond, exact: false);

            Assert.AreEqual(096.5, test.RankSum2);
            Assert.AreEqual(134.5, test.RankSum1);

            Assert.AreEqual(79.5, test.Statistic1);
            Assert.AreEqual(30.5, test.Statistic2);

            Assert.AreEqual(DistributionTail.OneLower, test.Tail);
            Assert.AreEqual(TwoSampleHypothesis.FirstValueIsSmallerThanSecond, test.Hypothesis);

            // Directional should be significant
            Assert.IsFalse(test.Significant);
            Assert.AreEqual(0.96093080726732927, test.PValue, 1e-10);
        }
Example #19
0
 public RankSumResult(MannWhitneyWilcoxonTest result, int n1, int n2)
 {
     this.result = result;
     N1          = n1;
     N2          = n2;
 }