You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2018/01/25 19:07:08 UTC
[20/21] [math] MATH-1443: Depend on "Commons Statistics".
MATH-1443: Depend on "Commons Statistics".
Simplify classes that remain in "Commons Math".
Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/4e931386
Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/4e931386
Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/4e931386
Branch: refs/heads/master
Commit: 4e931386569c0a28b7e47c52d199aa32b6ca32fe
Parents: b1a8299
Author: Gilles <er...@apache.org>
Authored: Thu Jan 25 19:34:16 2018 +0100
Committer: Gilles <er...@apache.org>
Committed: Thu Jan 25 19:34:16 2018 +0100
----------------------------------------------------------------------
.../AbstractIntegerDistribution.java | 8 +-
.../EnumeratedIntegerDistribution.java | 9 +-
.../math4/distribution/IntegerDistribution.java | 144 +------------------
.../AbstractIntegerDistributionTest.java | 4 +-
.../EnumeratedIntegerDistributionTest.java | 11 +-
5 files changed, 18 insertions(+), 158 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-math/blob/4e931386/src/main/java/org/apache/commons/math4/distribution/AbstractIntegerDistribution.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/distribution/AbstractIntegerDistribution.java b/src/main/java/org/apache/commons/math4/distribution/AbstractIntegerDistribution.java
index 99f0060..b9f0b0e 100644
--- a/src/main/java/org/apache/commons/math4/distribution/AbstractIntegerDistribution.java
+++ b/src/main/java/org/apache/commons/math4/distribution/AbstractIntegerDistribution.java
@@ -93,8 +93,8 @@ public abstract class AbstractIntegerDistribution implements IntegerDistribution
// use the one-sided Chebyshev inequality to narrow the bracket
// cf. AbstractRealDistribution.inverseCumulativeProbability(double)
- final double mu = getNumericalMean();
- final double sigma = FastMath.sqrt(getNumericalVariance());
+ final double mu = getMean();
+ final double sigma = FastMath.sqrt(getVariance());
final boolean chebyshevApplies = !(Double.isInfinite(mu) || Double.isNaN(mu) ||
Double.isInfinite(sigma) || Double.isNaN(sigma) || sigma == 0.0);
if (chebyshevApplies) {
@@ -197,8 +197,8 @@ public abstract class AbstractIntegerDistribution implements IntegerDistribution
/**{@inheritDoc} */
@Override
- public Sampler createSampler(final UniformRandomProvider rng) {
- return new IntegerDistribution.Sampler() {
+ public DiscreteDistribution.Sampler createSampler(final UniformRandomProvider rng) {
+ return new DiscreteDistribution.Sampler() {
/**
* Inversion method distribution sampler.
*/
http://git-wip-us.apache.org/repos/asf/commons-math/blob/4e931386/src/main/java/org/apache/commons/math4/distribution/EnumeratedIntegerDistribution.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/distribution/EnumeratedIntegerDistribution.java b/src/main/java/org/apache/commons/math4/distribution/EnumeratedIntegerDistribution.java
index 25ef0f2..fd0d311 100644
--- a/src/main/java/org/apache/commons/math4/distribution/EnumeratedIntegerDistribution.java
+++ b/src/main/java/org/apache/commons/math4/distribution/EnumeratedIntegerDistribution.java
@@ -22,6 +22,7 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import org.apache.commons.statistics.distribution.DiscreteDistribution;
import org.apache.commons.math4.exception.DimensionMismatchException;
import org.apache.commons.math4.exception.MathArithmeticException;
import org.apache.commons.math4.exception.NotANumberException;
@@ -150,7 +151,7 @@ public class EnumeratedIntegerDistribution extends AbstractIntegerDistribution {
* @return {@code sum(singletons[i] * probabilities[i])}
*/
@Override
- public double getNumericalMean() {
+ public double getMean() {
double mean = 0;
for (final Pair<Integer, Double> sample : innerDistribution.getPmf()) {
@@ -166,7 +167,7 @@ public class EnumeratedIntegerDistribution extends AbstractIntegerDistribution {
* @return {@code sum((singletons[i] - mean) ^ 2 * probabilities[i])}
*/
@Override
- public double getNumericalVariance() {
+ public double getVariance() {
double mean = 0;
double meanOfSquares = 0;
@@ -230,8 +231,8 @@ public class EnumeratedIntegerDistribution extends AbstractIntegerDistribution {
/** {@inheritDoc} */
@Override
- public IntegerDistribution.Sampler createSampler(final UniformRandomProvider rng) {
- return new IntegerDistribution.Sampler() {
+ public DiscreteDistribution.Sampler createSampler(final UniformRandomProvider rng) {
+ return new DiscreteDistribution.Sampler() {
/** Delegate. */
private final EnumeratedDistribution<Integer>.Sampler inner =
innerDistribution.createSampler(rng);
http://git-wip-us.apache.org/repos/asf/commons-math/blob/4e931386/src/main/java/org/apache/commons/math4/distribution/IntegerDistribution.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/math4/distribution/IntegerDistribution.java b/src/main/java/org/apache/commons/math4/distribution/IntegerDistribution.java
index 5d55f98..5ca3c54 100644
--- a/src/main/java/org/apache/commons/math4/distribution/IntegerDistribution.java
+++ b/src/main/java/org/apache/commons/math4/distribution/IntegerDistribution.java
@@ -24,146 +24,4 @@ import org.apache.commons.rng.UniformRandomProvider;
/**
* Interface for distributions on the integers.
*/
-public interface IntegerDistribution {
-
- /**
- * For a random variable {@code X} whose values are distributed according to
- * this distribution, this method returns {@code log(P(X = x))}, where
- * {@code log} is the natural logarithm. In other words, this method
- * represents the logarithm of the probability mass function (PMF) for the
- * distribution. Note that due to the floating point precision and
- * under/overflow issues, this method will for some distributions be more
- * precise and faster than computing the logarithm of
- * {@link #probability(int)}.
- *
- * @param x the point at which the PMF is evaluated
- * @return the logarithm of the value of the probability mass function at {@code x}
- * @since 4.0
- */
- double logProbability(int x);
-
- /**
- * 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 the point at which the PMF is evaluated
- * @return the value of the probability mass function at {@code x}
- */
- double probability(int x);
-
- /**
- * For a random variable {@code X} whose values are distributed according
- * to this distribution, this method returns {@code P(x0 < X <= x1)}.
- *
- * @param x0 the exclusive lower bound
- * @param x1 the inclusive upper bound
- * @return the probability that a random variable with this distribution
- * will take a value between {@code x0} and {@code x1},
- * excluding the lower and including the upper endpoint
- * @throws NumberIsTooLargeException if {@code x0 > x1}
- *
- * @since 4.0, was previously named cumulativeProbability
- */
- double probability(int x0, int x1) throws NumberIsTooLargeException;
-
- /**
- * 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 (cumulative) distribution function
- * (CDF) for this distribution.
- *
- * @param x the point at which the CDF is evaluated
- * @return the probability that a random variable with this
- * distribution takes a value less than or equal to {@code x}
- */
- double cumulativeProbability(int x);
-
- /**
- * Computes the quantile function of this distribution.
- * For a random variable {@code X} distributed according to this distribution,
- * the returned value is
- * <ul>
- * <li>{@code inf{x in Z | P(X<=x) >= p}} for {@code 0 < p <= 1},</li>
- * <li>{@code inf{x in Z | P(X<=x) > 0}} for {@code p = 0}.</li>
- * </ul>
- * If the result exceeds the range of the data type {@code int},
- * then {@code Integer.MIN_VALUE} or {@code Integer.MAX_VALUE} is returned.
- *
- * @param p the cumulative probability
- * @return the smallest {@code p}-quantile of this distribution
- * (largest 0-quantile for {@code p = 0})
- * @throws OutOfRangeException if {@code p < 0} or {@code p > 1}
- */
- int inverseCumulativeProbability(double p) throws OutOfRangeException;
-
- /**
- * Use this method to get the numerical value of the mean of this
- * distribution.
- *
- * @return the mean or {@code Double.NaN} if it is not defined
- */
- double getNumericalMean();
-
- /**
- * Use this method to get the numerical value of the variance of this
- * distribution.
- *
- * @return the variance (possibly {@code Double.POSITIVE_INFINITY} or
- * {@code Double.NaN} if it is not defined)
- */
- double getNumericalVariance();
-
- /**
- * Access the lower bound of the support. This method must return the same
- * value as {@code inverseCumulativeProbability(0)}. In other words, this
- * method must return
- * <p>{@code inf {x in Z | P(X <= x) > 0}}.</p>
- *
- * @return lower bound of the support ({@code Integer.MIN_VALUE}
- * for negative infinity)
- */
- int getSupportLowerBound();
-
- /**
- * Access the upper bound of the support. This method must return the same
- * value as {@code inverseCumulativeProbability(1)}. In other words, this
- * method must return
- * <p>{@code inf {x in R | P(X <= x) = 1}}.</p>
- *
- * @return upper bound of the support ({@code Integer.MAX_VALUE}
- * for positive infinity)
- */
- int getSupportUpperBound();
-
- /**
- * Use this method to get information about whether the support is
- * connected, i.e. whether all integers between the lower and upper bound of
- * the support are included in the support.
- *
- * @return whether the support is connected or not
- */
- boolean isSupportConnected();
-
- /**
- * Creates a sampler.
- *
- * @param rng Generator of uniformly distributed numbers.
- * @return a sampler that produces random numbers according this
- * distribution.
- */
- Sampler createSampler(UniformRandomProvider rng);
-
- /**
- * Sampling functionality.
- */
- interface Sampler extends DiscreteDistribution.Sampler {
- /**
- * Generates a random value sampled from this distribution.
- *
- * @return a random value.
- */
- int sample();
- }
-}
+public interface IntegerDistribution extends DiscreteDistribution {}
http://git-wip-us.apache.org/repos/asf/commons-math/blob/4e931386/src/test/java/org/apache/commons/math4/distribution/AbstractIntegerDistributionTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/math4/distribution/AbstractIntegerDistributionTest.java b/src/test/java/org/apache/commons/math4/distribution/AbstractIntegerDistributionTest.java
index 5643be3..2aeb2f6 100644
--- a/src/test/java/org/apache/commons/math4/distribution/AbstractIntegerDistributionTest.java
+++ b/src/test/java/org/apache/commons/math4/distribution/AbstractIntegerDistributionTest.java
@@ -104,12 +104,12 @@ public class AbstractIntegerDistributionTest {
}
@Override
- public double getNumericalMean() {
+ public double getMean() {
return 3.5;
}
@Override
- public double getNumericalVariance() {
+ public double getVariance() {
return 70/24; // E(X^2) - E(X)^2
}
http://git-wip-us.apache.org/repos/asf/commons-math/blob/4e931386/src/test/java/org/apache/commons/math4/distribution/EnumeratedIntegerDistributionTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/math4/distribution/EnumeratedIntegerDistributionTest.java b/src/test/java/org/apache/commons/math4/distribution/EnumeratedIntegerDistributionTest.java
index 439764a..0725e51 100644
--- a/src/test/java/org/apache/commons/math4/distribution/EnumeratedIntegerDistributionTest.java
+++ b/src/test/java/org/apache/commons/math4/distribution/EnumeratedIntegerDistributionTest.java
@@ -18,6 +18,7 @@ package org.apache.commons.math4.distribution;
import static org.junit.Assert.assertEquals;
+import org.apache.commons.statistics.distribution.DiscreteDistribution;
import org.apache.commons.math4.distribution.EnumeratedIntegerDistribution;
import org.apache.commons.math4.exception.DimensionMismatchException;
import org.apache.commons.math4.exception.MathArithmeticException;
@@ -117,7 +118,7 @@ public class EnumeratedIntegerDistributionTest {
*/
@Test
public void testGetNumericalMean() {
- Assert.assertEquals(3.4, testDistribution.getNumericalMean(), 1e-10);
+ Assert.assertEquals(3.4, testDistribution.getMean(), 1e-10);
}
/**
@@ -125,7 +126,7 @@ public class EnumeratedIntegerDistributionTest {
*/
@Test
public void testGetNumericalVariance() {
- Assert.assertEquals(7.84, testDistribution.getNumericalVariance(), 1e-10);
+ Assert.assertEquals(7.84, testDistribution.getVariance(), 1e-10);
}
/**
@@ -158,7 +159,7 @@ public class EnumeratedIntegerDistributionTest {
@Test
public void testSample() {
final int n = 1000000;
- final IntegerDistribution.Sampler sampler
+ final DiscreteDistribution.Sampler sampler
= testDistribution.createSampler(RandomSource.create(RandomSource.WELL_19937_C,
-334759360)); // fixed seed
final int[] samples = AbstractIntegerDistribution.sample(n, sampler);
@@ -169,9 +170,9 @@ public class EnumeratedIntegerDistributionTest {
sum += samples[i];
sumOfSquares += samples[i] * samples[i];
}
- Assert.assertEquals(testDistribution.getNumericalMean(),
+ Assert.assertEquals(testDistribution.getMean(),
sum / n, 1e-2);
- Assert.assertEquals(testDistribution.getNumericalVariance(),
+ Assert.assertEquals(testDistribution.getVariance(),
sumOfSquares / n - FastMath.pow(sum / n, 2), 1e-2);
}