From 0c4eaa92605af2d168cd948730dfb861602906e0 Mon Sep 17 00:00:00 2001 From: Lakshmi Krishnamurthy Date: Wed, 16 Aug 2023 00:27:27 -0400 Subject: [PATCH] Features: - Multi-dimensional Exponential Distribution Phasing (24, 25, 26) - Measure Exponential R^1 Scaled Distribution (48, 49, 50) - Expressing one Measure Using Another (51, 52, 53) - Exponential To R^1 Pareto Distribution (60) Bug Fixes/Re-organization: - Two Sum IID DIfferential Entropy #1 (9) - Two Sum IID DIfferential Entropy #2 (13, 14, 15) - Exponential Measure Composite R^1 IID (16, 17, 18) - Composite Order Statistics Joint Moment (19, 20, 21) - Exponential Measure Composite Distribution Rename (22, 23) - Phaseout of Univariate Exponential Distribution (27, 28) - Eliminate R^1 Exponential Univariate Distribution (46, 47) - Gamma To R^1 Exponential Distribution (54, 55, 56) - Gamma To Maxwell Boltzmann Distribution (57, 58, 59) Samples: - R^1 Two IID Significant Statistics #1 (1, 2, 3) - R^1 Two IID Significant Statistics #2 (4, 5, 6) - R^1 Two IID Significant Statistics #3 (7, 8) - R^1 Two IID Significant Statistics #4 (10, 11, 12) - R^1 Two IID Significant Statistics #5 (16, 17, 18) - R^1 Two IID Significant Statistics #6 (19, 20, 21) - Exponential Anderson Darling Gap Analysis (29, 30) - Exponential Anderson Darling Gap Discriminant (31, 32) - Exponential Cramers von Mises Gap Analysis (33, 34) - Exponential Cramers von Mises Gap Discriminant (35, 36) - Standard Exponential Significance Test (37, 38) - Standard Exponential T Test (39, 40) - Standard Exponential PIT (41, 42) - Standard Exponential T Statistic (43, 44, 45) IdeaDRIP: --- ReleaseNotes/12_27_2022.txt | 41 ++++ ScheduleSheet.xlsx | Bin 38267 -> 38813 bytes .../continuous/R1UnivariateExponential.java | 208 ------------------ ...OrderStatistics.java => IIDComposite.java} | 10 +- .../R1ScaledDistribution.java} | 115 ++++++---- .../drip/measure/exponential/TwoIIDSum.java | 17 +- .../GammaToMaxwellBoltzmannSquared.java} | 29 ++- .../GammaToR1Exponential.java} | 37 ++-- .../drip/measure/transform/package-info.java | 8 + ...ExponentialAndersonDarlingGapAnalysis.java | 4 +- ...nentialAndersonDarlingGapDiscriminant.java | 4 +- ...ExponentialCramersVonMisesGapAnalysis.java | 4 +- ...nentialCramersVonMisesGapDiscriminant.java | 4 +- .../R1OrderStatisticsJointMoment.java | 4 +- .../R1TwoIIDSignificantStatistics.java | 57 +---- .../MaxwellBoltzmannSquaredPDFEstimate.java | 14 +- .../StandardExponentialSignificanceTest.java | 6 +- .../StandardExponentialTTest.java | 6 +- .../StandardExponentialPIT.java | 6 +- .../StandardExponentialTStatistic.java | 19 +- .../KohlrauschPDFEstimate.java | 8 +- 21 files changed, 231 insertions(+), 370 deletions(-) create mode 100644 ReleaseNotes/12_27_2022.txt delete mode 100644 src/main/java/org/drip/measure/continuous/R1UnivariateExponential.java rename src/main/java/org/drip/measure/exponential/{CompositeR1OrderStatistics.java => IIDComposite.java} (95%) rename src/main/java/org/drip/measure/{continuous/R1UnivariateScaledExponential.java => exponential/R1ScaledDistribution.java} (73%) rename src/main/java/org/drip/measure/{gamma/MaxwellBoltzmannSquaredDistribution.java => transform/GammaToMaxwellBoltzmannSquared.java} (88%) rename src/main/java/org/drip/measure/{gamma/ExponentialDistribution.java => transform/GammaToR1Exponential.java} (86%) create mode 100644 src/main/java/org/drip/measure/transform/package-info.java diff --git a/ReleaseNotes/12_27_2022.txt b/ReleaseNotes/12_27_2022.txt new file mode 100644 index 000000000000..668b93b2eaf9 --- /dev/null +++ b/ReleaseNotes/12_27_2022.txt @@ -0,0 +1,41 @@ + +Features: + + - Multi-dimensional Exponential Distribution Phasing (24, 25, 26) + - Measure Exponential R^1 Scaled Distribution (48, 49, 50) + - Expressing one Measure Using Another (51, 52, 53) + - Exponential To R^1 Pareto Distribution (60) + + +Bug Fixes/Re-organization: + + - Two Sum IID DIfferential Entropy #1 (9) + - Two Sum IID DIfferential Entropy #2 (13, 14, 15) + - Exponential Measure Composite R^1 IID (16, 17, 18) + - Composite Order Statistics Joint Moment (19, 20, 21) + - Exponential Measure Composite Distribution Rename (22, 23) + - Phaseout of Univariate Exponential Distribution (27, 28) + - Eliminate R^1 Exponential Univariate Distribution (46, 47) + - Gamma To R^1 Exponential Distribution (54, 55, 56) + - Gamma To Maxwell Boltzmann Distribution (57, 58, 59) + + +Samples: + + - R^1 Two IID Significant Statistics #1 (1, 2, 3) + - R^1 Two IID Significant Statistics #2 (4, 5, 6) + - R^1 Two IID Significant Statistics #3 (7, 8) + - R^1 Two IID Significant Statistics #4 (10, 11, 12) + - R^1 Two IID Significant Statistics #5 (16, 17, 18) + - R^1 Two IID Significant Statistics #6 (19, 20, 21) + - Exponential Anderson Darling Gap Analysis (29, 30) + - Exponential Anderson Darling Gap Discriminant (31, 32) + - Exponential Cramers von Mises Gap Analysis (33, 34) + - Exponential Cramers von Mises Gap Discriminant (35, 36) + - Standard Exponential Significance Test (37, 38) + - Standard Exponential T Test (39, 40) + - Standard Exponential PIT (41, 42) + - Standard Exponential T Statistic (43, 44, 45) + + +IdeaDRIP: diff --git a/ScheduleSheet.xlsx b/ScheduleSheet.xlsx index a535ffd72d2caa087847959ab68c8671a94e1dfa..2f63a5979d8564c3b9b8c7f563cd234d71067e9d 100644 GIT binary patch delta 25687 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 DO4Giu delta 25136 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 DvQLjp diff --git a/src/main/java/org/drip/measure/continuous/R1UnivariateExponential.java b/src/main/java/org/drip/measure/continuous/R1UnivariateExponential.java deleted file mode 100644 index 86edb4b54d64..000000000000 --- a/src/main/java/org/drip/measure/continuous/R1UnivariateExponential.java +++ /dev/null @@ -1,208 +0,0 @@ - -package org.drip.measure.continuous; - -/* - * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - */ - -/*! - * Copyright (C) 2022 Lakshmi Krishnamurthy - * Copyright (C) 2021 Lakshmi Krishnamurthy - * Copyright (C) 2020 Lakshmi Krishnamurthy - * Copyright (C) 2019 Lakshmi Krishnamurthy - * - * This file is part of DROP, an open-source library targeting analytics/risk, transaction cost analytics, - * asset liability management analytics, capital, exposure, and margin analytics, valuation adjustment - * analytics, and portfolio construction analytics within and across fixed income, credit, commodity, - * equity, FX, and structured products. It also includes auxiliary libraries for algorithm support, - * numerical analysis, numerical optimization, spline builder, model validation, statistical learning, - * graph builder/navigator, and computational support. - * - * https://lakshmidrip.github.io/DROP/ - * - * DROP is composed of three modules: - * - * - DROP Product Core - https://lakshmidrip.github.io/DROP-Product-Core/ - * - DROP Portfolio Core - https://lakshmidrip.github.io/DROP-Portfolio-Core/ - * - DROP Computational Core - https://lakshmidrip.github.io/DROP-Computational-Core/ - * - * DROP Product Core implements libraries for the following: - * - Fixed Income Analytics - * - Loan Analytics - * - Transaction Cost Analytics - * - * DROP Portfolio Core implements libraries for the following: - * - Asset Allocation Analytics - * - Asset Liability Management Analytics - * - Capital Estimation Analytics - * - Exposure Analytics - * - Margin Analytics - * - XVA Analytics - * - * DROP Computational Core implements libraries for the following: - * - Algorithm Support - * - Computation Support - * - Function Analysis - * - Graph Algorithm - * - Model Validation - * - Numerical Analysis - * - Numerical Optimizer - * - Spline Builder - * - Statistical Learning - * - * Documentation for DROP is Spread Over: - * - * - Main => https://lakshmidrip.github.io/DROP/ - * - Wiki => https://github.com/lakshmiDRIP/DROP/wiki - * - GitHub => https://github.com/lakshmiDRIP/DROP - * - Repo Layout Taxonomy => https://github.com/lakshmiDRIP/DROP/blob/master/Taxonomy.md - * - Javadoc => https://lakshmidrip.github.io/DROP/Javadoc/index.html - * - Technical Specifications => https://github.com/lakshmiDRIP/DROP/tree/master/Docs/Internal - * - Release Versions => https://lakshmidrip.github.io/DROP/version.html - * - Community Credits => https://lakshmidrip.github.io/DROP/credits.html - * - Issues Catalog => https://github.com/lakshmiDRIP/DROP/issues - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * R1UnivariateExponential implements the Univariate R1 Exponential Distribution. It - * implements the Incremental, the Cumulative, and the Inverse Cumulative Distribution Densities. - * - *

