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 dfba5419513aa48be77d078e60cd704412cee3bb Author: Alex Herbert <aherb...@apache.org> AuthorDate: Fri Jul 30 22:56:32 2021 +0100 Add explicit logDensity computation Added to distributions to avoid a round trip of exponential and then logarithm: - Gumbel - Laplace - TruncatedNormal - UniformContinous --- .../commons/statistics/distribution/GumbelDistribution.java | 13 ++++++++++++- .../statistics/distribution/LaplaceDistribution.java | 6 ++++++ .../distribution/TruncatedNormalDistribution.java | 9 +++++++++ .../distribution/UniformContinuousDistribution.java | 10 ++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GumbelDistribution.java b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GumbelDistribution.java index 812ad8e..fc9551a 100644 --- a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GumbelDistribution.java +++ b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GumbelDistribution.java @@ -85,6 +85,18 @@ public class GumbelDistribution extends AbstractContinuousDistribution { /** {@inheritDoc} */ @Override + public double logDensity(double x) { + if (x <= SUPPORT_LO) { + return Double.NEGATIVE_INFINITY; + } + + final double z = (x - mu) / beta; + final double t = Math.exp(-z); + return -z - t - Math.log(beta); + } + + /** {@inheritDoc} */ + @Override public double cumulativeProbability(double x) { final double z = (x - mu) / beta; return Math.exp(-Math.exp(-z)); @@ -139,5 +151,4 @@ public class GumbelDistribution extends AbstractContinuousDistribution { public boolean isSupportConnected() { return true; } - } 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 f6deeae..d77b340 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 @@ -70,6 +70,12 @@ public class LaplaceDistribution extends AbstractContinuousDistribution { /** {@inheritDoc} */ @Override + public double logDensity(double x) { + return -Math.abs(x - mu) / beta - Math.log(2.0 * beta); + } + + /** {@inheritDoc} */ + @Override public double cumulativeProbability(double x) { if (x <= mu) { return Math.exp((x - mu) / beta) / 2.0; 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 29a2afb..74926de 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 @@ -122,6 +122,15 @@ public class TruncatedNormalDistribution extends AbstractContinuousDistribution /** {@inheritDoc} */ @Override + public double logDensity(double x) { + if (x < lower || x > upper) { + return Double.NEGATIVE_INFINITY; + } + return standardNormal.logDensity((x - parentMean) / parentSd) - Math.log(parentSd * cdfDelta); + } + + /** {@inheritDoc} */ + @Override public double cumulativeProbability(double x) { if (x <= lower) { return 0; 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 357a2bc..397a756 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 @@ -62,6 +62,16 @@ public class UniformContinuousDistribution extends AbstractContinuousDistributio /** {@inheritDoc} */ @Override + public double logDensity(double x) { + if (x < lower || + x > upper) { + return Double.NEGATIVE_INFINITY; + } + return -Math.log(upperMinusLower); + } + + /** {@inheritDoc} */ + @Override public double cumulativeProbability(double x) { if (x <= lower) { return 0;