public void SetupDistributions()
        {
            dists = new IDistribution[8];

            dists[0] = new Beta(1.0, 1.0);
            dists[1] = new ContinuousUniform(0.0, 1.0);
            dists[2] = new Gamma(1.0, 1.0);
            dists[3] = new Normal(0.0, 1.0);
            dists[4] = new Bernoulli(0.6);
            dists[5] = new Weibull(1.0, 1.0);
            dists[6] = new DiscreteUniform(1, 10);
            dists[7] = new LogNormal(1.0, 1.0);
        }
示例#2
0
 public void CanSampleSequence()
 {
     var n = new Beta(2.0, 3.0);
     var ied = n.Samples();
     GC.KeepAlive(ied.Take(5).ToArray());
 }
示例#3
0
 public void CanSampleSequence()
 {
     var n = new Beta(2.0, 3.0);
     var ied = n.Samples();
     var e = ied.Take(5).ToArray();
 }
示例#4
0
 public void CanCreateBeta(double a, double b)
 {
     var n = new Beta(a, b);
     AssertEx.AreEqual<double>(a, n.A);
     AssertEx.AreEqual<double>(b, n.B);
 }
示例#5
0
 public void ValidateToString()
 {
     var n = new Beta(1.0, 2.0);
     AssertEx.AreEqual<string>("Beta(A = 1, B = 2)", n.ToString());
 }
示例#6
0
 public void ValidateMode(double a, double b, double mode)
 {
     var n = new Beta(a, b);
     AssertEx.AreEqual<double>(mode, n.Mode);
 }
示例#7
0
 public void ValidateMedian(double a, double b)
 {
     var n = new Beta(a, 1.0);
     var m = n.Median;
 }
示例#8
0
 public void ValidateEntropy(double a, double b, double entropy)
 {
     var n = new Beta(a, b);
     AssertHelpers.AlmostEqual(entropy, n.Entropy, 14);
 }
示例#9
0
 public void ValidateMedianThrowsNotSupportedException()
 {
     var n = new Beta(0.0, 1.0);
     Assert.Throws<NotSupportedException>(() => { var m = n.Median; });
 }
示例#10
0
 public void ValidateMaximum()
 {
     var n = new Beta(1.0, 1.0);
     Assert.AreEqual(1.0, n.Maximum);
 }
示例#11
0
 public void ValidateInverseCumulativeDistribution(double a, double b, double x, double p)
 {
     var dist = new Beta(a, b);
     Assert.That(dist.InverseCumulativeDistribution(p), Is.EqualTo(x).Within(1e-6));
     Assert.That(Beta.InvCDF(a, b, p), Is.EqualTo(x).Within(1e-6));
 }
示例#12
0
 public void ValidateDensityLn(double a, double b, double x, double pdfln)
 {
     var n = new Beta(a, b);
     AssertHelpers.AlmostEqualRelative(pdfln, n.DensityLn(x), 13);
     AssertHelpers.AlmostEqualRelative(pdfln, Beta.PDFLn(a, b, x), 13);
 }
示例#13
0
 public void ValidateDensity(double a, double b, double x, double pdf)
 {
     var n = new Beta(a, b);
     AssertHelpers.AlmostEqualRelative(pdf, n.Density(x), 12);
     AssertHelpers.AlmostEqualRelative(pdf, Beta.PDF(a, b, x), 12);
 }
示例#14
0
 public void ValidateCumulativeDistribution(double a, double b, double x, double p)
 {
     var dist = new Beta(a, b);
     Assert.That(dist.CumulativeDistribution(x), Is.EqualTo(p).Within(1e-13));
     Assert.That(Beta.CDF(a, b, x), Is.EqualTo(p).Within(1e-13));
 }
示例#15
0
 public void SetShapeBFailsWithNegativeB()
 {
     var n = new Beta(1.0, 1.0);
     Assert.That(() => n.B = -1.0, Throws.ArgumentException);
 }
示例#16
0
 public void ValidateDensity(double a, double b, double x, double pdf)
 {
     var n = new Beta(a, b);
     AssertHelpers.AlmostEqual(pdf, n.Density(x), 13);
 }
示例#17
0
 public void ValidateDensityLn(double a, double b, double x, double pdfln)
 {
     var n = new Beta(a, b);
     AssertHelpers.AlmostEqual(pdfln, n.DensityLn(x), 14);
 }
示例#18
0
 public void ValidateToString()
 {
     var n = new Beta(1d, 2d);
     Assert.AreEqual("Beta(α = 1, β = 2)", n.ToString());
 }
示例#19
0
 public void ValidateMean(double a, double b, double mean)
 {
     var n = new Beta(a, b);
     AssertEx.AreEqual<double>(mean, n.Mean);
 }
示例#20
0
 public void ValidateBetaSpecialCaseDensityLn(double x)
 {
     var d = new Dirichlet(new[] { 0.1, 0.3 });
     var beta = new Beta(0.1, 0.3);
     AssertHelpers.AlmostEqualRelative(d.DensityLn(new[] { x }), beta.DensityLn(x), 10);
 }
示例#21
0
 public void ValidateMinimum()
 {
     var n = new Beta(1.0, 1.0);
     AssertEx.AreEqual<double>(0.0, n.Minimum);
 }
示例#22
0
 public void CanSetShapeA(double a)
 {
     var n = new Beta(1.0, 1.0);
     n.A = a;
 }
