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)); }
/// <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); }
/// <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); }
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); }
public override double Next() => distribution.Quantile(Random.NextDouble());