Accord.Tests.Statistics.MixtureDistributionTest.ConstructorTest C# (CSharp) Method

ConstructorTest() private method

private ConstructorTest ( ) : void
return void
        public void ConstructorTest()
        {
            // Create a new mixture containing two Normal distributions
            Mixture<NormalDistribution> mix = new Mixture<NormalDistribution>(
                new NormalDistribution(2, 1), new NormalDistribution(5, 1));

            // Common measures
            double mean = mix.Mean;     // 3.5
            double median = mix.Median;   // 3.4999998506015895
            double var = mix.Variance; // 3.25

            // Cumulative distribution functions
            double cdf = mix.DistributionFunction(x: 4.2);              // 0.59897597553494908
            double ccdf = mix.ComplementaryDistributionFunction(x: 4.2); // 0.40102402446505092

            // Probability mass functions
            double pmf1 = mix.ProbabilityDensityFunction(x: 1.2); // 0.14499174984363708
            double pmf2 = mix.ProbabilityDensityFunction(x: 2.3); // 0.19590437513747333
            double pmf3 = mix.ProbabilityDensityFunction(x: 3.7); // 0.13270883471234715
            double lpmf = mix.LogProbabilityDensityFunction(x: 4.2); // -1.8165661905848629

            // Quantile function
            double icdf1 = mix.InverseDistributionFunction(p: 0.17); // 1.5866611690305095
            double icdf2 = mix.InverseDistributionFunction(p: 0.46); // 3.1968506765456883
            double icdf3 = mix.InverseDistributionFunction(p: 0.87); // 5.6437596300843076

            // Hazard (failure rate) functions
            double hf = mix.HazardFunction(x: 4.2); // 0.40541978256972522
            double chf = mix.CumulativeHazardFunction(x: 4.2); // 0.91373394208601633

            // String representation:

            // Mixture(x; 0.5 * N(x; μ = 5, σ² = 1) + 0.5 * N(x; μ = 5, σ² = 1))
            string str = mix.ToString(CultureInfo.InvariantCulture);



            Assert.AreEqual(3.5, mean);
            Assert.AreEqual(3.4999998506015895, median, 1e-10);
            Assert.AreEqual(3.25, var, 1e-10);
            Assert.AreEqual(0.91373394208601633, chf, 1e-10);
            Assert.AreEqual(0.59897597553494908, cdf, 1e-10);
            Assert.AreEqual(0.14499174984363708, pmf1, 1e-10);
            Assert.AreEqual(0.19590437513747333, pmf2, 1e-10);
            Assert.AreEqual(0.13270883471234715, pmf3, 1e-10);
            Assert.AreEqual(-1.8165661905848629, lpmf, 1e-10);
            Assert.AreEqual(0.40541978256972522, hf, 1e-10);
            Assert.AreEqual(0.40102402446505092, ccdf, 1e-10);
            Assert.AreEqual(1.5866611690305092, icdf1, 1e-10);
            Assert.AreEqual(3.1968506765456883, icdf2, 1e-10);
            Assert.AreEqual(5.6437596300843076, icdf3, 1e-10);
            Assert.AreEqual("Mixture(x; 0.5*N(x; μ = 2, σ² = 1) + 0.5*N(x; μ = 5, σ² = 1))", str);

            Assert.IsFalse(double.IsNaN(icdf1));

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

            Assert.AreEqual(0.71839556342582434, range1.Min, 1e-10);
            Assert.AreEqual(6.2816044312576365, range1.Max, 1e-10);
            Assert.AreEqual(-0.053753308211290443, range2.Min, 1e-10);
            Assert.AreEqual(7.0537533150666105, range2.Max, 1e-10);
            Assert.AreEqual(-0.053753308211289402, range3.Min, 1e-10);
            Assert.AreEqual(7.0537533150666105, range3.Max, 1e-10);
        }