示例#23
0
 public void ValidateSkewness(double a, double b, double skewness)
 {
     var n = new Beta(a, b);
     AssertHelpers.AlmostEqual(skewness, n.Skewness, 15);
 }
示例#24
0
 public void CanSetShapeB(double b)
 {
     var n = new Beta(1.0, 1.0);
     n.B = b;
 }
示例#25
0
 public void BetaCreateFailsWithBadParameters(double a, double b)
 {
     var n = new Beta(a, b);
 }
示例#26
0
 public void SetShapeAFailsWithNegativeA()
 {
     var n = new Beta(1.0, 1.0);
     n.A = -1.0;
 }
示例#27
0
 public void CanSample()
 {
     var n = new Beta(2.0, 3.0);
     var d = n.Sample();
 }
示例#28
0
 public void SetShapeBFailsWithNegativeB()
 {
     var n = new Beta(1.0, 1.0);
     n.B = -1.0;
 }
示例#29
0
 public void ValidateCumulativeDistribution(double a, double b, double x, double cdf)
 {
     var n = new Beta(a, b);
     AssertHelpers.AlmostEqual(cdf, n.CumulativeDistribution(x), 13);
 }
        /// <summary>
        /// Run example
        /// </summary>
        /// <a href="http://en.wikipedia.org/wiki/Beta_distribution">Beta distribution</a>
        public void Run()
        {
            // 1. Initialize the new instance of the Beta distribution class with parameters a = 5 and b = 1.
            var beta = new Beta(5, 1);
            Console.WriteLine(@"1. Initialize the new instance of the Beta distribution class with parameters a = {0} and b = {1}", beta.A, beta.B);
            Console.WriteLine();

            // 2. Distributuion properties:
            Console.WriteLine(@"2. {0} distributuion properties:", beta);

            // Cumulative distribution function
            Console.WriteLine(@"{0} - Сumulative distribution at location '0.3'", beta.CumulativeDistribution(0.3).ToString(" #0.00000;-#0.00000"));

            // Probability density
            Console.WriteLine(@"{0} - Probability density at location '0.3'", beta.Density(0.3).ToString(" #0.00000;-#0.00000"));

            // Log probability density
            Console.WriteLine(@"{0} - Log probability density at location '0.3'", beta.DensityLn(0.3).ToString(" #0.00000;-#0.00000"));

            // Entropy
            Console.WriteLine(@"{0} - Entropy", beta.Entropy.ToString(" #0.00000;-#0.00000"));

            // Largest element in the domain
            Console.WriteLine(@"{0} - Largest element in the domain", beta.Maximum.ToString(" #0.00000;-#0.00000"));

            // Smallest element in the domain
            Console.WriteLine(@"{0} - Smallest element in the domain", beta.Minimum.ToString(" #0.00000;-#0.00000"));

            // Mean
            Console.WriteLine(@"{0} - Mean", beta.Mean.ToString(" #0.00000;-#0.00000"));

            // Mode
            Console.WriteLine(@"{0} - Mode", beta.Mode.ToString(" #0.00000;-#0.00000"));

            // Variance
            Console.WriteLine(@"{0} - Variance", beta.Variance.ToString(" #0.00000;-#0.00000"));

            // Standard deviation
            Console.WriteLine(@"{0} - Standard deviation", beta.StdDev.ToString(" #0.00000;-#0.00000"));

            // Skewness
            Console.WriteLine(@"{0} - Skewness", beta.Skewness.ToString(" #0.00000;-#0.00000"));
            Console.WriteLine();

            // 3. Generate 10 samples of the Beta distribution
            Console.WriteLine(@"3. Generate 10 samples of the Beta distribution");
            for (var i = 0; i < 10; i++)
            {
                Console.Write(beta.Sample().ToString("N05") + @" ");
            }

            Console.WriteLine();
            Console.WriteLine();

            // 4. Generate 100000 samples of the Beta(5, 1) distribution and display histogram
            Console.WriteLine(@"4. Generate 100000 samples of the Beta(5, 1) distribution and display histogram");
            var data = new double[100000];
            for (var i = 0; i < data.Length; i++)
            {
                data[i] = beta.Sample();
            }

            ConsoleHelper.DisplayHistogram(data);
            Console.WriteLine();

            // 5. Generate 100000 samples of the Beta(2, 5) distribution and display histogram
            Console.WriteLine(@"5. Generate 100000 samples of the Beta(2, 5) distribution and display histogram");
            beta.A = 2;
            beta.B = 5;
            for (var i = 0; i < data.Length; i++)
            {
                data[i] = beta.Sample();
            }

            ConsoleHelper.DisplayHistogram(data);
            Console.WriteLine();

            // 6. Generate 100000 samples of the Beta distribution and display histogram
            Console.WriteLine(@"6. Generate 100000 samples of the Beta(0.5, 0.5) distribution and display histogram");
            beta.A = 0.5;
            beta.B = 0.5;
            for (var i = 0; i < data.Length; i++)
            {
                data[i] = beta.Sample();
            }

            ConsoleHelper.DisplayHistogram(data);
            Console.WriteLine();

            // 7. Generate 100000 samples of the Beta distribution and display histogram
            Console.WriteLine(@"7. Generate 100000 samples of the Beta(2, 2) distribution and display histogram");
            beta.A = 2;
            beta.B = 2;
            for (var i = 0; i < data.Length; i++)
            {
                data[i] = beta.Sample();
            }

            ConsoleHelper.DisplayHistogram(data);
        }