- * - * - * @author Lakshmi Krishnamurthy - */ - -public class R1UnivariateExponential extends org.drip.measure.continuous.R1Univariate -{ - private double _lambda = java.lang.Double.NaN; - - /** - * Construct the Standard R1UnivariateExponential Distribution (lambda = 1.) - * - * @return The Standard R1UnivariateExponential Distribution - */ - - public static final R1UnivariateExponential Standard() - { - try - { - return new R1UnivariateExponential (1.); - } - catch (java.lang.Exception e) - { - e.printStackTrace(); - } - - return null; - } - - /** - * R1UnivariateExponential Constructor - * - * @param lambda Lambda (Inverse Scaling Parameter) - * - * @throws java.lang.Exception Thrown if the Inputs are Invalid - */ - - public R1UnivariateExponential ( - final double lambda) - throws java.lang.Exception - { - if (!org.drip.numerical.common.NumberUtil.IsValid (_lambda = lambda) || 0. >= _lambda) - { - throw new java.lang.Exception ("R1UnivariateExponential Constructor => Invalid Inputs: " + _lambda); - } - } - - /** - * Retrieve the Lambda (Inverse Scaling Parameter) - * - * @return The Lambda (Inverse Scaling Parameter) - */ - - public double lambda() - { - return _lambda; - } - - @Override public double[] support() - { - return new double[] - { - 0., - java.lang.Double.POSITIVE_INFINITY - }; - } - - @Override public double cumulative ( - final double x) - throws java.lang.Exception - { - if (!org.drip.numerical.common.NumberUtil.IsValid (x) || x < 0.) - throw new java.lang.Exception ("R1UnivariateExponential::cumulative => Invalid Inputs"); - - return 1. - java.lang.Math.exp (-1. * _lambda * x); - } - - @Override public double incremental ( - final double xLeft, - final double xRight) - throws java.lang.Exception - { - return cumulative (xLeft) - cumulative (xRight); - } - - @Override public double invCumulative ( - final double y) - throws java.lang.Exception - { - if (!org.drip.numerical.common.NumberUtil.IsValid (y) || 1. < y || 0. > y) - throw new java.lang.Exception ("R1UnivariateExponential::invCumulative => Cannot calculate"); - - return -1. / _lambda * java.lang.Math.log (1. - y); - } - - @Override public double density ( - final double x) - throws java.lang.Exception - { - if (!org.drip.numerical.common.NumberUtil.IsValid (x) || x < 0.) - throw new java.lang.Exception ("R1UnivariateExponential::density => Invalid Inputs"); - - return _lambda * java.lang.Math.exp (-1. * _lambda * x); - } - - @Override public double mean() - { - return 1. / _lambda; - } - - @Override public double variance() - { - return 1. / (_lambda * _lambda); - } - - @Override public org.drip.numerical.common.Array2D histogram() - { - return null; - } -} diff --git a/src/main/java/org/drip/measure/exponential/CompositeR1OrderStatistics.java b/src/main/java/org/drip/measure/exponential/IIDComposite.java similarity index 95% rename from src/main/java/org/drip/measure/exponential/CompositeR1OrderStatistics.java rename to src/main/java/org/drip/measure/exponential/IIDComposite.java index 2bbb6eafa1be..69955cd2e2ed 100644 --- a/src/main/java/org/drip/measure/exponential/CompositeR1OrderStatistics.java +++ b/src/main/java/org/drip/measure/exponential/IIDComposite.java @@ -74,8 +74,8 @@ */ /** - * CompositeR1OrderStatistics generates Metrics for the Order Statistics for a Composite Set of - * R1 Exponential Distributions. The References are: + * IIDComposite generates Metrics for a Composite Set of i.i.d. R1 Exponential + * Distributions. The References are: * *

*
    @@ -112,7 +112,7 @@ * @author Lakshmi Krishnamurthy */ -public class CompositeR1OrderStatistics +public class IIDComposite { /** @@ -160,7 +160,7 @@ public static final int MinOrderStatistic ( * @throws Exception Thrown if the Inputs are Invalid */ - public static final double IIDJointMoment ( + public static final double OrderStatisticsJointMoment ( final R1RateDistribution r1RateDistribution, final int variateCount, final int orderStatistic1, @@ -173,7 +173,7 @@ public static final double IIDJointMoment ( ) { throw new Exception ( - "CompositeR1OrderStatistics::IIDJointMoment => Invalid Inputs" + "IIDComposite::OrderStatisticsJointMoment => Invalid Inputs" ); } diff --git a/src/main/java/org/drip/measure/continuous/R1UnivariateScaledExponential.java b/src/main/java/org/drip/measure/exponential/R1ScaledDistribution.java similarity index 73% rename from src/main/java/org/drip/measure/continuous/R1UnivariateScaledExponential.java rename to src/main/java/org/drip/measure/exponential/R1ScaledDistribution.java index f0c60aa01cab..dd8e6d41ae55 100644 --- a/src/main/java/org/drip/measure/continuous/R1UnivariateScaledExponential.java +++ b/src/main/java/org/drip/measure/exponential/R1ScaledDistribution.java @@ -1,5 +1,11 @@ -package org.drip.measure.continuous; +package org.drip.measure.exponential; + +import org.drip.function.definition.R1ToR1; +import org.drip.measure.continuous.R1Univariate; +import org.drip.numerical.common.NumberUtil; +import org.drip.numerical.integration.NewtonCotesQuadratureGenerator; +import org.drip.specialfunction.definition.ScaledExponentialEstimator; /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -77,8 +83,8 @@ */ /** - * R1UnivariateScaledExponential implements the Probability Density Function for the Scaled Univariate - * R1 Exponential Function. The References are: + * R1ScaledDistribution implements the Probability Density Function for the Scaled R1 + * Exponential Function. The References are: * *

    *
      @@ -116,31 +122,34 @@ * @author Lakshmi Krishnamurthy */ -public class R1UnivariateScaledExponential extends org.drip.measure.continuous.R1Univariate +public class R1ScaledDistribution + extends R1Univariate { - private double _normalizer = java.lang.Double.NaN; - private org.drip.function.definition.R1ToR1 _gammaEstimator = null; - private org.drip.specialfunction.definition.ScaledExponentialEstimator _scaledExponentialEstimator = - null; + private R1ToR1 _gammaEstimator = null; + private double _normalizer = Double.NaN; + private ScaledExponentialEstimator _scaledExponentialEstimator = null; /** - * UnivariateScaledExponential Constructor + * R1ScaledDistribution Constructor * * @param scaledExponentialEstimator Scaled Exponential Estimator * @param gammaEstimator Gamma Estimator * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ - public R1UnivariateScaledExponential ( - final org.drip.specialfunction.definition.ScaledExponentialEstimator scaledExponentialEstimator, - final org.drip.function.definition.R1ToR1 gammaEstimator) - throws java.lang.Exception + public R1ScaledDistribution ( + final ScaledExponentialEstimator scaledExponentialEstimator, + final R1ToR1 gammaEstimator) + throws Exception { if (null == (_scaledExponentialEstimator = scaledExponentialEstimator) || - null == (_gammaEstimator = gammaEstimator)) + null == (_gammaEstimator = gammaEstimator) + ) { - throw new java.lang.Exception ("R1UnivariateScaledExponential Constructor => Invalid Inputs"); + throw new java.lang.Exception ( + "R1ScaledDistribution Constructor => Invalid Inputs" + ); } _normalizer = 1. / _gammaEstimator.evaluate (1. + (1. / _scaledExponentialEstimator.exponent())) / @@ -153,7 +162,7 @@ public R1UnivariateScaledExponential ( * @return Scaled Exponential Estimator */ - public org.drip.specialfunction.definition.ScaledExponentialEstimator scaledExponentialEstimator() + public ScaledExponentialEstimator scaledExponentialEstimator() { return _scaledExponentialEstimator; } @@ -164,7 +173,7 @@ public org.drip.specialfunction.definition.ScaledExponentialEstimator scaledExpo * @return Gamma Estimator */ - public org.drip.function.definition.R1ToR1 gammaEstimator() + public R1ToR1 gammaEstimator() { return _gammaEstimator; } @@ -180,33 +189,42 @@ public org.drip.function.definition.R1ToR1 gammaEstimator() @Override public double density ( final double t) - throws java.lang.Exception + throws Exception { - return _scaledExponentialEstimator.evaluate (t) * _normalizer; + return _scaledExponentialEstimator.evaluate ( + t + ) * _normalizer; } @Override public double cumulative ( final double t) - throws java.lang.Exception + throws Exception { - if (!supported (t)) + if (!supported ( + t + )) { - throw new java.lang.Exception ("R1UnivariateScaledExponential::cumulative => Invalid Inputs"); + throw new Exception ( + "R1ScaledDistribution::cumulative => Invalid Inputs" + ); } - return org.drip.numerical.integration.NewtonCotesQuadratureGenerator.Zero_PlusOne ( + return NewtonCotesQuadratureGenerator.Zero_PlusOne ( 0., t, 100 ).integrate ( - new org.drip.function.definition.R1ToR1 (null) + new R1ToR1 (null) { @Override public double evaluate ( final double u) - throws java.lang.Exception + throws Exception { - return java.lang.Double.isInfinite (u) || 0. == u ? 0. : - _scaledExponentialEstimator.evaluate (u); + return Double.isInfinite ( + u + ) || 0. == u ? 0. : _scaledExponentialEstimator.evaluate ( + u + ); } } ) * _normalizer; @@ -217,54 +235,67 @@ public org.drip.function.definition.R1ToR1 gammaEstimator() final double t2) throws java.lang.Exception { - if (!org.drip.numerical.common.NumberUtil.IsValid (t1) || 0. > t1 || - !org.drip.numerical.common.NumberUtil.IsValid (t2) || t1 > t2) + if (NumberUtil.IsValid ( + t1 + ) || 0. > t1 || !NumberUtil.IsValid ( + t2 + ) || t1 > t2 + ) { - throw new java.lang.Exception ("R1UnivariateScaledExponential::incremental => Invalid Inputs"); + throw new Exception ( + "R1ScaledDistribution::incremental => Invalid Inputs" + ); } - return org.drip.numerical.integration.NewtonCotesQuadratureGenerator.Zero_PlusOne ( + return NewtonCotesQuadratureGenerator.Zero_PlusOne ( t1, t2, 100 ).integrate ( - new org.drip.function.definition.R1ToR1 (null) + new R1ToR1 (null) { @Override public double evaluate ( final double u) - throws java.lang.Exception + throws Exception { - return java.lang.Double.isInfinite (u) || 0. == u ? 0. : - _scaledExponentialEstimator.evaluate (u); + return Double.isInfinite ( + u + ) || 0. == u ? 0. : _scaledExponentialEstimator.evaluate ( + u + ); } } ) * _normalizer; } @Override public double mean() - throws java.lang.Exception + throws Exception { - return _scaledExponentialEstimator.firstMoment (_gammaEstimator) * _normalizer; + return _scaledExponentialEstimator.firstMoment ( + _gammaEstimator + ) * _normalizer; } @Override public double variance() - throws java.lang.Exception + throws Exception { try { - double mean = _scaledExponentialEstimator.firstMoment (_gammaEstimator) * _normalizer; + double mean = _scaledExponentialEstimator.firstMoment ( + _gammaEstimator + ) * _normalizer; return _scaledExponentialEstimator.higherMoment ( 2, _gammaEstimator ) * _normalizer * _normalizer - mean * mean; } - catch (java.lang.Exception e) + catch (Exception e) { e.printStackTrace(); } - return java.lang.Double.NaN; + return Double.NaN; } /** diff --git a/src/main/java/org/drip/measure/exponential/TwoIIDSum.java b/src/main/java/org/drip/measure/exponential/TwoIIDSum.java index 6b84a4e0eadd..373759b46f89 100644 --- a/src/main/java/org/drip/measure/exponential/TwoIIDSum.java +++ b/src/main/java/org/drip/measure/exponential/TwoIIDSum.java @@ -154,13 +154,13 @@ public TwoIIDSum ( if (firstRate > secondRate) { - _largerR1RateDistribution = secondR1RateDistribution; - _smallerR1RateDistribution = firstR1RateDistribution; + _largerR1RateDistribution = firstR1RateDistribution; + _smallerR1RateDistribution = secondR1RateDistribution; } else { - _largerR1RateDistribution = firstR1RateDistribution; - _smallerR1RateDistribution = secondR1RateDistribution; + _largerR1RateDistribution = secondR1RateDistribution; + _smallerR1RateDistribution = firstR1RateDistribution; } } @@ -338,14 +338,7 @@ public R1RateDistribution smallerR1RateDistribution() double smallerRate = _smallerR1RateDistribution.rate(); - if (largerRate == smallerRate) - { - throw new Exception ( - "TwoIIDSum::differentialEntropy => Cannot compute entropy when rates are equal" - ); - } - - return 1. + Definitions.EULER_MASCHERONI + Math.log ( + return largerRate == smallerRate ? Double.NaN : 1. + Definitions.EULER_MASCHERONI + Math.log ( (largerRate - smallerRate) / (largerRate * smallerRate) ) + new BinetFirstIntegral ( null diff --git a/src/main/java/org/drip/measure/gamma/MaxwellBoltzmannSquaredDistribution.java b/src/main/java/org/drip/measure/transform/GammaToMaxwellBoltzmannSquared.java similarity index 88% rename from src/main/java/org/drip/measure/gamma/MaxwellBoltzmannSquaredDistribution.java rename to src/main/java/org/drip/measure/transform/GammaToMaxwellBoltzmannSquared.java index 76c17387ab4a..6c0c1419bfee 100644 --- a/src/main/java/org/drip/measure/gamma/MaxwellBoltzmannSquaredDistribution.java +++ b/src/main/java/org/drip/measure/transform/GammaToMaxwellBoltzmannSquared.java @@ -1,5 +1,10 @@ -package org.drip.measure.gamma; +package org.drip.measure.transform; + +import org.drip.function.definition.R1ToR1; +import org.drip.function.definition.R2ToR1; +import org.drip.measure.gamma.R1ShapeScaleDistribution; +import org.drip.measure.gamma.ShapeScaleParameters; /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -77,7 +82,7 @@ */ /** - * MaxwellBoltzmannSquaredDistribution implements the Maxwell Boltzmann Squared Distribution using the + * GammaToMaxwellBoltzmannSquared implements the Maxwell-Boltzmann Squared Distribution using the * R1 Gamma Distribution. The References are: * *

      @@ -114,13 +119,13 @@ * @author Lakshmi Krishnamurthy */ -public class MaxwellBoltzmannSquaredDistribution - extends org.drip.measure.gamma.R1ShapeScaleDistribution +public class GammaToMaxwellBoltzmannSquared + extends R1ShapeScaleDistribution { - private double _a = java.lang.Double.NaN; + private double _a = Double.NaN; /** - * MaxwellBoltzmannSquaredDistribution Constructor + * GammaToMaxwellBoltzmannSquared Constructor * * @param a "A" Parameter * @param gammaEstimator Gamma Estimator @@ -130,15 +135,15 @@ public class MaxwellBoltzmannSquaredDistribution * @throws java.lang.Exception Thrown if the Inputs are Invalid */ - public MaxwellBoltzmannSquaredDistribution ( + public GammaToMaxwellBoltzmannSquared ( final double a, - final org.drip.function.definition.R1ToR1 gammaEstimator, - final org.drip.function.definition.R1ToR1 digammaEstimator, - final org.drip.function.definition.R2ToR1 lowerIncompleteGammaEstimator) - throws java.lang.Exception + final R1ToR1 gammaEstimator, + final R1ToR1 digammaEstimator, + final R2ToR1 lowerIncompleteGammaEstimator) + throws Exception { super ( - new org.drip.measure.gamma.ShapeScaleParameters ( + new ShapeScaleParameters ( 1.5, 2 * a * a ), diff --git a/src/main/java/org/drip/measure/gamma/ExponentialDistribution.java b/src/main/java/org/drip/measure/transform/GammaToR1Exponential.java similarity index 86% rename from src/main/java/org/drip/measure/gamma/ExponentialDistribution.java rename to src/main/java/org/drip/measure/transform/GammaToR1Exponential.java index f68ab80487ce..399d87a520f2 100644 --- a/src/main/java/org/drip/measure/gamma/ExponentialDistribution.java +++ b/src/main/java/org/drip/measure/transform/GammaToR1Exponential.java @@ -1,5 +1,10 @@ -package org.drip.measure.gamma; +package org.drip.measure.transform; + +import org.drip.function.definition.R1ToR1; +import org.drip.function.definition.R2ToR1; +import org.drip.measure.gamma.R1ShapeScaleDistribution; +import org.drip.measure.gamma.ShapeScaleParameters; /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -77,8 +82,8 @@ */ /** - * ExponentialDistribution implements the Exponential Distribution in Terms of the R1 Gamma - * Distribution. The References are: + * GammaToR1Exponential implements the R1 Exponential Distribution in Terms of the + * R1 Gamma Distribution. The References are: * *

      *
        @@ -114,30 +119,30 @@ * @author Lakshmi Krishnamurthy */ -public class ExponentialDistribution - extends org.drip.measure.gamma.R1ShapeScaleDistribution +public class GammaToR1Exponential + extends R1ShapeScaleDistribution { /** - * ExponentialDistribution Constructor + * GammaToR1Exponential Constructor * * @param scaleParameter Scale Parameter * @param gammaEstimator Gamma Estimator * @param digammaEstimator Digamma Estimator * @param lowerIncompleteGammaEstimator Lower Incomplete Gamma Estimator * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ - public ExponentialDistribution ( + public GammaToR1Exponential ( final double scaleParameter, - final org.drip.function.definition.R1ToR1 gammaEstimator, - final org.drip.function.definition.R1ToR1 digammaEstimator, - final org.drip.function.definition.R2ToR1 lowerIncompleteGammaEstimator) - throws java.lang.Exception + final R1ToR1 gammaEstimator, + final R1ToR1 digammaEstimator, + final R2ToR1 lowerIncompleteGammaEstimator) + throws Exception { super ( - new org.drip.measure.gamma.ShapeScaleParameters ( + new ShapeScaleParameters ( 1., scaleParameter ), @@ -155,13 +160,13 @@ public ExponentialDistribution ( * @return The Gamma Distribution */ - public org.drip.measure.gamma.R1ShapeScaleDistribution iidDistribution ( + public R1ShapeScaleDistribution iidDistribution ( final int n) { try { return new R1ShapeScaleDistribution ( - new org.drip.measure.gamma.ShapeScaleParameters ( + new ShapeScaleParameters ( n, shapeScaleParameters().scale() ), @@ -170,7 +175,7 @@ public org.drip.measure.gamma.R1ShapeScaleDistribution iidDistribution ( lowerIncompleteGammaEstimator() ); } - catch (java.lang.Exception e) + catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/org/drip/measure/transform/package-info.java b/src/main/java/org/drip/measure/transform/package-info.java new file mode 100644 index 000000000000..87c9602b051e --- /dev/null +++ b/src/main/java/org/drip/measure/transform/package-info.java @@ -0,0 +1,8 @@ + +/** + * Expressing one Measure Using Another + * + * @author Lakshmi Krishnamurthy + */ + +package org.drip.measure.transform; diff --git a/src/main/java/org/drip/sample/distancetest/ExponentialAndersonDarlingGapAnalysis.java b/src/main/java/org/drip/sample/distancetest/ExponentialAndersonDarlingGapAnalysis.java index 84117b42261d..49aeaec6bde6 100644 --- a/src/main/java/org/drip/sample/distancetest/ExponentialAndersonDarlingGapAnalysis.java +++ b/src/main/java/org/drip/sample/distancetest/ExponentialAndersonDarlingGapAnalysis.java @@ -1,7 +1,7 @@ package org.drip.sample.distancetest; -import org.drip.measure.continuous.R1UnivariateExponential; +import org.drip.measure.exponential.R1RateDistribution; import org.drip.service.common.FormatUtil; import org.drip.service.env.EnvManager; import org.drip.validation.distance.GapTestOutcome; @@ -151,7 +151,7 @@ private static final double UnivariateRandom ( final double lambda) throws Exception { - return new R1UnivariateExponential (lambda).random(); + return new R1RateDistribution (lambda).random(); } private static final Sample GenerateSample ( diff --git a/src/main/java/org/drip/sample/distancetest/ExponentialAndersonDarlingGapDiscriminant.java b/src/main/java/org/drip/sample/distancetest/ExponentialAndersonDarlingGapDiscriminant.java index 7b5ad5da1dff..c9538fa08717 100644 --- a/src/main/java/org/drip/sample/distancetest/ExponentialAndersonDarlingGapDiscriminant.java +++ b/src/main/java/org/drip/sample/distancetest/ExponentialAndersonDarlingGapDiscriminant.java @@ -1,7 +1,7 @@ package org.drip.sample.distancetest; -import org.drip.measure.continuous.R1UnivariateExponential; +import org.drip.measure.exponential.R1RateDistribution; import org.drip.service.common.FormatUtil; import org.drip.service.env.EnvManager; import org.drip.validation.distance.GapTestOutcome; @@ -147,7 +147,7 @@ private static final double UnivariateRandom ( final double lambda) throws Exception { - return new R1UnivariateExponential (lambda).random(); + return new R1RateDistribution (lambda).random(); } private static final Sample GenerateSample ( diff --git a/src/main/java/org/drip/sample/distancetest/ExponentialCramersVonMisesGapAnalysis.java b/src/main/java/org/drip/sample/distancetest/ExponentialCramersVonMisesGapAnalysis.java index 162e53b8dd36..2d6253f376c3 100644 --- a/src/main/java/org/drip/sample/distancetest/ExponentialCramersVonMisesGapAnalysis.java +++ b/src/main/java/org/drip/sample/distancetest/ExponentialCramersVonMisesGapAnalysis.java @@ -1,7 +1,7 @@ package org.drip.sample.distancetest; -import org.drip.measure.continuous.R1UnivariateExponential; +import org.drip.measure.exponential.R1RateDistribution; import org.drip.service.common.FormatUtil; import org.drip.service.env.EnvManager; import org.drip.validation.distance.GapTestOutcome; @@ -151,7 +151,7 @@ private static final double UnivariateRandom ( final double lambda) throws Exception { - return new R1UnivariateExponential (lambda).random(); + return new R1RateDistribution (lambda).random(); } private static final Sample GenerateSample ( diff --git a/src/main/java/org/drip/sample/distancetest/ExponentialCramersVonMisesGapDiscriminant.java b/src/main/java/org/drip/sample/distancetest/ExponentialCramersVonMisesGapDiscriminant.java index fd6a81e96020..8af6982a4da2 100644 --- a/src/main/java/org/drip/sample/distancetest/ExponentialCramersVonMisesGapDiscriminant.java +++ b/src/main/java/org/drip/sample/distancetest/ExponentialCramersVonMisesGapDiscriminant.java @@ -1,7 +1,7 @@ package org.drip.sample.distancetest; -import org.drip.measure.continuous.R1UnivariateExponential; +import org.drip.measure.exponential.R1RateDistribution; import org.drip.service.common.FormatUtil; import org.drip.service.env.EnvManager; import org.drip.validation.distance.GapTestOutcome; @@ -147,7 +147,7 @@ private static final double UnivariateRandom ( final double lambda) throws Exception { - return new R1UnivariateExponential (lambda).random(); + return new R1RateDistribution (lambda).random(); } private static final Sample GenerateSample ( diff --git a/src/main/java/org/drip/sample/exponential/R1OrderStatisticsJointMoment.java b/src/main/java/org/drip/sample/exponential/R1OrderStatisticsJointMoment.java index f216d78b72f5..ec5f10597916 100644 --- a/src/main/java/org/drip/sample/exponential/R1OrderStatisticsJointMoment.java +++ b/src/main/java/org/drip/sample/exponential/R1OrderStatisticsJointMoment.java @@ -1,7 +1,7 @@ package org.drip.sample.exponential; -import org.drip.measure.exponential.CompositeR1OrderStatistics; +import org.drip.measure.exponential.IIDComposite; import org.drip.measure.exponential.R1RateDistribution; import org.drip.service.common.FormatUtil; import org.drip.service.env.EnvManager; @@ -155,7 +155,7 @@ public static final void main ( " | Order Statistics Pair: (" + orderStatistic1 + ", " + orderStatistic2 + ")] => " + FormatUtil.FormatDouble ( - CompositeR1OrderStatistics.IIDJointMoment ( + IIDComposite.OrderStatisticsJointMoment ( r1RateDistribution, variateCount, orderStatistic1, diff --git a/src/main/java/org/drip/sample/exponential/R1TwoIIDSignificantStatistics.java b/src/main/java/org/drip/sample/exponential/R1TwoIIDSignificantStatistics.java index 2032f493b32b..a765f3c0f912 100644 --- a/src/main/java/org/drip/sample/exponential/R1TwoIIDSignificantStatistics.java +++ b/src/main/java/org/drip/sample/exponential/R1TwoIIDSignificantStatistics.java @@ -135,51 +135,26 @@ public static final void main ( EnvManager.InitEnv (""); double[] lambdaArray = {0.02, 0.04, 0.08, 0.16, 0.32, 0.64, 1.3, 2.6, 5.1, 10.2, 20.5}; - // double[] lambdaArray = {1.}; - System.out.println ( - "\t||----------------------------------------------------------------------------------||" - ); + System.out.println ("\t||-----------------------------------------------------------------||"); - System.out.println ( - "\t|| L -> R:" - ); + System.out.println ("\t|| R^1 Two IID Significant Statistics ||"); - System.out.println ( - "\t|| - Lambda Pair (Input)" - ); + System.out.println ("\t||-----------------------------------------------------------------||"); - System.out.println ( - "\t|| - Mean" - ); + System.out.println ("\t|| L -> R:"); - System.out.println ( - "\t|| - Mode" - ); + System.out.println ("\t|| - Lambda Pair (Input)"); - System.out.println ( - "\t|| - Variance" - ); + System.out.println ("\t|| - Mean"); - System.out.println ( - "\t|| - Skewness" - ); + System.out.println ("\t|| - Mode"); - System.out.println ( - "\t|| - Excess Kurtosis" - ); + System.out.println ("\t|| - Variance"); - System.out.println ( - "\t|| - Fisher Information" - ); + System.out.println ("\t|| - Entropy"); - System.out.println ( - "\t|| - Inter-quantile Range (IQR)" - ); - - System.out.println ( - "\t||----------------------------------------------------------------------------------||" - ); + System.out.println ("\t||-----------------------------------------------------------------||"); for (int i = 0; i < lambdaArray.length; ++i) { @@ -203,22 +178,14 @@ public static final void main ( exponentialDistribution.mode(), 2, 3, 1. ) + " |" + FormatUtil.FormatDouble ( exponentialDistribution.variance(), 4, 4, 1. - /* ) + " |" + FormatUtil.FormatDouble ( - exponentialDistribution.skewness(), 1, 1, 1. - ) + " |" + FormatUtil.FormatDouble ( - exponentialDistribution.excessKurtosis(), 2, 3, 1. - ) + " |" + FormatUtil.FormatDouble ( - exponentialDistribution.fisherInformation(), 4, 4, 1. ) + " |" + FormatUtil.FormatDouble ( - exponentialDistribution.iqr(), 2, 3, 1. */ + exponentialDistribution.differentialEntropy(), 2, 3, 1. ) + " ||" ); } } - System.out.println ( - "\t||----------------------------------------------------------------------------------||" - ); + System.out.println ("\t||-----------------------------------------------------------------||"); EnvManager.TerminateEnv(); } diff --git a/src/main/java/org/drip/sample/gammadistribution/MaxwellBoltzmannSquaredPDFEstimate.java b/src/main/java/org/drip/sample/gammadistribution/MaxwellBoltzmannSquaredPDFEstimate.java index db9fba599ebb..dc0cf9db0959 100644 --- a/src/main/java/org/drip/sample/gammadistribution/MaxwellBoltzmannSquaredPDFEstimate.java +++ b/src/main/java/org/drip/sample/gammadistribution/MaxwellBoltzmannSquaredPDFEstimate.java @@ -3,7 +3,7 @@ import org.drip.function.definition.R1ToR1; import org.drip.function.definition.R2ToR1; -import org.drip.measure.gamma.MaxwellBoltzmannSquaredDistribution; +import org.drip.measure.transform.GammaToMaxwellBoltzmannSquared; import org.drip.service.common.FormatUtil; import org.drip.service.env.EnvManager; import org.drip.specialfunction.digamma.CumulativeSeriesEstimator; @@ -239,8 +239,8 @@ public static final void main ( for (double a : aArray) { - MaxwellBoltzmannSquaredDistribution maxwellBoltzmannSquaredDistribution = - new MaxwellBoltzmannSquaredDistribution ( + GammaToMaxwellBoltzmannSquared maxwellBoltzmannSquaredDistribution = + new GammaToMaxwellBoltzmannSquared ( a, gammaEstimator, digammaEstimator, @@ -281,8 +281,8 @@ public static final void main ( for (double a : aArray) { - MaxwellBoltzmannSquaredDistribution maxwellBoltzmannSquaredDistribution = - new MaxwellBoltzmannSquaredDistribution ( + GammaToMaxwellBoltzmannSquared maxwellBoltzmannSquaredDistribution = + new GammaToMaxwellBoltzmannSquared ( a, gammaEstimator, digammaEstimator, @@ -321,8 +321,8 @@ public static final void main ( for (double a : aArray) { - MaxwellBoltzmannSquaredDistribution maxwellBoltzmannSquaredDistribution = - new MaxwellBoltzmannSquaredDistribution ( + GammaToMaxwellBoltzmannSquared maxwellBoltzmannSquaredDistribution = + new GammaToMaxwellBoltzmannSquared ( a, gammaEstimator, digammaEstimator, diff --git a/src/main/java/org/drip/sample/hypothesistest/StandardExponentialSignificanceTest.java b/src/main/java/org/drip/sample/hypothesistest/StandardExponentialSignificanceTest.java index 0b6159dc689a..d94ce88e819d 100644 --- a/src/main/java/org/drip/sample/hypothesistest/StandardExponentialSignificanceTest.java +++ b/src/main/java/org/drip/sample/hypothesistest/StandardExponentialSignificanceTest.java @@ -1,7 +1,7 @@ package org.drip.sample.hypothesistest; -import org.drip.measure.continuous.R1UnivariateExponential; +import org.drip.measure.exponential.R1RateDistribution; import org.drip.service.common.FormatUtil; import org.drip.service.env.EnvManager; import org.drip.validation.hypothesis.SignificanceTestSetting; @@ -132,7 +132,9 @@ public class StandardExponentialSignificanceTest private static final double UnivariateRandom() throws Exception { - return R1UnivariateExponential.Standard().random(); + return new R1RateDistribution ( + 1. + ).random(); } private static final Sample GenerateSample ( diff --git a/src/main/java/org/drip/sample/hypothesistest/StandardExponentialTTest.java b/src/main/java/org/drip/sample/hypothesistest/StandardExponentialTTest.java index 931ecb2d4e29..c28d0c49f0ff 100644 --- a/src/main/java/org/drip/sample/hypothesistest/StandardExponentialTTest.java +++ b/src/main/java/org/drip/sample/hypothesistest/StandardExponentialTTest.java @@ -1,7 +1,7 @@ package org.drip.sample.hypothesistest; -import org.drip.measure.continuous.R1UnivariateExponential; +import org.drip.measure.exponential.R1RateDistribution; import org.drip.service.common.FormatUtil; import org.drip.service.env.EnvManager; import org.drip.validation.evidence.Ensemble; @@ -128,7 +128,9 @@ public class StandardExponentialTTest private static final double UnivariateRandom() throws Exception { - return R1UnivariateExponential.Standard().random(); + return new R1RateDistribution ( + 1. + ).random(); } private static final Sample GenerateSample ( diff --git a/src/main/java/org/drip/sample/samplestatistics/StandardExponentialPIT.java b/src/main/java/org/drip/sample/samplestatistics/StandardExponentialPIT.java index 90fc34c62b58..edfc247a80ba 100644 --- a/src/main/java/org/drip/sample/samplestatistics/StandardExponentialPIT.java +++ b/src/main/java/org/drip/sample/samplestatistics/StandardExponentialPIT.java @@ -1,7 +1,7 @@ package org.drip.sample.samplestatistics; -import org.drip.measure.continuous.R1UnivariateExponential; +import org.drip.measure.exponential.R1RateDistribution; import org.drip.service.common.FormatUtil; import org.drip.service.env.EnvManager; import org.drip.validation.evidence.TestStatisticAccumulator; @@ -128,7 +128,9 @@ public class StandardExponentialPIT private static final double UnivariateRandom() throws Exception { - return R1UnivariateExponential.Standard().random(); + return new R1RateDistribution ( + 1. + ).random(); } /** diff --git a/src/main/java/org/drip/sample/samplestatistics/StandardExponentialTStatistic.java b/src/main/java/org/drip/sample/samplestatistics/StandardExponentialTStatistic.java index 29aa70b5ce88..3809b5104b2d 100644 --- a/src/main/java/org/drip/sample/samplestatistics/StandardExponentialTStatistic.java +++ b/src/main/java/org/drip/sample/samplestatistics/StandardExponentialTStatistic.java @@ -1,7 +1,7 @@ package org.drip.sample.samplestatistics; -import org.drip.measure.continuous.R1UnivariateExponential; +import org.drip.measure.exponential.R1RateDistribution; import org.drip.measure.statistics.PopulationCentralMeasures; import org.drip.measure.statistics.UnivariateMoments; import org.drip.service.common.FormatUtil; @@ -128,12 +128,25 @@ public class StandardExponentialTStatistic private static final double UnivariateRandom() throws Exception { - return R1UnivariateExponential.Standard().random(); + return new R1RateDistribution ( + 1. + ).random(); } private static final PopulationCentralMeasures PopulationMeasures() { - return R1UnivariateExponential.Standard().populationCentralMeasures(); + try + { + return new R1RateDistribution ( + 1. + ).populationCentralMeasures(); + } + catch (Exception e) + { + e.printStackTrace(); + } + + return null; } private static final double SampleMeanEstimate ( diff --git a/src/main/java/org/drip/sample/scaledexponential/KohlrauschPDFEstimate.java b/src/main/java/org/drip/sample/scaledexponential/KohlrauschPDFEstimate.java index be32ecffa83f..9cce287df654 100644 --- a/src/main/java/org/drip/sample/scaledexponential/KohlrauschPDFEstimate.java +++ b/src/main/java/org/drip/sample/scaledexponential/KohlrauschPDFEstimate.java @@ -2,7 +2,7 @@ package org.drip.sample.scaledexponential; import org.drip.function.definition.R1ToR1; -import org.drip.measure.continuous.R1UnivariateScaledExponential; +import org.drip.measure.exponential.R1ScaledDistribution; import org.drip.service.common.FormatUtil; import org.drip.service.env.EnvManager; import org.drip.specialfunction.definition.ScaledExponentialEstimator; @@ -195,7 +195,7 @@ public static final void main ( for (double beta : betaArray) { - R1UnivariateScaledExponential r1UnivariateScaledExponential = new R1UnivariateScaledExponential ( + R1ScaledDistribution r1UnivariateScaledExponential = new R1ScaledDistribution ( new ScaledExponentialEstimator ( beta, 1. @@ -235,7 +235,7 @@ public static final void main ( for (double beta : betaArray) { - R1UnivariateScaledExponential r1UnivariateScaledExponential = new R1UnivariateScaledExponential ( + R1ScaledDistribution r1UnivariateScaledExponential = new R1ScaledDistribution ( new ScaledExponentialEstimator ( beta, 1. @@ -275,7 +275,7 @@ public static final void main ( for (double beta : betaArray) { - R1UnivariateScaledExponential r1UnivariateScaledExponential = new R1UnivariateScaledExponential ( + R1ScaledDistribution r1UnivariateScaledExponential = new R1ScaledDistribution ( new ScaledExponentialEstimator ( beta, 1.