Example #1
0
        public void options_test()
        {
            // Gamma Distribution Fit stalls for some arrays #301
            // https://github.com/accord-net/framework/issues/301

            double[] x = { 1.003, 1.012, 1.011, 1.057, 1.033, 1.051, 1.045, 1.045, 1.037, 1.059, 1.028, 1.032, 1.029, 1.031, 1.029, 1.023, 1.035 };

            DistributionAnalysis analysis = new DistributionAnalysis();

            analysis.Options[analysis.GetFirstIndex("GammaDistribution")] = new GammaOptions()
            {
                Iterations = 0
            };

            var fit1 = analysis.Learn(x);


            Assert.AreEqual("UniformContinuous", analysis.GoodnessOfFit[0].Name);
            Assert.AreEqual("Gamma", analysis.GoodnessOfFit[2].Name);

            var gamma = analysis.GoodnessOfFit[2].Distribution as GammaDistribution;

            Assert.AreEqual(1.0329411764705885, gamma.Mean, 1e-8);
            Assert.AreEqual(1.03286759780857, gamma.Median, 1e-8);
            Assert.AreEqual(1.0327204376888031, gamma.Mode, 1e-8);
            Assert.AreEqual(4530.2415457406223, gamma.Rate, 1e-8);
            Assert.AreEqual(4679.4730319532555, gamma.Shape, 1e-8);

            analysis.Distributions = new List <IFittableDistribution <double> >()
            {
                new GammaDistribution()
            };

            analysis.Options[analysis.GetFirstIndex("GammaDistribution")] = new GammaOptions()
            {
                Iterations = 1000
            };

            var fit2 = analysis.Learn(x);

            gamma = analysis.GoodnessOfFit[0].Distribution as GammaDistribution;
            Assert.AreEqual(1.0329411764705885, gamma.Mean, 1e-8);
            Assert.AreEqual(1.03286759780857, gamma.Median, 1e-8);
            Assert.AreEqual(1.0327204376888031, gamma.Mode, 1e-8);
            Assert.AreEqual(4530.2415515050052, gamma.Rate, 1e-8);
            Assert.AreEqual(4679.4730379075245, gamma.Shape, 1e-8);


            Assert.AreEqual("Gamma", analysis.GoodnessOfFit[0].Name);
        }