Exemplo n.º 1
0
        protected void Check([NotNull] IDistribution distribution, [NotNull] double[] x, [NotNull] double[] expectedPdf,
                             [NotNull] double[] expectedCdf, [NotNull] double[] expectedQuantile)
        {
            AssertEqual("StandardDeviation", distribution.StandardDeviation, distribution.Variance.Sqrt());

            for (int i = 0; i < x.Length; i++)
            {
                AssertEqual($"Pdf({x[i]})", expectedPdf[i], distribution.Pdf(x[i]));
            }

            for (int i = 0; i < x.Length; i++)
            {
                AssertEqual($"Cdf({x[i]})", expectedCdf[i], distribution.Cdf(x[i]));
            }

            for (int i = 0; i < x.Length; i++)
            {
                AssertEqual($"Quantile({x[i]})", expectedQuantile[i], distribution.Quantile(x[i]));
            }

            for (int i = 0; i < x.Length; i++)
            {
                AssertEqual($"Cdf(Quantile({x[i]}))", x[i], distribution.Cdf(distribution.Quantile(x[i])));
            }

            Assert.Throws <ArgumentOutOfRangeException>(() => distribution.Quantile(-1));
            Assert.Throws <ArgumentOutOfRangeException>(() => distribution.Quantile(2));
        }
Exemplo n.º 2
0
        /// <inheritdoc/>
        public byte[] TransformToByte(decimal[] cdf, IDistribution distribution)
        {
            if (cdf is null)
            {
                throw new ArgumentNullException(nameof(cdf));
            }
            if (distribution is null)
            {
                throw new ArgumentNullException(nameof(distribution));
            }

            var result = new byte[256];

            //transform an array by a quantile function
            for (int index = 0; index < 256; ++index)
            {
                if (distribution.Quantile(cdf[index], out var pixel))
                {
                    if (pixel > 255M)
                    {
                        pixel = 255M;
                    }

                    if (pixel < 0M)
                    {
                        pixel = 0M;
                    }
                }

                result[index] = Convert.ToByte(pixel);
            }

            return(result);
        }
Exemplo n.º 3
0
        /// <inheritdoc/>
        public decimal[] TransformToDecimal(decimal[] cdf, IDistribution distribution)
        {
            if (cdf is null)
            {
                throw new ArgumentNullException(nameof(cdf));
            }
            if (distribution is null)
            {
                throw new ArgumentNullException(nameof(distribution));
            }

            var result = new decimal[cdf.Length];

            //transform an array by a quantile function
            for (int index = 0; index < cdf.Length; ++index)
            {
                distribution.Quantile(cdf[index], out result[index]);
            }

            return(result);
        }
Exemplo n.º 4
0
        private double GetCoveragePercentage(IDistribution distribution, Probability probability, ConfidenceLevel confidenceLevel,
                                             Random random, int sampleSize, int repetitions)
        {
            var    generator = distribution.Random(random);
            var    estimator = HarrellDavisQuantileEstimator.Instance;
            double trueValue = distribution.Quantile(probability);
            int    success   = 0;

            for (int i = 0; i < repetitions; i++)
            {
                var sample      = new Sample(generator.Next(sampleSize));
                var estimatedCi = estimator
                                  .GetQuantileConfidenceIntervalEstimator(sample, probability)
                                  .GetConfidenceInterval(confidenceLevel);
                if (estimatedCi.Contains(trueValue))
                {
                    success++;
                }
            }
            return(success * 1.0 / repetitions);
        }
Exemplo n.º 5
0
 public override double Next() => distribution.Quantile(Random.NextDouble());