From d81a46ab22307c52cee8ce53cf5334fdc4632f4e Mon Sep 17 00:00:00 2001 From: Lakshmi Krishnamurthy Date: Thu, 17 Aug 2023 04:16:50 -0400 Subject: [PATCH] Features: Bug Fixes/Re-organization: - Pareto R^1 PDF and CDF (45) - Pareto R^1 Distribution - Mean Exception (58) - Pareto R^1 Distribution - Variance Exception (59, 60) Samples: - R^1 CDF and PDF #1 (1, 2, 3) - R^1 CDF and PDF #2 (4, 5, 6) - R^1 CDF and PDF #3 (7, 8, 9) - R^1 CDF and PDF #4 (10, 11, 12) - R^1 Pareto Quantile Variates #1 (13, 14, 15) - R^1 Pareto Quantile Variates #2 (16, 17, 18) - R^1 Pareto Quantile Variates #3 (19, 20, 21) - R^1 Pareto Quantile Variates #4 (22, 23, 24) - R^1 Pareto Quantile Variates #5 (25, 26, 27) - R^1 Pareto Quantile Variates #6 (28, 29, 30) - R^1 Pareto Quantile Variates #7 (31, 32, 33) - R^1 Pareto Quantile Variates #8 (33, 34, 36) - R^1 Pareto Quantile Variates #9 (37, 38, 39) - R^1 Pareto Quantile Variates #10 (40, 41, 42) - R^1 Pareto Quantile Variates #11 (43, 44) - R^1 Pareto Distribution Statistics #1 (46, 47, 48) - R^1 Pareto Distribution Statistics #2 (49, 50, 51) - R^1 Pareto Distribution Statistics #3 (52, 53, 54) - R^1 Pareto Distribution Statistics #4 (55, 56, 57) IdeaDRIP: --- ReleaseNotes/12_29_2022.txt | 34 +++ ScheduleSheet.xlsx | Bin 38813 -> 38693 bytes .../continuous/R1ParetoDistribution.java | 48 +++- .../org/drip/sample/pareto/R1PDFAndCDF.java | 254 ++++++++++++++++++ ...CDFAndPDF.java => R1QuantileVariates.java} | 60 ++--- .../org/drip/sample/pareto/R1Statistics.java | 221 +++++++++++++++ 6 files changed, 585 insertions(+), 32 deletions(-) create mode 100644 ReleaseNotes/12_29_2022.txt create mode 100644 src/main/java/org/drip/sample/pareto/R1PDFAndCDF.java rename src/main/java/org/drip/sample/pareto/{R1CDFAndPDF.java => R1QuantileVariates.java} (82%) create mode 100644 src/main/java/org/drip/sample/pareto/R1Statistics.java diff --git a/ReleaseNotes/12_29_2022.txt b/ReleaseNotes/12_29_2022.txt new file mode 100644 index 00000000000..2f7b8a033b7 --- /dev/null +++ b/ReleaseNotes/12_29_2022.txt @@ -0,0 +1,34 @@ + +Features: + +Bug Fixes/Re-organization: + + - Pareto R^1 PDF and CDF (45) + - Pareto R^1 Distribution - Mean Exception (58) + - Pareto R^1 Distribution - Variance Exception (59, 60) + + +Samples: + + - R^1 CDF and PDF #1 (1, 2, 3) + - R^1 CDF and PDF #2 (4, 5, 6) + - R^1 CDF and PDF #3 (7, 8, 9) + - R^1 CDF and PDF #4 (10, 11, 12) + - R^1 Pareto Quantile Variates #1 (13, 14, 15) + - R^1 Pareto Quantile Variates #2 (16, 17, 18) + - R^1 Pareto Quantile Variates #3 (19, 20, 21) + - R^1 Pareto Quantile Variates #4 (22, 23, 24) + - R^1 Pareto Quantile Variates #5 (25, 26, 27) + - R^1 Pareto Quantile Variates #6 (28, 29, 30) + - R^1 Pareto Quantile Variates #7 (31, 32, 33) + - R^1 Pareto Quantile Variates #8 (33, 34, 36) + - R^1 Pareto Quantile Variates #9 (37, 38, 39) + - R^1 Pareto Quantile Variates #10 (40, 41, 42) + - R^1 Pareto Quantile Variates #11 (43, 44) + - R^1 Pareto Distribution Statistics #1 (46, 47, 48) + - R^1 Pareto Distribution Statistics #2 (49, 50, 51) + - R^1 Pareto Distribution Statistics #3 (52, 53, 54) + - R^1 Pareto Distribution Statistics #4 (55, 56, 57) + + +IdeaDRIP: diff --git a/ScheduleSheet.xlsx b/ScheduleSheet.xlsx index 2f63a5979d8564c3b9b8c7f563cd234d71067e9d..01b2e2218051aefbc217381e404d1461f955add0 100644 GIT binary patch delta 24537 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 z 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 P0(G5smrw@vukZf=$G+7R diff --git a/src/main/java/org/drip/measure/continuous/R1ParetoDistribution.java b/src/main/java/org/drip/measure/continuous/R1ParetoDistribution.java index 8303b6da1be..502c20e9262 100644 --- a/src/main/java/org/drip/measure/continuous/R1ParetoDistribution.java +++ b/src/main/java/org/drip/measure/continuous/R1ParetoDistribution.java @@ -218,17 +218,61 @@ public double lambda() ); } + @Override public double quantile ( + final double p) + throws Exception + { + if (!NumberUtil.IsValid ( + p + ) || 0. > p || 1. < p + ) + { + throw new Exception ( + "R1ParetoDistribution::quantile => p is Invalid" + ); + } + + if (0. == p) + { + return support()[0]; + } + + if (1. == p) + { + return support()[1]; + } + + return _k + Math.pow ( + 1. - p, + -1. * _lambda + ); + } + @Override public double mean() throws Exception { - return _lambda * _k / (1. >= _lambda ? 1. - _lambda : _lambda - 1.); + if (1. >= _lambda) + { + throw new Exception ( + "R1ParetoDistribution::mean => Does not converge for lambda <= 1." + ); + } + + return _lambda * _k / _lambda - 1.; } @Override public double variance() throws Exception { + if (1. >= _lambda) + { + throw new Exception ( + "R1ParetoDistribution::variance => Does not converge for lambda <= 2." + ); + } + double mean = mean(); - return _lambda * _k * _k / (2. >= _lambda ? 2. - _lambda : _lambda - 2.) - mean * mean; + return _lambda * _k * _k / (_lambda - 2.) - mean * mean; } } diff --git a/src/main/java/org/drip/sample/pareto/R1PDFAndCDF.java b/src/main/java/org/drip/sample/pareto/R1PDFAndCDF.java new file mode 100644 index 00000000000..9e90dd86edf --- /dev/null +++ b/src/main/java/org/drip/sample/pareto/R1PDFAndCDF.java @@ -0,0 +1,254 @@ + +package org.drip.sample.pareto; + +import org.drip.measure.continuous.R1ParetoDistribution; +import org.drip.service.common.FormatUtil; +import org.drip.service.env.EnvManager; + +/* + * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + */ + +/*! + * Copyright (C) 2023 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. + */ + +/** + * R1PDFAndCDF illustrates the Density and CDF Metrics Suite generated from R1 Pareto + * Distribution. The References are: + * + *

