This is an automated email from the ASF dual-hosted git repository. aherbert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-statistics.git
commit e39a4354c802d7f509f660ecf9bedece0197c3ff Author: Alex Herbert <aherb...@apache.org> AuthorDate: Mon Aug 2 22:16:34 2021 +0100 Reorder distribution methods Constructor Parameter getters (in order used by the constructor) Methods from the interface: density/probability probability(low, high) logDensity/logProbability cumulativeProbability survivalProbability inverseCumulativeProbability getMean getVariance getSupportLowerBound getSupportUpperBound isSupportConnected createSampler --- .../distribution/CauchyDistribution.java | 42 +++++++++++----------- .../statistics/distribution/FDistribution.java | 36 +++++++++---------- .../distribution/GeometricDistribution.java | 34 +++++++++--------- .../distribution/HypergeometricDistribution.java | 16 ++++----- .../statistics/distribution/LevyDistribution.java | 36 +++++++++---------- .../distribution/LogNormalDistribution.java | 36 +++++++++---------- .../distribution/NormalDistribution.java | 26 +++++++------- .../distribution/TriangularDistribution.java | 38 ++++++++++---------- 8 files changed, 131 insertions(+), 133 deletions(-) diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java index 55cb0b2..1c7de30 100644 --- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java +++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java @@ -47,27 +47,6 @@ public class CauchyDistribution extends AbstractContinuousDistribution { scale2 = scale * scale; } - /** {@inheritDoc} */ - @Override - public double cumulativeProbability(double x) { - return cdf((x - median) / scale); - } - - /** {@inheritDoc} */ - @Override - public double survivalProbability(double x) { - return cdf(-(x - median) / scale); - } - - /** - * Compute the CDF of the Cauchy distribution with location 0 and scale 1. - * @param x Point at which the CDF is evaluated - * @return CDF(x) - */ - private static double cdf(double x) { - return 0.5 + (Math.atan(x) / Math.PI); - } - /** * Access the median. * @@ -93,6 +72,27 @@ public class CauchyDistribution extends AbstractContinuousDistribution { return scaleOverPi / (dev * dev + scale2); } + /** {@inheritDoc} */ + @Override + public double cumulativeProbability(double x) { + return cdf((x - median) / scale); + } + + /** {@inheritDoc} */ + @Override + public double survivalProbability(double x) { + return cdf(-(x - median) / scale); + } + + /** + * Compute the CDF of the Cauchy distribution with location 0 and scale 1. + * @param x Point at which the CDF is evaluated + * @return CDF(x) + */ + private static double cdf(double x) { + return 0.5 + (Math.atan(x) / Math.PI); + } + /** * {@inheritDoc} * diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FDistribution.java index 50baef9..1610478 100644 --- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FDistribution.java +++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FDistribution.java @@ -75,6 +75,24 @@ public class FDistribution extends AbstractContinuousDistribution { } /** + * Access the numerator degrees of freedom. + * + * @return the numerator degrees of freedom. + */ + public double getNumeratorDegreesOfFreedom() { + return numeratorDegreesOfFreedom; + } + + /** + * Access the denominator degrees of freedom. + * + * @return the denominator degrees of freedom. + */ + public double getDenominatorDegreesOfFreedom() { + return denominatorDegreesOfFreedom; + } + + /** * {@inheritDoc} */ @Override @@ -145,24 +163,6 @@ public class FDistribution extends AbstractContinuousDistribution { } /** - * Access the numerator degrees of freedom. - * - * @return the numerator degrees of freedom. - */ - public double getNumeratorDegreesOfFreedom() { - return numeratorDegreesOfFreedom; - } - - /** - * Access the denominator degrees of freedom. - * - * @return the denominator degrees of freedom. - */ - public double getDenominatorDegreesOfFreedom() { - return denominatorDegreesOfFreedom; - } - - /** * {@inheritDoc} * * For denominator degrees of freedom parameter {@code b}, the mean is diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GeometricDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GeometricDistribution.java index 3c917c6..2e6dd3c 100644 --- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GeometricDistribution.java +++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GeometricDistribution.java @@ -90,6 +90,22 @@ public class GeometricDistribution extends AbstractDiscreteDistribution { return Math.exp(log1mProbabilityOfSuccess * (x + 1)); } + /** {@inheritDoc} */ + @Override + public int inverseCumulativeProbability(double p) { + if (p < 0 || + p > 1) { + throw new DistributionException(DistributionException.INVALID_PROBABILITY, p); + } + if (p == 1) { + return Integer.MAX_VALUE; + } + if (p == 0) { + return 0; + } + return Math.max(0, (int) Math.ceil(Math.log1p(-p) / log1mProbabilityOfSuccess - 1)); + } + /** * {@inheritDoc} * @@ -147,22 +163,4 @@ public class GeometricDistribution extends AbstractDiscreteDistribution { public boolean isSupportConnected() { return true; } - - /** - * {@inheritDoc} - */ - @Override - public int inverseCumulativeProbability(double p) { - if (p < 0 || - p > 1) { - throw new DistributionException(DistributionException.INVALID_PROBABILITY, p); - } - if (p == 1) { - return Integer.MAX_VALUE; - } - if (p == 0) { - return 0; - } - return Math.max(0, (int) Math.ceil(Math.log1p(-p) / log1mProbabilityOfSuccess - 1)); - } } diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/HypergeometricDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/HypergeometricDistribution.java index ef43b0c..5a870ad 100644 --- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/HypergeometricDistribution.java +++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/HypergeometricDistribution.java @@ -106,21 +106,21 @@ public class HypergeometricDistribution extends AbstractDiscreteDistribution { } /** - * Access the number of successes. + * Access the population size. * - * @return the number of successes. + * @return the population size. */ - public int getNumberOfSuccesses() { - return numberOfSuccesses; + public int getPopulationSize() { + return populationSize; } /** - * Access the population size. + * Access the number of successes. * - * @return the population size. + * @return the number of successes. */ - public int getPopulationSize() { - return populationSize; + public int getNumberOfSuccesses() { + return numberOfSuccesses; } /** diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java index eafcbd5..e6eae34 100644 --- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java +++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java @@ -45,6 +45,24 @@ public class LevyDistribution extends AbstractContinuousDistribution { this.halfC = 0.5 * c; } + /** + * Gets the location parameter of the distribution. + * + * @return location parameter of the distribution + */ + public double getLocation() { + return mu; + } + + /** + * Gets the scale parameter of the distribution. + * + * @return scale parameter of the distribution + */ + public double getScale() { + return c; + } + /** {@inheritDoc} * <p> * From Wikipedia: The probability density function of the Lévy distribution @@ -121,24 +139,6 @@ public class LevyDistribution extends AbstractContinuousDistribution { return mu + halfC / (t * t); } - /** - * Gets the scale parameter of the distribution. - * - * @return scale parameter of the distribution - */ - public double getScale() { - return c; - } - - /** - * Gets the location parameter of the distribution. - * - * @return location parameter of the distribution - */ - public double getLocation() { - return mu; - } - /** {@inheritDoc} */ @Override public double getMean() { diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogNormalDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogNormalDistribution.java index 211170b..e2b86af 100644 --- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogNormalDistribution.java +++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogNormalDistribution.java @@ -112,6 +112,24 @@ public class LogNormalDistribution extends AbstractContinuousDistribution { return Math.exp(-0.5 * x1 * x1) / (shape * SQRT2PI * x); } + /** {@inheritDoc} */ + @Override + public double probability(double x0, + double x1) { + if (x0 > x1) { + throw new DistributionException(DistributionException.INVALID_RANGE_LOW_GT_HIGH, + x0, x1); + } + if (x0 <= 0) { + return super.probability(x0, x1); + } + // Assumes x1 >= x0 && x0 > 0 + final double denom = shape * SQRT2; + final double v0 = (Math.log(x0) - scale) / denom; + final double v1 = (Math.log(x1) - scale) / denom; + return 0.5 * ErfDifference.value(v0, v1); + } + /** {@inheritDoc} * * See documentation of {@link #density(double)} for computation details. @@ -167,24 +185,6 @@ public class LogNormalDistribution extends AbstractContinuousDistribution { return 0.5 * Erfc.value(dev / (shape * SQRT2)); } - /** {@inheritDoc} */ - @Override - public double probability(double x0, - double x1) { - if (x0 > x1) { - throw new DistributionException(DistributionException.INVALID_RANGE_LOW_GT_HIGH, - x0, x1); - } - if (x0 <= 0) { - return super.probability(x0, x1); - } - // Assumes x1 >= x0 && x0 > 0 - final double denom = shape * SQRT2; - final double v0 = (Math.log(x0) - scale) / denom; - final double v1 = (Math.log(x1) - scale) / denom; - return 0.5 * ErfDifference.value(v0, v1); - } - /** * {@inheritDoc} * diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java index 81345e4..d2cee06 100644 --- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java +++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java @@ -75,6 +75,19 @@ public class NormalDistribution extends AbstractContinuousDistribution { /** {@inheritDoc} */ @Override + public double probability(double x0, + double x1) { + if (x0 > x1) { + throw new DistributionException(DistributionException.INVALID_RANGE_LOW_GT_HIGH, + x0, x1); + } + final double v0 = (x0 - mean) / sdSqrt2; + final double v1 = (x1 - mean) / sdSqrt2; + return 0.5 * ErfDifference.value(v0, v1); + } + + /** {@inheritDoc} */ + @Override public double logDensity(double x) { final double x0 = x - mean; final double x1 = x0 / standardDeviation; @@ -119,19 +132,6 @@ public class NormalDistribution extends AbstractContinuousDistribution { /** {@inheritDoc} */ @Override - public double probability(double x0, - double x1) { - if (x0 > x1) { - throw new DistributionException(DistributionException.INVALID_RANGE_LOW_GT_HIGH, - x0, x1); - } - final double v0 = (x0 - mean) / sdSqrt2; - final double v1 = (x1 - mean) / sdSqrt2; - return 0.5 * ErfDifference.value(v0, v1); - } - - /** {@inheritDoc} */ - @Override public double getMean() { return mean; } diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TriangularDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TriangularDistribution.java index 1a6a5f7..4500f01 100644 --- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TriangularDistribution.java +++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TriangularDistribution.java @@ -142,6 +142,25 @@ public class TriangularDistribution extends AbstractContinuousDistribution { return 1; } + /** {@inheritDoc} */ + @Override + public double inverseCumulativeProbability(double p) { + if (p < 0 || + p > 1) { + throw new DistributionException(DistributionException.INVALID_PROBABILITY, p); + } + if (p == 0) { + return a; + } + if (p == 1) { + return b; + } + if (p < cdfMode) { + return a + Math.sqrt(p * divisor1); + } + return b - Math.sqrt((1 - p) * divisor2); + } + /** * {@inheritDoc} * @@ -201,23 +220,4 @@ public class TriangularDistribution extends AbstractContinuousDistribution { public boolean isSupportConnected() { return true; } - - /** {@inheritDoc} */ - @Override - public double inverseCumulativeProbability(double p) { - if (p < 0 || - p > 1) { - throw new DistributionException(DistributionException.INVALID_PROBABILITY, p); - } - if (p == 0) { - return a; - } - if (p == 1) { - return b; - } - if (p < cdfMode) { - return a + Math.sqrt(p * divisor1); - } - return b - Math.sqrt((1 - p) * divisor2); - } }