Esempio n. 1
0
        public void FitTest2()
        {
            int[]             symbols = { 3, 5 };
            JointDistribution target  = new JointDistribution(symbols);

            double[][] observations =
            {
                new double[] { 0, 0 },
                new double[] { 1, 1 },
                new double[] { 2, 1 },
            };

            double[] weights = { 2, 1, 1 };

            target.Fit(observations, weights);

            double[] p = target.Frequencies;

            double actual;

            actual = target.ProbabilityMassFunction(new[] { 0, 0 });
            Assert.AreEqual(0.5, actual);

            actual = target.ProbabilityMassFunction(new[] { 1, 1 });
            Assert.AreEqual(0.25, actual);

            actual = target.ProbabilityMassFunction(new[] { 2, 1 });
            Assert.AreEqual(0.25, actual);
        }
Esempio n. 2
0
        public void JointDistributionConstructorTest()
        {
            int[]             symbols = { 3, 5 };
            JointDistribution target  = new JointDistribution(symbols);

            double[] p = target.Frequencies;

            Assert.AreEqual(3 * 5, p.Length);

            for (int i = 0; i < p.Length; i++)
            {
                p[i] = i;
            }

            double actual;

            actual = target.ProbabilityMassFunction(new int[] { 0, 0 });
            Assert.AreEqual(0, actual);

            actual = target.ProbabilityMassFunction(new int[] { 0, 1 });
            Assert.AreEqual(1, actual);

            actual = target.ProbabilityMassFunction(new int[] { 1, 0 });
            Assert.AreEqual(5, actual);

            actual = target.ProbabilityMassFunction(new int[] { 2, 4 });
            Assert.AreEqual(14, actual);
        }
        public void UniformTest()
        {
            int a = 2;
            int b = 5;
            int n = b - a + 1;

            // Wikipedia definitions
            double expectedMean = (a + b) / 2.0;
            double expectedVar  = (System.Math.Pow(b - a + 1, 2) - 1) / 12.0;
            double p            = 1.0 / n;


            JointDistribution dist = JointDistribution.Uniform(1, a, b);

            Assert.AreEqual(expectedMean, dist.Mean[0]);
            // Assert.AreEqual(expectedVar, dist.Variance);
            Assert.AreEqual(n, dist.Frequencies.Length);


            Assert.AreEqual(0, dist.ProbabilityMassFunction(new[] { 0 }));
            Assert.AreEqual(0, dist.ProbabilityMassFunction(new[] { 1 }));
            Assert.AreEqual(p, dist.ProbabilityMassFunction(new[] { 2 }));
            Assert.AreEqual(p, dist.ProbabilityMassFunction(new[] { 3 }));
            Assert.AreEqual(p, dist.ProbabilityMassFunction(new[] { 4 }));
            Assert.AreEqual(p, dist.ProbabilityMassFunction(new[] { 5 }));
            Assert.AreEqual(0, dist.ProbabilityMassFunction(new[] { 6 }));
            Assert.AreEqual(0, dist.ProbabilityMassFunction(new[] { 7 }));
        }
        public void MeanTest3()
        {
            var    target   = new JointDistribution(new[] { 2 }, new [] { 0.5, 0.5 });
            double expected = (2.0 + 3.0) / 2.0;
            double actual   = target.Mean[0];

            Assert.AreEqual(expected, actual);
        }
        public void MeanTest2()
        {
            var    target   = new JointDistribution(new [] { 42 }, new[] { 0.1, 0.4, 0.5 });
            double expected = 42 * 0.1 + 43 * 0.4 + 44 * 0.5;
            double actual   = target.Mean[0];

            Assert.AreEqual(expected, actual);
        }
        public void ProbabilityMassFunctionTest()
        {
            JointDistribution dist = JointDistribution.Uniform(1, 2, 5);
            double            p    = 0.25;

            Assert.AreEqual(0, dist.ProbabilityMassFunction(new[] { 0 }));
            Assert.AreEqual(0, dist.ProbabilityMassFunction(new[] { 1 }));
            Assert.AreEqual(p, dist.ProbabilityMassFunction(new[] { 2 }));
            Assert.AreEqual(p, dist.ProbabilityMassFunction(new[] { 3 }));
            Assert.AreEqual(p, dist.ProbabilityMassFunction(new[] { 4 }));
            Assert.AreEqual(p, dist.ProbabilityMassFunction(new[] { 5 }));
            Assert.AreEqual(0, dist.ProbabilityMassFunction(new[] { 6 }));
            Assert.AreEqual(0, dist.ProbabilityMassFunction(new[] { 7 }));
        }
        public void FitTest_vector_inputs()
        {
            double[] expected = { 0.50, 0.00, 0.25, 0.25 };

            JointDistribution target;

            double[] values  = { 0.00, 2.00, 3.00 };
            double[] weights = { 0.50, 0.25, 0.25 };
            target = new JointDistribution(new[] { 4 });
            target.Fit(Jagged.ColumnVector(values), weights);
            double[] actual = target.Frequencies;

            Assert.IsTrue(Matrix.IsEqual(expected, actual));
        }
        public void FitTest3()
        {
            JointDistribution target = new JointDistribution(new[] { -1 }, new[] { 4 });

            double[] values  = { 0.00, 1.00, 2.00, 3.00 };
            double[] weights = { 0.25, 0.25, 0.25, 0.25 };

            target.Fit(Jagged.ColumnVector(values).Subtract(1), weights);

            double[] expected = { 0.25, 0.25, 0.25, 0.25 };
            double[] actual   = target.Frequencies;

            Assert.IsTrue(Matrix.IsEqual(expected, actual));
        }
        public void LogProbabilityMassFunctionTest()
        {
            JointDistribution dist = JointDistribution.Uniform(1, 2, 5);

            double p = System.Math.Log(0.25);
            double l = System.Math.Log(0);

            Assert.AreEqual(l, dist.LogProbabilityMassFunction(new[] { 0 }));
            Assert.AreEqual(l, dist.LogProbabilityMassFunction(new[] { 1 }));
            Assert.AreEqual(p, dist.LogProbabilityMassFunction(new[] { 2 }));
            Assert.AreEqual(p, dist.LogProbabilityMassFunction(new[] { 3 }));
            Assert.AreEqual(p, dist.LogProbabilityMassFunction(new[] { 4 }));
            Assert.AreEqual(p, dist.LogProbabilityMassFunction(new[] { 5 }));
            Assert.AreEqual(l, dist.LogProbabilityMassFunction(new[] { 6 }));
            Assert.AreEqual(l, dist.LogProbabilityMassFunction(new[] { 7 }));
        }