+ *
    + *
  • + * Devroye, L. (1986): Non-Uniform Random Variate Generation Springer-Verlag New York + *
  • + *
  • + * Exponential Distribution (2019): Exponential Distribution + * https://en.wikipedia.org/wiki/Exponential_distribution + *
  • + *
  • + * Norton, M., V. Khokhlov, and S. Uryasev (2019): Calculating CVaR and bPOE for Common Probability + * Distributions with Application to Portfolio Optimization and Density Estimation Annals of + * Operations Research 299 (1-2) 1281-1315 + *
  • + *
  • + * Ross, S. M. (2009): Introduction to Probability and Statistics for Engineers and Scientists + * 4th Edition Associated Press New York, NY + *
  • + *
  • + * Schmidt, D. F., and D. Makalic (2009): Universal Models for the Exponential Distribution IEEE + * Transactions on Information Theory 55 (7) 3087-3090 + *
  • + *
+ * + *

+ * + * + * @author Lakshmi Krishnamurthy + */ + +public class R1PDFAndCDF +{ + + /** + * Entry Point + * + * @param argumentArray Command Line Argument Array + * + * @throws Exception Thrown on Error/Exception Situation + */ + + public static final void main ( + final String[] argumentArray) + throws Exception + { + EnvManager.InitEnv (""); + + double[] horizonArray = {1./12., 0.25, 0.5, 1., 2., 3., 5., 10.}; + double[] kArray = {0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1., 2., 3., 4., 5.}; + double[] lambdaArray = {0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1., 2., 3., 4., 5.}; + + System.out.println ( + "\t||---------------------------------------------------------------------------------------------------------------||" + ); + + System.out.println ( + "\t|| Probability Density across Horizon ||" + ); + + System.out.println ( + "\t||---------------------------------------------------------------------------------------------------------------||" + ); + + System.out.println ( + "\t|| L -> R:" + ); + + System.out.println ( + "\t|| - [Lambda, k] (Left-most Values)" + ); + + System.out.println ( + "\t|| - Probability Density across Time Horizons (Right-most columns)" + ); + + System.out.println ( + "\t||---------------------------------------------------------------------------------------------------------------||" + ); + + for (int i = 0; i < kArray.length; ++i) + { + for (int j = 0; j < lambdaArray.length; ++j) + { + String metricDisplay = "\t|| [" + FormatUtil.FormatDouble ( + kArray[i], 1, 2, 1., false + ) + ", " +FormatUtil.FormatDouble ( + lambdaArray[j], 1, 2, 1., false + ) + "] =>"; + + R1ParetoDistribution paretoDistribution = new R1ParetoDistribution (lambdaArray[j], kArray[i]); + + for (int k = 0; k < horizonArray.length; ++k) + { + metricDisplay += " " + FormatUtil.FormatDouble ( + paretoDistribution.density (horizonArray[k] + kArray[i]), 1, 6, 1. + ) + " |"; + } + + System.out.println (metricDisplay + "|"); + } + } + + System.out.println ( + "\t||---------------------------------------------------------------------------------------------------------------||" + ); + + System.out.println(); + + System.out.println ( + "\t||---------------------------------------------------------------------------------------------------------------||" + ); + + System.out.println ( + "\t|| Cumulative Probability across Horizon ||" + ); + + System.out.println ( + "\t||---------------------------------------------------------------------------------------------------------------||" + ); + + System.out.println ( + "\t|| L -> R:" + ); + + System.out.println ( + "\t|| - [Lambda, k] (Left-most Values)" + ); + + System.out.println ( + "\t|| - Probability Density across Time Horizons (Right-most columns)" + ); + + System.out.println ( + "\t||---------------------------------------------------------------------------------------------------------------||" + ); + + for (int i = 0; i < kArray.length; ++i) + { + for (int j = 0; j < lambdaArray.length; ++j) + { + String metricDisplay = "\t|| [" + FormatUtil.FormatDouble ( + kArray[i], 1, 2, 1., false + ) + ", " +FormatUtil.FormatDouble ( + lambdaArray[j], 1, 2, 1., false + ) + "] =>"; + + R1ParetoDistribution paretoDistribution = new R1ParetoDistribution (lambdaArray[j], kArray[i]); + + for (int k = 0; k < horizonArray.length; ++k) + { + metricDisplay += " " + FormatUtil.FormatDouble ( + paretoDistribution.cumulative (horizonArray[k] + kArray[i]), 1, 6, 1. + ) + " |"; + } + + System.out.println (metricDisplay + "|"); + } + } + + System.out.println ( + "\t||---------------------------------------------------------------------------------------------------------------||" + ); + + EnvManager.TerminateEnv(); + } +} diff --git a/src/main/java/org/drip/sample/pareto/R1CDFAndPDF.java b/src/main/java/org/drip/sample/pareto/R1QuantileVariates.java similarity index 82% rename from src/main/java/org/drip/sample/pareto/R1CDFAndPDF.java rename to src/main/java/org/drip/sample/pareto/R1QuantileVariates.java index f5f484520ea..ef380203f5c 100644 --- a/src/main/java/org/drip/sample/pareto/R1CDFAndPDF.java +++ b/src/main/java/org/drip/sample/pareto/R1QuantileVariates.java @@ -2,7 +2,6 @@ package org.drip.sample.pareto; import org.drip.measure.continuous.R1ParetoDistribution; -import org.drip.measure.exponential.R1RateDistribution; import org.drip.service.common.FormatUtil; import org.drip.service.env.EnvManager; @@ -79,8 +78,8 @@ */ /** - * R1CDFAndPDF illustrates the Density and CDF Metrics Suite generated from R1 Pareto - * Distribution. The References are: + * R1QuantileVariates displays the Generation of Quantiles for the R1 Pareto Distribution. + * The References are: * *

*
    @@ -117,7 +116,7 @@ * @author Lakshmi Krishnamurthy */ -public class R1CDFAndPDF +public class R1QuantileVariates { /** @@ -134,64 +133,65 @@ public static final void main ( { EnvManager.InitEnv (""); - double[] horizonArray = {1./12., 0.25, 0.5, 1., 2., 3., 5., 10.}; + double[] pArray = {0.02, 0.26, 0.50, 0.74, 0.98}; double[] kArray = {0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1., 2., 3., 4., 5.}; double[] lambdaArray = {0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1., 2., 3., 4., 5.}; System.out.println ( - "\t||--------------------------------------------------------------------------------------------------------||" + "\t||-----------------------------------------------------------------------------------------||" ); System.out.println ( - "\t|| Probability Density across Horizon ||" + "\t|| Quantile Variates ||" ); System.out.println ( - "\t||--------------------------------------------------------------------------------------------------------||" + "\t||-----------------------------------------------------------------------------------------||" ); System.out.println ( - "\t|| L -> R:" + "\t|| L -> R:" ); System.out.println ( - "\t|| - Lambda (Left-most Value)" + "\t|| - Lambda, k [Input]" ); System.out.println ( - "\t|| - Probability Density across Time Horizons (Right-most columns)" + "\t|| - Quantile Variates [output]" ); System.out.println ( - "\t||--------------------------------------------------------------------------------------------------------||" + "\t||-----------------------------------------------------------------------------------------||" ); - for (int i = 0; i < lambdaArray.length; ++i) + for (int i = 0; i < kArray.length; ++i) { - String metricDisplay = "\t|| " + FormatUtil.FormatDouble ( - lambdaArray[i], 1, 2, 1. - ) + " =>"; - - R1ParetoDistribution paretoDistribution = new R1ParetoDistribution (lambdaArray[i], 1.); - - for (int j = 0; j < horizonArray.length; ++j) + for (int j = 0; j < lambdaArray.length; ++j) { - metricDisplay += " " + FormatUtil.FormatDouble ( - paretoDistribution.density (horizonArray[j]), 1, 6, 1. - ) + " |"; + R1ParetoDistribution paretoDistribution = new R1ParetoDistribution (lambdaArray[j], kArray[i]); + + String display = "\t|| [" + FormatUtil.FormatDouble ( + lambdaArray[j], 2, 2, 1. + ) + ", " + FormatUtil.FormatDouble ( + kArray[i], 2, 2, 1. + ) + "] =>"; + + for (int k = 0; k < pArray.length; ++k) + { + display += FormatUtil.FormatDouble ( + paretoDistribution.quantile (pArray[k]), 9, 1, 1. + ) + " |"; + } + + System.out.println (display + "|"); } - - System.out.println (metricDisplay + "|"); } System.out.println ( - "\t||--------------------------------------------------------------------------------------------------------||" + "\t||-----------------------------------------------------------------------------------------||" ); - System.out.println(); - - System.out.println(); - EnvManager.TerminateEnv(); } } diff --git a/src/main/java/org/drip/sample/pareto/R1Statistics.java b/src/main/java/org/drip/sample/pareto/R1Statistics.java new file mode 100644 index 00000000000..e124e4767f3 --- /dev/null +++ b/src/main/java/org/drip/sample/pareto/R1Statistics.java @@ -0,0 +1,221 @@ + +package org.drip.sample.pareto; + +import org.drip.measure.continuous.R1ParetoDistribution; +import org.drip.service.common.FormatUtil; +import org.drip.service.env.EnvManager; + +/* + * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + */ + +/*! + * Copyright (C) 2023 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. + */ + +/** + * R1Statistics illustrates the Generation of Significant Statistics for the R1 Pareto + * Distribution. The References are: + * + *

    + *
      + *
    • + * Devroye, L. (1986): Non-Uniform Random Variate Generation Springer-Verlag New York + *
    • + *
    • + * Exponential Distribution (2019): Exponential Distribution + * https://en.wikipedia.org/wiki/Exponential_distribution + *
    • + *
    • + * Norton, M., V. Khokhlov, and S. Uryasev (2019): Calculating CVaR and bPOE for Common Probability + * Distributions with Application to Portfolio Optimization and Density Estimation Annals of + * Operations Research 299 (1-2) 1281-1315 + *
    • + *
    • + * Ross, S. M. (2009): Introduction to Probability and Statistics for Engineers and Scientists + * 4th Edition Associated Press New York, NY + *
    • + *
    • + * Schmidt, D. F., and D. Makalic (2009): Universal Models for the Exponential Distribution IEEE + * Transactions on Information Theory 55 (7) 3087-3090 + *
    • + *
    + * + *

    + * + * + * @author Lakshmi Krishnamurthy + */ + +public class R1Statistics +{ + + /** + * Entry Point + * + * @param argumentArray Command Line Argument Array + * + * @throws Exception Thrown on Error/Exception Situation + */ + + public static final void main ( + final String[] argumentArray) + throws Exception + { + EnvManager.InitEnv (""); + + double[] kArray = {0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1., 2., 3., 4., 5.}; + double[] lambdaArray = {0.02, 0.05, 0.1, 0.2, 0.5, 1., 2., 3., 4., 5., 10., 20.}; + + System.out.println ( + "\t||----------------------------------------------------------------------------------||" + ); + + System.out.println ( + "\t|| L -> R:" + ); + + System.out.println ( + "\t|| - Lambda, k [Input]" + ); + + System.out.println ( + "\t|| - Mean" + ); + + System.out.println ( + "\t|| - Mode" + ); + + System.out.println ( + "\t|| - Variance" + ); + + System.out.println ( + "\t|| - Skewness" + ); + + System.out.println ( + "\t|| - Excess Kurtosis" + ); + + System.out.println ( + "\t|| - Fisher Information" + ); + + System.out.println ( + "\t|| - Inter-quantile Range (IQR)" + ); + + System.out.println ( + "\t||----------------------------------------------------------------------------------||" + ); + + for (int i = 0; i < kArray.length; ++i) + { + for (int j = 0; j < lambdaArray.length; ++j) + { + R1ParetoDistribution paretoDistribution = new R1ParetoDistribution (lambdaArray[j], kArray[i]); + + System.out.println ( + "\t|| [" + FormatUtil.FormatDouble ( + lambdaArray[j], 2, 2, 1. + ) + "," + FormatUtil.FormatDouble ( + kArray[i], 2, 2, 1. + ) + "] =>" + FormatUtil.FormatDouble ( + paretoDistribution.mean(), 2, 3, 1. + /* ) + " |" + FormatUtil.FormatDouble ( + paretoDistribution.median(), 3, 3, 1. + ) + " |" + FormatUtil.FormatDouble ( + paretoDistribution.mode(), 1, 1, 1. + ) + " |" + FormatUtil.FormatDouble ( + paretoDistribution.variance(), 4, 4, 1. + ) + " |" + FormatUtil.FormatDouble ( + paretoDistribution.skewness(), 1, 1, 1. + ) + " |" + FormatUtil.FormatDouble ( + paretoDistribution.excessKurtosis(), 2, 3, 1. + ) + " |" + FormatUtil.FormatDouble ( + paretoDistribution.fisherInformation(), 4, 4, 1. + ) + " |" + FormatUtil.FormatDouble ( + paretoDistribution.iqr(), 2, 3, 1. */ + ) + " ||" + ); + } + } + + System.out.println ( + "\t||----------------------------------------------------------------------------------||" + ); + + EnvManager.TerminateEnv(); + } +}