Esempio n. 1
0
        public void TwoWayAnovaConstructorTest2()
        {
            // Example by Aalborg Universitet
            // http://www.smi.hst.aau.dk/~cdahl/BiostatPhD/ANOVA.pdf

            double[] samples =
            {
                16.3, 20.4, 12.4, 15.8, 9.5,  // female, no hormone
                15.3, 17.4, 10.9, 10.3, 6.7,  // male, no hormone
                38.1, 26.2, 32.3, 35.8, 30.2, // female, hormone
                34.0, 22.8, 27.8, 25.0, 29.3, // male, hormone
            };

            int[] hormone =
            {
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                1, 1, 1, 1, 1, 1, 1, 1, 1, 1
            };

            int[] sex =
            {
                0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
                0, 0, 0, 0, 0, 1, 1, 1, 1, 1
            };

            TwoWayAnova target = new TwoWayAnova(samples, hormone, sex, TwoWayAnovaModel.Mixed);

            testSources(target);
        }
Esempio n. 2
0
        public void TwoWayAnovaConstructorTest()
        {
            // Example by Aalborg Universitet
            // http://www.smi.hst.aau.dk/~cdahl/BiostatPhD/ANOVA.pdf

            double[][][] samples =
            {
                new double[][] // No hormone treatment
                {
                    // Female
                    new double[] { 16.3, 20.4, 12.4, 15.8,  9.5 },

                    // Male
                    new double[] { 15.3, 17.4, 10.9, 10.3,  6.7 }
                },

                new double[][] // Hormone treatment
                {
                    // Female
                    new double[] { 38.1, 26.2, 32.3, 35.8, 30.2 },

                    // Male
                    new double[] { 34.0, 22.8, 27.8, 25.0, 29.3 }
                }
            };

            TwoWayAnova target = new TwoWayAnova(samples, TwoWayAnovaModel.Mixed);

            testSources(target);
        }
