You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2021/08/01 21:30:27 UTC
[commons-statistics] branch master updated (de690c8 -> 8784494)
This is an automated email from the ASF dual-hosted git repository.
aherbert pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/commons-statistics.git.
from de690c8 Add explicit logDensity computation
new af33339 Explicitly mention 'probability' distributions
new 2decb7f Remove probabilty method from ContinuousDistribution
new 90fbdb5 Reorder density method in ContinuousDistribution
new 0258847 Formatting
new 8784494 Precompute values for probability computations.
The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../distribution/BinomialDistribution.java | 4 +-
.../distribution/CauchyDistribution.java | 8 ++-
.../distribution/ContinuousDistribution.java | 33 +++------
.../statistics/distribution/FDistribution.java | 21 ++++--
.../distribution/HypergeometricDistribution.java | 22 +++---
.../distribution/LaplaceDistribution.java | 5 +-
.../distribution/NakagamiDistribution.java | 13 ++--
.../distribution/NormalDistribution.java | 14 ++--
.../distribution/ParetoDistribution.java | 10 ++-
.../distribution/PascalDistribution.java | 25 +++----
.../distribution/PoissonDistribution.java | 6 +-
.../distribution/TriangularDistribution.java | 29 ++++----
.../distribution/TruncatedNormalDistribution.java | 11 ++-
.../UniformContinuousDistribution.java | 10 ++-
.../distribution/UniformDiscreteDistribution.java | 17 ++++-
.../distribution/WeibullDistribution.java | 11 ++-
.../statistics/distribution/ZipfDistribution.java | 2 +-
.../statistics/distribution/package-info.java | 3 +-
.../AbstractContinuousDistributionTest.java | 10 ---
.../ContinuousDistributionAbstractTest.java | 84 ----------------------
.../distribution/ContinuousDistributionTest.java | 3 -
21 files changed, 150 insertions(+), 191 deletions(-)
[commons-statistics] 01/05: Explicitly mention 'probability'
distributions
Posted by ah...@apache.org.
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 af33339b1cdf158d40c1ab4d17d005d0eaf3d36e
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Sun Aug 1 19:07:30 2021 +0100
Explicitly mention 'probability' distributions
---
.../java/org/apache/commons/statistics/distribution/package-info.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/package-info.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/package-info.java
index 98315c6..fa51d4d 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/package-info.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/package-info.java
@@ -14,7 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
/**
- * Implementations of common discrete and continuous distributions.
+ * Implementations of common discrete and continuous probability distributions.
*/
package org.apache.commons.statistics.distribution;
[commons-statistics] 04/05: Formatting
Posted by ah...@apache.org.
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 02588471babb867899c0bec9fc093fcfed243aef
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Sun Aug 1 19:25:20 2021 +0100
Formatting
---
.../apache/commons/statistics/distribution/BinomialDistribution.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/BinomialDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/BinomialDistribution.java
index d9dcc64..4da813b 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/BinomialDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/BinomialDistribution.java
@@ -78,7 +78,7 @@ public class BinomialDistribution extends AbstractDiscreteDistribution {
@Override
public double logProbability(int x) {
if (numberOfTrials == 0) {
- return (x == 0) ? 0. : Double.NEGATIVE_INFINITY;
+ return (x == 0) ? 0.0 : Double.NEGATIVE_INFINITY;
} else if (x < 0 || x > numberOfTrials) {
return Double.NEGATIVE_INFINITY;
}
@@ -97,7 +97,7 @@ public class BinomialDistribution extends AbstractDiscreteDistribution {
}
// Use a helper function to compute the complement of the survival probability
return RegularizedBetaUtils.complement(probabilityOfSuccess,
- x + 1.0, (double) numberOfTrials - x);
+ x + 1.0, (double) numberOfTrials - x);
}
/** {@inheritDoc} */
[commons-statistics] 03/05: Reorder density method in
ContinuousDistribution
Posted by ah...@apache.org.
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 90fbdb5087814319c19f3db9833ccba9166f483f
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Sun Aug 1 19:21:54 2021 +0100
Reorder density method in ContinuousDistribution
Density is the equivalent method to probability in the
DiscreteDistribution interface, so the order is now consistent.
---
.../distribution/ContinuousDistribution.java | 28 +++++++++++-----------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ContinuousDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ContinuousDistribution.java
index 2b963d8..ec9493b 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ContinuousDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ContinuousDistribution.java
@@ -23,6 +23,20 @@ import org.apache.commons.rng.UniformRandomProvider;
*/
public interface ContinuousDistribution {
/**
+ * Returns the probability density function (PDF) of this distribution
+ * evaluated at the specified point {@code x}.
+ * In general, the PDF is the derivative of the {@link #cumulativeProbability(double) CDF}.
+ * If the derivative does not exist at {@code x}, then an appropriate
+ * replacement should be returned, e.g. {@code Double.POSITIVE_INFINITY},
+ * {@code Double.NaN}, or the limit inferior or limit superior of the
+ * difference quotient.
+ *
+ * @param x Point at which the PDF is evaluated.
+ * @return the value of the probability density function at {@code x}.
+ */
+ double density(double x);
+
+ /**
* For a random variable {@code X} whose values are distributed according
* to this distribution, this method returns {@code P(x0 < X <= x1)}.
* The default implementation uses the identity
@@ -44,20 +58,6 @@ public interface ContinuousDistribution {
}
/**
- * Returns the probability density function (PDF) of this distribution
- * evaluated at the specified point {@code x}.
- * In general, the PDF is the derivative of the {@link #cumulativeProbability(double) CDF}.
- * If the derivative does not exist at {@code x}, then an appropriate
- * replacement should be returned, e.g. {@code Double.POSITIVE_INFINITY},
- * {@code Double.NaN}, or the limit inferior or limit superior of the
- * difference quotient.
- *
- * @param x Point at which the PDF is evaluated.
- * @return the value of the probability density function at {@code x}.
- */
- double density(double x);
-
- /**
* Returns the natural logarithm of the probability density function
* (PDF) of this distribution evaluated at the specified point {@code x}.
*
[commons-statistics] 05/05: Precompute values for probability
computations.
Posted by ah...@apache.org.
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 878449448bc49cf7cb85e6de1f44d8682061804c
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Sun Aug 1 22:28:49 2021 +0100
Precompute values for probability computations.
---
.../distribution/CauchyDistribution.java | 8 +++++-
.../statistics/distribution/FDistribution.java | 21 +++++++++++-----
.../distribution/HypergeometricDistribution.java | 22 ++++++++--------
.../distribution/LaplaceDistribution.java | 5 +++-
.../distribution/NakagamiDistribution.java | 13 ++++++----
.../distribution/NormalDistribution.java | 14 ++++++-----
.../distribution/ParetoDistribution.java | 10 ++++++--
.../distribution/PascalDistribution.java | 25 ++++++++++---------
.../distribution/PoissonDistribution.java | 6 ++---
.../distribution/TriangularDistribution.java | 29 +++++++++++++---------
.../distribution/TruncatedNormalDistribution.java | 11 ++++++--
.../UniformContinuousDistribution.java | 10 ++++++--
.../distribution/UniformDiscreteDistribution.java | 17 ++++++++++++-
.../distribution/WeibullDistribution.java | 11 +++++---
.../statistics/distribution/ZipfDistribution.java | 2 +-
15 files changed, 136 insertions(+), 68 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 8c7cbd4..55cb0b2 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
@@ -24,6 +24,10 @@ public class CauchyDistribution extends AbstractContinuousDistribution {
private final double median;
/** The scale of this distribution. */
private final double scale;
+ /** Density factor (scale / pi). */
+ private final double scaleOverPi;
+ /** Density factor (scale^2). */
+ private final double scale2;
/**
* Creates a distribution.
@@ -39,6 +43,8 @@ public class CauchyDistribution extends AbstractContinuousDistribution {
}
this.scale = scale;
this.median = median;
+ scaleOverPi = scale / Math.PI;
+ scale2 = scale * scale;
}
/** {@inheritDoc} */
@@ -84,7 +90,7 @@ public class CauchyDistribution extends AbstractContinuousDistribution {
@Override
public double density(double x) {
final double dev = x - median;
- return (1 / Math.PI) * (scale / (dev * dev + scale * scale));
+ return scaleOverPi / (dev * dev + scale2);
}
/**
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 0acccbb..50baef9 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
@@ -38,8 +38,14 @@ public class FDistribution extends AbstractContinuousDistribution {
/** The numerator degrees of freedom. */
private final double numeratorDegreesOfFreedom;
- /** The numerator degrees of freedom. */
+ /** The denominator degrees of freedom. */
private final double denominatorDegreesOfFreedom;
+ /** n/2 * log(n) with n = numerator DF. */
+ private final double nhalfLogn;
+ /** m/2 * log(m) with m = denominator DF. */
+ private final double mhalfLogm;
+ /** LogBeta(n/2, n/2) with n = numerator DF. */
+ private final double logBetaNhalfNhalf;
/**
* Creates a distribution.
@@ -61,6 +67,11 @@ public class FDistribution extends AbstractContinuousDistribution {
}
this.numeratorDegreesOfFreedom = numeratorDegreesOfFreedom;
this.denominatorDegreesOfFreedom = denominatorDegreesOfFreedom;
+ final double nhalf = numeratorDegreesOfFreedom / 2;
+ final double mhalf = denominatorDegreesOfFreedom / 2;
+ nhalfLogn = nhalf * Math.log(numeratorDegreesOfFreedom);
+ mhalfLogm = mhalf * Math.log(denominatorDegreesOfFreedom);
+ logBetaNhalfNhalf = LogBeta.value(nhalf, mhalf);
}
/**
@@ -82,13 +93,11 @@ public class FDistribution extends AbstractContinuousDistribution {
final double nhalf = numeratorDegreesOfFreedom / 2;
final double mhalf = denominatorDegreesOfFreedom / 2;
final double logx = Math.log(x);
- final double logn = Math.log(numeratorDegreesOfFreedom);
- final double logm = Math.log(denominatorDegreesOfFreedom);
final double lognxm = Math.log(numeratorDegreesOfFreedom * x +
denominatorDegreesOfFreedom);
- return nhalf * logn + nhalf * logx - logx +
- mhalf * logm - nhalf * lognxm - mhalf * lognxm -
- LogBeta.value(nhalf, mhalf);
+ return nhalfLogn + nhalf * logx - logx +
+ mhalfLogm - nhalf * lognxm - mhalf * lognxm -
+ logBetaNhalfNhalf;
}
/**
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 6dc6a6a..ef43b0c 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
@@ -31,6 +31,10 @@ public class HypergeometricDistribution extends AbstractDiscreteDistribution {
private final int lowerBound;
/** The upper bound of the support (inclusive). */
private final int upperBound;
+ /** Binomial probability of success (sampleSize / populationSize). */
+ private final double p;
+ /** Binomial probability of failure ((populationSize - sampleSize) / populationSize). */
+ private final double q;
/**
* Creates a new hypergeometric distribution.
@@ -72,6 +76,8 @@ public class HypergeometricDistribution extends AbstractDiscreteDistribution {
this.sampleSize = sampleSize;
lowerBound = getLowerDomain(populationSize, numberOfSuccesses, sampleSize);
upperBound = getUpperDomain(numberOfSuccesses, sampleSize);
+ p = (double) sampleSize / (double) populationSize;
+ q = (double) (populationSize - sampleSize) / (double) populationSize;
}
/**
@@ -138,20 +144,16 @@ public class HypergeometricDistribution extends AbstractDiscreteDistribution {
if (x < lowerBound || x > upperBound) {
return Double.NEGATIVE_INFINITY;
}
- final double p = (double) sampleSize / (double) populationSize;
- final double q = (double) (populationSize - sampleSize) / (double) populationSize;
- return logProbability(x, p, q);
+ return computeLogProbability(x);
}
/**
* Compute the log probability.
*
* @param x Value.
- * @param p sample size / population size.
- * @param q (population size - sample size) / population size
* @return log(P(X = x))
*/
- private double logProbability(int x, double p, double q) {
+ private double computeLogProbability(int x) {
final double p1 =
SaddlePointExpansionUtils.logBinomialProbability(x, numberOfSuccesses, p, q);
final double p2 =
@@ -200,19 +202,17 @@ public class HypergeometricDistribution extends AbstractDiscreteDistribution {
private double innerCumulativeProbability(int x0, int x1) {
// Assume the range is within the domain.
// Reuse the computation for probability(x) but avoid checking the domain for each call.
- final double p = (double) sampleSize / (double) populationSize;
- final double q = (double) (populationSize - sampleSize) / (double) populationSize;
int x = x0;
- double ret = Math.exp(logProbability(x, p, q));
+ double ret = Math.exp(computeLogProbability(x));
if (x0 < x1) {
while (x != x1) {
x++;
- ret += Math.exp(logProbability(x, p, q));
+ ret += Math.exp(computeLogProbability(x));
}
} else {
while (x != x1) {
x--;
- ret += Math.exp(logProbability(x, p, q));
+ ret += Math.exp(computeLogProbability(x));
}
}
return ret;
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LaplaceDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LaplaceDistribution.java
index d77b340..efccfd4 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LaplaceDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LaplaceDistribution.java
@@ -26,6 +26,8 @@ public class LaplaceDistribution extends AbstractContinuousDistribution {
private final double mu;
/** The scale parameter. */
private final double beta;
+ /** log(2 * beta). */
+ private final double log2beta;
/**
* Creates a distribution.
@@ -42,6 +44,7 @@ public class LaplaceDistribution extends AbstractContinuousDistribution {
this.mu = mu;
this.beta = beta;
+ log2beta = Math.log(2.0 * beta);
}
/**
@@ -71,7 +74,7 @@ public class LaplaceDistribution extends AbstractContinuousDistribution {
/** {@inheritDoc} */
@Override
public double logDensity(double x) {
- return -Math.abs(x - mu) / beta - Math.log(2.0 * beta);
+ return -Math.abs(x - mu) / beta - log2beta;
}
/** {@inheritDoc} */
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
index db838b2..3dabb44 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
@@ -37,6 +37,10 @@ public class NakagamiDistribution extends AbstractContinuousDistribution {
private final double mu;
/** The scale parameter. */
private final double omega;
+ /** Density prefactor. */
+ private final double densityPrefactor;
+ /** Log density prefactor. */
+ private final double logDensityPrefactor;
/**
* Creates a distribution.
@@ -57,6 +61,8 @@ public class NakagamiDistribution extends AbstractContinuousDistribution {
this.mu = mu;
this.omega = omega;
+ densityPrefactor = 2.0 * Math.pow(mu, mu) / (Gamma.value(mu) * Math.pow(omega, mu));
+ logDensityPrefactor = LN_2 + Math.log(mu) * mu - LogGamma.value(mu) - Math.log(omega) * mu;
}
/**
@@ -85,8 +91,7 @@ public class NakagamiDistribution extends AbstractContinuousDistribution {
return 0;
}
- return 2.0 * Math.pow(mu, mu) / (Gamma.value(mu) * Math.pow(omega, mu)) *
- Math.pow(x, 2 * mu - 1) * Math.exp(-mu * x * x / omega);
+ return densityPrefactor * Math.pow(x, 2 * mu - 1) * Math.exp(-mu * x * x / omega);
}
/** {@inheritDoc} */
@@ -97,8 +102,7 @@ public class NakagamiDistribution extends AbstractContinuousDistribution {
return Double.NEGATIVE_INFINITY;
}
- return LN_2 + Math.log(mu) * mu - LogGamma.value(mu) - Math.log(omega) * mu +
- Math.log(x) * (2 * mu - 1) - (mu * x * x / omega);
+ return logDensityPrefactor + Math.log(x) * (2 * mu - 1) - (mu * x * x / omega);
}
/** {@inheritDoc} */
@@ -155,5 +159,4 @@ public class NakagamiDistribution extends AbstractContinuousDistribution {
public boolean isSupportConnected() {
return true;
}
-
}
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 37213ec..81345e4 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
@@ -36,6 +36,8 @@ public class NormalDistribution extends AbstractContinuousDistribution {
private final double standardDeviation;
/** The value of {@code log(sd) + 0.5*log(2*pi)} stored for faster computation. */
private final double logStandardDeviationPlusHalfLog2Pi;
+ /** Standard deviation multiplied by sqrt(2). */
+ private final double sdSqrt2;
/**
* Creates a distribution.
@@ -53,6 +55,7 @@ public class NormalDistribution extends AbstractContinuousDistribution {
this.mean = mean;
standardDeviation = sd;
logStandardDeviationPlusHalfLog2Pi = Math.log(sd) + 0.5 * Math.log(2 * Math.PI);
+ sdSqrt2 = sd * SQRT2;
}
/**
@@ -91,7 +94,7 @@ public class NormalDistribution extends AbstractContinuousDistribution {
if (Math.abs(dev) > 40 * standardDeviation) {
return dev < 0 ? 0.0d : 1.0d;
}
- return 0.5 * Erfc.value(-dev / (standardDeviation * SQRT2));
+ return 0.5 * Erfc.value(-dev / sdSqrt2);
}
/** {@inheritDoc} */
@@ -101,7 +104,7 @@ public class NormalDistribution extends AbstractContinuousDistribution {
if (Math.abs(dev) > 40 * standardDeviation) {
return dev > 0 ? 0.0d : 1.0d;
}
- return 0.5 * Erfc.value(dev / (standardDeviation * SQRT2));
+ return 0.5 * Erfc.value(dev / sdSqrt2);
}
/** {@inheritDoc} */
@@ -111,7 +114,7 @@ public class NormalDistribution extends AbstractContinuousDistribution {
p > 1) {
throw new DistributionException(DistributionException.INVALID_PROBABILITY, p);
}
- return mean + standardDeviation * SQRT2 * InverseErf.value(2 * p - 1);
+ return mean + sdSqrt2 * InverseErf.value(2 * p - 1);
}
/** {@inheritDoc} */
@@ -122,9 +125,8 @@ public class NormalDistribution extends AbstractContinuousDistribution {
throw new DistributionException(DistributionException.INVALID_RANGE_LOW_GT_HIGH,
x0, x1);
}
- final double denom = standardDeviation * SQRT2;
- final double v0 = (x0 - mean) / denom;
- final double v1 = (x1 - mean) / denom;
+ final double v0 = (x0 - mean) / sdSqrt2;
+ final double v1 = (x1 - mean) / sdSqrt2;
return 0.5 * ErfDifference.value(v0, v1);
}
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ParetoDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ParetoDistribution.java
index 51bff39..0b52626 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ParetoDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ParetoDistribution.java
@@ -42,6 +42,10 @@ public class ParetoDistribution extends AbstractContinuousDistribution {
private final double scale;
/** The shape parameter of this distribution. */
private final double shape;
+ /** shape * scale^shape. */
+ private final double shapeByScalePowShape;
+ /** log(shape) + shape * log(scale). */
+ private final double logShapePlusShapeByLogScale;
/**
* Creates a Pareto distribution.
@@ -62,6 +66,8 @@ public class ParetoDistribution extends AbstractContinuousDistribution {
this.scale = scale;
this.shape = shape;
+ shapeByScalePowShape = shape * Math.pow(scale, shape);
+ logShapePlusShapeByLogScale = Math.log(shape) + Math.log(scale) * shape;
}
/**
@@ -97,7 +103,7 @@ public class ParetoDistribution extends AbstractContinuousDistribution {
if (x < scale) {
return 0;
}
- return Math.pow(scale, shape) / Math.pow(x, shape + 1) * shape;
+ return shapeByScalePowShape / Math.pow(x, shape + 1);
}
/** {@inheritDoc}
@@ -109,7 +115,7 @@ public class ParetoDistribution extends AbstractContinuousDistribution {
if (x < scale) {
return Double.NEGATIVE_INFINITY;
}
- return Math.log(scale) * shape - Math.log(x) * (shape + 1) + Math.log(shape);
+ return logShapePlusShapeByLogScale - Math.log(x) * (shape + 1);
}
/**
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PascalDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PascalDistribution.java
index f62e85d..50b19bb 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PascalDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PascalDistribution.java
@@ -51,12 +51,15 @@ public class PascalDistribution extends AbstractDiscreteDistribution {
private final int numberOfSuccesses;
/** The probability of success. */
private final double probabilityOfSuccess;
- /** The value of {@code log(p)}, where {@code p} is the probability of success,
- * stored for faster computation. */
- private final double logProbabilityOfSuccess;
+ /** The value of {@code log(p) * n}, where {@code p} is the probability of success
+ * and {@code n} is the number of successes, stored for faster computation. */
+ private final double logProbabilityOfSuccessByNumOfSuccesses;
/** The value of {@code log(1-p)}, where {@code p} is the probability of success,
* stored for faster computation. */
private final double log1mProbabilityOfSuccess;
+ /** The value of {@code p^n}, where {@code p} is the probability of success
+ * and {@code n} is the number of successes, stored for faster computation. */
+ private final double probabilityOfSuccessPowNumOfSuccesses;
/**
* Create a Pascal distribution with the given number of successes and
@@ -70,8 +73,7 @@ public class PascalDistribution extends AbstractDiscreteDistribution {
public PascalDistribution(int r,
double p) {
if (r <= 0) {
- throw new DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
- r);
+ throw new DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, r);
}
if (p < 0 ||
p > 1) {
@@ -80,8 +82,9 @@ public class PascalDistribution extends AbstractDiscreteDistribution {
numberOfSuccesses = r;
probabilityOfSuccess = p;
- logProbabilityOfSuccess = Math.log(p);
+ logProbabilityOfSuccessByNumOfSuccesses = Math.log(p) * numberOfSuccesses;
log1mProbabilityOfSuccess = Math.log1p(-p);
+ probabilityOfSuccessPowNumOfSuccesses = Math.pow(probabilityOfSuccess, numberOfSuccesses);
}
/**
@@ -109,16 +112,15 @@ public class PascalDistribution extends AbstractDiscreteDistribution {
return 0.0;
} else if (x == 0) {
// Special case exploiting cancellation.
- return Math.pow(probabilityOfSuccess, numberOfSuccesses);
+ return probabilityOfSuccessPowNumOfSuccesses;
}
final int n = x + numberOfSuccesses - 1;
if (n < 0) {
// overflow
- // The binomial coefficient -> inf when n -> inf
return 0.0;
}
return BinomialCoefficientDouble.value(n, numberOfSuccesses - 1) *
- Math.pow(probabilityOfSuccess, numberOfSuccesses) *
+ probabilityOfSuccessPowNumOfSuccesses *
Math.pow(1.0 - probabilityOfSuccess, x);
}
@@ -129,17 +131,16 @@ public class PascalDistribution extends AbstractDiscreteDistribution {
return Double.NEGATIVE_INFINITY;
} else if (x == 0) {
// Special case exploiting cancellation.
- return logProbabilityOfSuccess * numberOfSuccesses;
+ return logProbabilityOfSuccessByNumOfSuccesses;
}
final int n = x + numberOfSuccesses - 1;
if (n < 0) {
// overflow
- // The binomial coefficient -> inf when n -> inf
return Double.NEGATIVE_INFINITY;
}
return LogBinomialCoefficient.value(x +
numberOfSuccesses - 1, numberOfSuccesses - 1) +
- logProbabilityOfSuccess * numberOfSuccesses +
+ logProbabilityOfSuccessByNumOfSuccesses +
log1mProbabilityOfSuccess * x;
}
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PoissonDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PoissonDistribution.java
index bef39c6..f470486 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PoissonDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PoissonDistribution.java
@@ -24,8 +24,8 @@ import org.apache.commons.rng.sampling.distribution.PoissonSampler;
* Implementation of the <a href="http://en.wikipedia.org/wiki/Poisson_distribution">Poisson distribution</a>.
*/
public class PoissonDistribution extends AbstractDiscreteDistribution {
- /** ln(2 π). */
- private static final double LOG_TWO_PI = Math.log(2 * Math.PI);
+ /** 0.5 * ln(2 π). */
+ private static final double HALF_LOG_TWO_PI = 0.5 * Math.log(2 * Math.PI);
/** Default maximum number of iterations. */
private static final int DEFAULT_MAX_ITERATIONS = 10000000;
/** Default convergence criterion. */
@@ -88,7 +88,7 @@ public class PoissonDistribution extends AbstractDiscreteDistribution {
}
return -SaddlePointExpansionUtils.getStirlingError(x) -
SaddlePointExpansionUtils.getDeviancePart(x, mean) -
- 0.5 * LOG_TWO_PI - 0.5 * Math.log(x);
+ HALF_LOG_TWO_PI - 0.5 * Math.log(x);
}
/** {@inheritDoc} */
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 0552ce5..1a6a5f7 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
@@ -30,6 +30,12 @@ public class TriangularDistribution extends AbstractContinuousDistribution {
private final double b;
/** Mode of this distribution. */
private final double c;
+ /** Cached value ((b - a) * (c - a). */
+ private final double divisor1;
+ /** Cached value ((b - a) * (b - c)). */
+ private final double divisor2;
+ /** Cumulative probability at the mode. */
+ private final double cdfMode;
/**
* Creates a distribution.
@@ -59,6 +65,9 @@ public class TriangularDistribution extends AbstractContinuousDistribution {
this.a = a;
this.c = c;
this.b = b;
+ divisor1 = (b - a) * (c - a);
+ divisor2 = (b - a) * (b - c);
+ cdfMode = (c - a) / (b - a);
}
/**
@@ -89,16 +98,14 @@ public class TriangularDistribution extends AbstractContinuousDistribution {
}
if (x < c) {
final double divident = 2 * (x - a);
- final double divisor = (b - a) * (c - a);
- return divident / divisor;
+ return divident / divisor1;
}
if (x == c) {
return 2 / (b - a);
}
if (x <= b) {
final double divident = 2 * (b - x);
- final double divisor = (b - a) * (b - c);
- return divident / divisor;
+ return divident / divisor2;
}
return 0;
}
@@ -123,16 +130,14 @@ public class TriangularDistribution extends AbstractContinuousDistribution {
}
if (x < c) {
final double divident = (x - a) * (x - a);
- final double divisor = (b - a) * (c - a);
- return divident / divisor;
+ return divident / divisor1;
}
if (x == c) {
- return (c - a) / (b - a);
+ return cdfMode;
}
if (x <= b) {
final double divident = (b - x) * (b - x);
- final double divisor = (b - a) * (b - c);
- return 1 - (divident / divisor);
+ return 1 - (divident / divisor2);
}
return 1;
}
@@ -210,9 +215,9 @@ public class TriangularDistribution extends AbstractContinuousDistribution {
if (p == 1) {
return b;
}
- if (p < (c - a) / (b - a)) {
- return a + Math.sqrt(p * (b - a) * (c - a));
+ if (p < cdfMode) {
+ return a + Math.sqrt(p * divisor1);
}
- return b - Math.sqrt((1 - p) * (b - a) * (b - c));
+ return b - Math.sqrt((1 - p) * divisor2);
}
}
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
index 74926de..a38b75f 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
@@ -46,6 +46,10 @@ public class TruncatedNormalDistribution extends AbstractContinuousDistribution
* for faster computations.
*/
private final double cdfDelta;
+ /** parentSd * cdfDelta. */
+ private final double parentSdByCdfDelta;
+ /** log(parentSd * cdfDelta). */
+ private final double logParentSdByCdfDelta;
/**
* Creates a truncated normal distribution.
@@ -80,6 +84,9 @@ public class TruncatedNormalDistribution extends AbstractContinuousDistribution
cdfAlpha = standardNormal.cumulativeProbability(alpha);
cdfDelta = cdfBeta - cdfAlpha;
+ parentSdByCdfDelta = parentSd * cdfDelta;
+ logParentSdByCdfDelta = Math.log(parentSdByCdfDelta);
+
// Calculation of variance and mean.
final double pdfAlpha = standardNormal.density(alpha);
final double pdfBeta = standardNormal.density(beta);
@@ -117,7 +124,7 @@ public class TruncatedNormalDistribution extends AbstractContinuousDistribution
if (x < lower || x > upper) {
return 0;
}
- return standardNormal.density((x - parentMean) / parentSd) / (parentSd * cdfDelta);
+ return standardNormal.density((x - parentMean) / parentSd) / parentSdByCdfDelta;
}
/** {@inheritDoc} */
@@ -126,7 +133,7 @@ public class TruncatedNormalDistribution extends AbstractContinuousDistribution
if (x < lower || x > upper) {
return Double.NEGATIVE_INFINITY;
}
- return standardNormal.logDensity((x - parentMean) / parentSd) - Math.log(parentSd * cdfDelta);
+ return standardNormal.logDensity((x - parentMean) / parentSd) - logParentSdByCdfDelta;
}
/** {@inheritDoc} */
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/UniformContinuousDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/UniformContinuousDistribution.java
index 397a756..98ff5bc 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/UniformContinuousDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/UniformContinuousDistribution.java
@@ -30,6 +30,10 @@ public class UniformContinuousDistribution extends AbstractContinuousDistributio
private final double upper;
/** Range between the upper and lower bound of this distribution (cached for computaions). */
private final double upperMinusLower;
+ /** Cache of the density. */
+ private final double pdf;
+ /** Cache of the log density. */
+ private final double logPdf;
/**
* Creates a uniform distribution.
@@ -48,6 +52,8 @@ public class UniformContinuousDistribution extends AbstractContinuousDistributio
this.lower = lower;
this.upper = upper;
upperMinusLower = upper - lower;
+ pdf = 1.0 / upperMinusLower;
+ logPdf = -Math.log(upperMinusLower);
}
/** {@inheritDoc} */
@@ -57,7 +63,7 @@ public class UniformContinuousDistribution extends AbstractContinuousDistributio
x > upper) {
return 0;
}
- return 1.0 / upperMinusLower;
+ return pdf;
}
/** {@inheritDoc} */
@@ -67,7 +73,7 @@ public class UniformContinuousDistribution extends AbstractContinuousDistributio
x > upper) {
return Double.NEGATIVE_INFINITY;
}
- return -Math.log(upperMinusLower);
+ return logPdf;
}
/** {@inheritDoc} */
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/UniformDiscreteDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/UniformDiscreteDistribution.java
index 7a3e691..eb69885 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/UniformDiscreteDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/UniformDiscreteDistribution.java
@@ -31,6 +31,10 @@ public class UniformDiscreteDistribution extends AbstractDiscreteDistribution {
private final int upper;
/** "upper" - "lower" + 1 (as a double to avoid overflow). */
private final double upperMinusLowerPlus1;
+ /** Cache of the probability. */
+ private final double pmf;
+ /** Cache of the log probability. */
+ private final double logPmf;
/**
* Creates a new uniform integer distribution using the given lower and
@@ -49,6 +53,8 @@ public class UniformDiscreteDistribution extends AbstractDiscreteDistribution {
this.lower = lower;
this.upper = upper;
upperMinusLowerPlus1 = (double) upper - (double) lower + 1;
+ pmf = 1.0 / upperMinusLowerPlus1;
+ logPmf = -Math.log(upperMinusLowerPlus1);
}
/** {@inheritDoc} */
@@ -57,7 +63,16 @@ public class UniformDiscreteDistribution extends AbstractDiscreteDistribution {
if (x < lower || x > upper) {
return 0;
}
- return 1.0 / upperMinusLowerPlus1;
+ return pmf;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public double logProbability(int x) {
+ if (x < lower || x > upper) {
+ return Double.NEGATIVE_INFINITY;
+ }
+ return logPmf;
}
/** {@inheritDoc} */
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/WeibullDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/WeibullDistribution.java
index 1ba499c..a488c85 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/WeibullDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/WeibullDistribution.java
@@ -37,6 +37,10 @@ public class WeibullDistribution extends AbstractContinuousDistribution {
private final double shape;
/** The scale parameter. */
private final double scale;
+ /** shape / scale. */
+ private final double shapeOverScale;
+ /** log(shape / scale). */
+ private final double logShapeOverScale;
/**
* Creates a distribution.
@@ -57,6 +61,8 @@ public class WeibullDistribution extends AbstractContinuousDistribution {
}
scale = beta;
shape = alpha;
+ shapeOverScale = shape / scale;
+ logShapeOverScale = Math.log(shapeOverScale);
}
/**
@@ -95,7 +101,7 @@ public class WeibullDistribution extends AbstractContinuousDistribution {
*/
final double xscalepowshape = xscalepow * xscale;
- return (shape / scale) * xscalepow * Math.exp(-xscalepowshape);
+ return shapeOverScale * xscalepow * Math.exp(-xscalepowshape);
}
/** {@inheritDoc} */
@@ -116,7 +122,7 @@ public class WeibullDistribution extends AbstractContinuousDistribution {
*/
final double xscalepowshape = Math.exp(logxscalepow) * xscale;
- return Math.log(shape / scale) + logxscalepow - xscalepowshape;
+ return logShapeOverScale + logxscalepow - xscalepowshape;
}
/** {@inheritDoc} */
@@ -226,4 +232,3 @@ public class WeibullDistribution extends AbstractContinuousDistribution {
return true;
}
}
-
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ZipfDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ZipfDistribution.java
index 389feb3..7b6234a 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ZipfDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ZipfDistribution.java
@@ -41,7 +41,7 @@ public class ZipfDistribution extends AbstractDiscreteDistribution {
private final int numberOfElements;
/** Exponent parameter of the distribution. */
private final double exponent;
- /** Cached values of the nth generalized harmonic. */
+ /** Cached value of the nth generalized harmonic. */
private final double nthHarmonic;
/**
[commons-statistics] 02/05: Remove probabilty method from
ContinuousDistribution
Posted by ah...@apache.org.
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 2decb7f6b68d344ca2745fc32879fdcac0389bf8
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Sun Aug 1 19:19:32 2021 +0100
Remove probabilty method from ContinuousDistribution
This is not implemented by any distribution.
---
.../distribution/ContinuousDistribution.java | 13 ----
.../AbstractContinuousDistributionTest.java | 10 ---
.../ContinuousDistributionAbstractTest.java | 84 ----------------------
.../distribution/ContinuousDistributionTest.java | 3 -
4 files changed, 110 deletions(-)
diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ContinuousDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ContinuousDistribution.java
index 1894e0e..2b963d8 100644
--- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ContinuousDistribution.java
+++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ContinuousDistribution.java
@@ -24,19 +24,6 @@ import org.apache.commons.rng.UniformRandomProvider;
public interface ContinuousDistribution {
/**
* For a random variable {@code X} whose values are distributed according
- * to this distribution, this method returns {@code P(X = x)}.
- * In other words, this method represents the probability mass function
- * (PMF) for the distribution.
- *
- * @param x Point at which the PMF is evaluated.
- * @return the value of the probability mass function at point {@code x}.
- */
- default double probability(double x) {
- return 0;
- }
-
- /**
- * For a random variable {@code X} whose values are distributed according
* to this distribution, this method returns {@code P(x0 < X <= x1)}.
* The default implementation uses the identity
* {@code P(x0 < X <= x1) = P(X <= x1) - P(X <= x0)}
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/AbstractContinuousDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/AbstractContinuousDistributionTest.java
index eb3603d..059a0bb 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/AbstractContinuousDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/AbstractContinuousDistributionTest.java
@@ -94,11 +94,6 @@ class AbstractContinuousDistributionTest {
public boolean isSupportConnected() {
return false;
}
-
- @Override
- public double probability(final double x) {
- throw new UnsupportedOperationException();
- }
};
final double expected = x1;
final double actual = distribution.inverseCumulativeProbability(p12);
@@ -193,11 +188,6 @@ class AbstractContinuousDistributionTest {
public boolean isSupportConnected() {
return false;
}
-
- @Override
- public double probability(final double x) {
- throw new UnsupportedOperationException();
- }
};
final double expected = x2;
final double actual = distribution.inverseCumulativeProbability(p23);
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
index f04523e..59e13cb 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
@@ -91,14 +91,6 @@ abstract class ContinuousDistributionAbstractTest {
/** Tolerance used in high precision tests. */
private double highPrecisionTolerance = 1e-22;
- /** Arguments used to test probability calculations. */
- private double[] probabilityTestPoints;
-
- /** Values used to test probability calculations. */
- private double[] probabilityTestValues;
-
- // No log probability in the ContinuousDistribution interface
-
/** Values used to test density calculations.
*
* <p>Note: The ContinuousDistribution interface defines the density as the gradient
@@ -138,32 +130,6 @@ abstract class ContinuousDistributionAbstractTest {
/** Creates the default continuous distribution instance to use in tests. */
public abstract ContinuousDistribution makeDistribution();
- /** Creates the default probability test input values.
- *
- * <p>Distributions that evaluate a non-zero probability (i.e. override the
- * interface default method {@link ContinuousDistribution#probability(double)} should
- * define points to test.
- */
- public double[] makeProbabilityTestPoints() {
- return EMPTY_DOUBLE_ARRAY;
- }
-
- /** Creates the default probability test expected values. */
- public double[] makeProbabilityTestValues() {
- return EMPTY_DOUBLE_ARRAY;
- }
-
- /** Creates the default logarithmic probability density test expected values.
- *
- * <p>The default implementation simply computes the logarithm of all the values in
- * {@link #makeProbabilityTestValues()}.
- *
- * @return the default logarithmic probability density test expected values.
- */
- public double[] makeLogProbabilityTestValues() {
- return Arrays.stream(makeProbabilityTestValues()).map(Math::log).toArray();
- }
-
/** Creates the default density test expected values. */
public abstract double[] makeDensityTestValues();
@@ -235,8 +201,6 @@ abstract class ContinuousDistributionAbstractTest {
@BeforeEach
void setUp() {
distribution = makeDistribution();
- probabilityTestPoints = makeProbabilityTestPoints();
- probabilityTestValues = makeProbabilityTestValues();
densityTestValues = makeDensityTestValues();
logDensityTestValues = makeLogDensityTestValues();
cumulativeTestPoints = makeCumulativeTestPoints();
@@ -255,8 +219,6 @@ abstract class ContinuousDistributionAbstractTest {
@AfterEach
void tearDown() {
distribution = null;
- probabilityTestPoints = null;
- probabilityTestValues = null;
densityTestValues = null;
logDensityTestValues = null;
cumulativeTestPoints = null;
@@ -272,19 +234,6 @@ abstract class ContinuousDistributionAbstractTest {
//-------------------- Verification methods -------------------------------
/**
- * Verifies that probability calculations match expected values
- * using current test instance data.
- */
- protected void verifyProbabilities() {
- for (int i = 0; i < probabilityTestPoints.length; i++) {
- final double x = probabilityTestPoints[i];
- Assertions.assertEquals(probabilityTestValues[i],
- distribution.probability(x), getTolerance(),
- () -> "Incorrect probability value returned for " + x);
- }
- }
-
- /**
* Verifies that density calculations match expected values
* using current test instance data.
*/
@@ -412,11 +361,6 @@ abstract class ContinuousDistributionAbstractTest {
//------------------------ Default test cases -----------------------------
@Test
- void testProbabilities() {
- verifyProbabilities();
- }
-
- @Test
void testDensities() {
verifyDensities();
}
@@ -634,34 +578,6 @@ abstract class ContinuousDistributionAbstractTest {
}
/**
- * @return Returns the probabilityTestPoints.
- */
- protected double[] getProbabilityTestPoints() {
- return probabilityTestPoints;
- }
-
- /**
- * @param probabilityTestPoints The probabilityTestPoints to set.
- */
- protected void setProbabilityTestPoints(double[] probabilityTestPoints) {
- this.probabilityTestPoints = probabilityTestPoints;
- }
-
- /**
- * @return Returns the probabilityTestValues.
- */
- protected double[] getProbabilityTestValues() {
- return probabilityTestValues;
- }
-
- /**
- * @param probabilityTestValues The probabilityTestValues to set.
- */
- protected void setProbabilityTestValues(double[] probabilityTestValues) {
- this.probabilityTestValues = probabilityTestValues;
- }
-
- /**
* @return Returns the densityTestValues.
*/
protected double[] getDensityTestValues() {
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionTest.java
index da3b3aa..8158a16 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionTest.java
@@ -75,9 +75,6 @@ class ContinuousDistributionTest {
for (final double x : new double[] {Double.NaN, Double.POSITIVE_INFINITY,
Double.NEGATIVE_INFINITY, 0, 1, 0.123}) {
- // Always zero
- Assertions.assertEquals(0, dist.probability(x));
-
// Return the log of the density
Assertions.assertEquals(Math.log(x), dist.logDensity(x));
}