Esempio n. 10
0
        public void DistributionFunctionTest()
        {
            var target = new JointDistribution(new[] { 0.1, 0.4, 0.5 });

            double actual;

            actual = target.DistributionFunction(new[] { 0 });
            Assert.AreEqual(0.1, actual, 1e-6);

            actual = target.DistributionFunction(new[] { 1 });
            Assert.AreEqual(0.5, actual, 1e-6);

            actual = target.DistributionFunction(new[] { 2 });
            Assert.AreEqual(1.0, actual, 1e-6);

            actual = target.DistributionFunction(new[] { 3 });
            Assert.AreEqual(1.0, actual, 1e-6);
        }
        public void MarginalTest()
        {
            // Example from https://en.wikipedia.org/wiki/Marginal_distribution

            int[][] data =
            {
                new[] { 4, 2, 1, 1 },
                new[] { 2, 4, 1, 1 },
                new[] { 2, 2, 2, 2 },
                new[] { 8, 0, 0, 0 },
            };

            double[][] frequencies = data.Divide(32);

            var joint = new JointDistribution(frequencies.ToMatrix());

            double[] x = joint.MarginalDistributionFunction(0);
            double[] y = joint.MarginalDistributionFunction(1);

            double[][] expected =
            {
                new[] { 16 / 32.0, 8 / 32.0, 4 / 32.0, 4 / 32.0 },
                new[] {  8 / 32.0, 8 / 32.0, 8 / 32.0, 8 / 32.0 }
            };

            Assert.IsTrue(x.IsEqual(expected[0]));
            Assert.IsTrue(y.IsEqual(expected[1]));

            for (int i = 0; i < 4; i++)
            {
                double a = joint.MarginalDistributionFunction(0, i);
                Assert.AreEqual(a, expected[0][i]);
            }

            for (int i = 0; i < 4; i++)
            {
                double a = joint.MarginalDistributionFunction(1, i);
                Assert.AreEqual(a, expected[1][i]);
            }
        }