Esempio n. 3
0
        private static void testSources(TwoWayAnova target)
        {
            AnovaVariationSource cells = target.Sources.Cells;

            Assert.AreEqual("Cells", cells.Source);
            Assert.AreEqual(1461.3254999999995, cells.SumOfSquares);
            Assert.AreEqual(3, cells.DegreesOfFreedom);
            Assert.IsTrue(target.Table.Contains(cells));

            AnovaVariationSource error = target.Sources.Error;

            Assert.AreEqual("Within-cells (error)", error.Source);
            Assert.AreEqual(301.39200000000005, error.SumOfSquares);
            Assert.AreEqual(16, error.DegreesOfFreedom);
            Assert.IsTrue(target.Table.Contains(error));

            AnovaVariationSource factorA = target.Sources.FactorA;

            Assert.AreEqual("Factor A", factorA.Source);
            Assert.AreEqual(1386.1125, factorA.SumOfSquares, 1e-4);
            Assert.AreEqual(1, factorA.DegreesOfFreedom);
            Assert.AreEqual(1386.1125, factorA.MeanSquares, 1e-4);
            Assert.AreEqual(73.58, factorA.Significance.Statistic, 1e-2);
            Assert.AreEqual(1, factorA.Significance.DegreesOfFreedom1);
            Assert.AreEqual(16, factorA.Significance.DegreesOfFreedom2);
            Assert.IsTrue(factorA.Significance.Significant);

            AnovaVariationSource factorB = target.Sources.FactorB;

            Assert.AreEqual("Factor B", factorB.Source);
            Assert.AreEqual(70.3125, factorB.SumOfSquares, 1e-4);
            Assert.AreEqual(1, factorB.DegreesOfFreedom);
            Assert.AreEqual(70.3125, factorB.MeanSquares, 1e-4);
            Assert.AreEqual(3.73, factorB.Significance.Statistic, 1e-2);
            Assert.AreEqual(1, factorB.Significance.DegreesOfFreedom1);
            Assert.AreEqual(16, factorB.Significance.DegreesOfFreedom2);
            Assert.IsFalse(factorB.Significance.Significant);

            AnovaVariationSource interaction = target.Sources.Interaction;

            Assert.AreEqual("Interaction AxB", interaction.Source);
            Assert.AreEqual(4.9005, interaction.SumOfSquares, 1e-4);
            Assert.AreEqual(1, interaction.DegreesOfFreedom);
            Assert.AreEqual(4.9005, interaction.MeanSquares, 1e-4);
            Assert.AreEqual(0.260, interaction.Significance.Statistic, 1e-3);
            Assert.AreEqual(1, interaction.Significance.DegreesOfFreedom1);
            Assert.AreEqual(16, interaction.Significance.DegreesOfFreedom2);
            Assert.IsFalse(interaction.Significance.Significant);
        }
        public void TwoWayAnovaConstructorTest()
        {
            // Example by Aalborg Universitet, slide 22:
            // http://www.smi.hst.aau.dk/~cdahl/BiostatPhD/ANOVA.pdf

            // There are three set of hypothesis in atwo-way ANOVA. In the example above, they are:
            //  - H0: There is no effect of hormone treatment on the mean plasma concentration
            //  - H0: There is no difference in mean plasma concentration between sexes
            //  - H0: There is no interaction of sex and hormone treatment on the mean plasma concentration

            double[][][] samples =
            {
                new double[][] // No hormone treatment
                {
                    // Female
                    new double[] { 16.3, 20.4, 12.4, 15.8,  9.5 },

                    // Male
                    new double[] { 15.3, 17.4, 10.9, 10.3,  6.7 }
                },

                new double[][] // Hormone treatment
                {
                    // Female
                    new double[] { 38.1, 26.2, 32.3, 35.8, 30.2 },

                    // Male
                    new double[] { 34.0, 22.8, 27.8, 25.0, 29.3 }
                }
            };

            // Let's create a mixed-effect effects ANOVA model (ANOVA model 3)
            var twoWayAnova = new TwoWayAnova(samples, TwoWayAnovaModel.Mixed);

            testSources(twoWayAnova);
        }
        public void doc_test()
        {
            #region doc_test
            // Example by J. Jones, Professor of Mathematics in Richland Community
            // College: https://people.richland.edu/james/lecture/m170/ch13-2wy.html

            // In this example, we collected the number of successfully grown corn plants
            // given the use of 4 types of fertilizer, and 3 different types of seed.

            double[,,] samples =
            {
                //                    Fert I        Fert II       Fert III        Fert IV        Fert V
                /* Seed A-402 */ { { 106, 110 }, { 95, 100 }, {  94, 107 }, { 103, 104 }, { 100, 102 } },
                /* Seed B-894 */ { { 110, 112 }, { 98,  99 }, { 100, 101 }, { 108, 112 }, { 105, 107 } },
                /* Seed C-952 */ { {  94,  97 }, { 86,  87 }, {  98,  99 }, {  99, 101 }, {  94,  98 } },
            };

            // There are always three hypothesis in a 2-way ANOVA:
            // - There is no difference between population means for the first factor;
            // - There is no difference between population means for the second factor;
            // - There is no interaction between the two different factors

            // Let's create a mixed-effect effects ANOVA model (ANOVA model 3)
            var twoWayAnova = new TwoWayAnova(samples, TwoWayAnovaModel.Mixed);

            // Now, we can obtain the test summary table by using:
            TwoWayAnovaVariationSources sources = twoWayAnova.Sources;

            // Seed source of variation
            double seedSS          = sources.FactorA.SumOfSquares;                      // 512.86666666666713
            double seedDF          = sources.FactorA.DegreesOfFreedom;                  // 2
            double seedMS          = sources.FactorA.MeanSquares;                       // 256.43333333333356
            double seedF           = sources.FactorA.Statistic.Value;                   // 28.283088235294144
            double seedPValue      = sources.FactorA.Significance.PValue;               // 8.1353422904297046E-06
            double seedCrit        = sources.FactorA.Significance.CriticalValue;        // 3.6823203436732341
            bool   seedSignificant = sources.FactorA.Significance.Significant;          // true

            // Fertilizer source of variation
            double fertilizerSS          = sources.FactorB.SumOfSquares;                // 449.46666666666607
            double fertilizerDF          = sources.FactorB.DegreesOfFreedom;            // 4
            double fertilizerMS          = sources.FactorB.MeanSquares;                 // 112.36666666666652
            double fertilizerF           = sources.FactorB.Statistic.Value;             // 12.39338235294116
            double fertilizerPValue      = sources.FactorB.Significance.PValue;         // 0.00011887234971294213
            double fertilizerCrit        = sources.FactorB.Significance.CriticalValue;  // 3.0555682759065936
            bool   fertilizerSignificant = sources.FactorB.Significance.Significant;    // true

            // Interaction source of variation
            double interactionSS          = sources.Interaction.SumOfSquares;               // 143.1333333333335
            double interactionDF          = sources.Interaction.DegreesOfFreedom;           // 8
            double interactionMS          = sources.Interaction.MeanSquares;                // 17.891666666666687
            double interactionF           = sources.Interaction.Statistic.Value;            // 1.9733455882352964
            double interactionPValue      = sources.Interaction.Significance.PValue;        // 0.12208995001760085
            double interactionCrit        = sources.Interaction.Significance.CriticalValue; // 2.6407968829069017
            bool   interactionSignificant = sources.Interaction.Significance.Significant;   // false

            // Within-variance source of variation
            double withinSS = sources.Error.SumOfSquares;                               // 136
            double withinDF = sources.Error.DegreesOfFreedom;                           // 15
            double withinMS = sources.Error.MeanSquares;                                // 9.0666666666666664
            #endregion

            Assert.AreEqual(512.86666666666713, seedSS, 1e-8);
            Assert.AreEqual(2, seedDF, 1e-8);
            Assert.AreEqual(256.43333333333356, seedMS, 1e-8);
            Assert.AreEqual(28.283088235294144, seedF, 1e-8);
            Assert.AreEqual(8.1353422904297046E-06, seedPValue, 1e-8);
            Assert.AreEqual(3.6823203436732341, seedCrit, 1e-8);
            Assert.AreEqual(true, seedSignificant);

            Assert.AreEqual(449.46666666666607, fertilizerSS, 1e-8);
            Assert.AreEqual(4, fertilizerDF, 1e-8);
            Assert.AreEqual(112.36666666666652, fertilizerMS, 1e-8);
            Assert.AreEqual(12.39338235294116, fertilizerF, 1e-8);
            Assert.AreEqual(0.00011887234971294213, fertilizerPValue, 1e-8);
            Assert.AreEqual(3.0555682759065936, fertilizerCrit, 1e-8);
            Assert.AreEqual(true, fertilizerSignificant);

            Assert.AreEqual(143.1333333333335, interactionSS, 1e-8);
            Assert.AreEqual(8, interactionDF, 1e-8);
            Assert.AreEqual(17.891666666666687, interactionMS, 1e-8);
            Assert.AreEqual(1.9733455882352964, interactionF, 1e-8);
            Assert.AreEqual(0.12208995001760085, interactionPValue, 1e-8);
            Assert.AreEqual(2.6407968829069017, interactionCrit, 1e-8);
            Assert.AreEqual(false, interactionSignificant);

            Assert.AreEqual(136, withinSS, 1e-8);
            Assert.AreEqual(15, withinDF, 1e-8);
            Assert.AreEqual(9.0666666666666664, withinMS, 1e-8);
        }