From c5d879fdb09a0aa3d15ffd9cdf57447baf7cb4b9 Mon Sep 17 00:00:00 2001 From: shivam Ahir <11shivam00@gmail.com> Date: Sat, 9 Mar 2024 13:44:14 +0530 Subject: [PATCH 1/2] docs: improve README examples of stats/base/dists/triangular namespace mean mode median --- .../stats/base/dists/triangular/README.md | 18 ++++++++++++++++++ .../base/dists/triangular/examples/index.js | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/lib/node_modules/@stdlib/stats/base/dists/triangular/README.md b/lib/node_modules/@stdlib/stats/base/dists/triangular/README.md index d98eabf8970d..8ba8a7b0e2ac 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/triangular/README.md +++ b/lib/node_modules/@stdlib/stats/base/dists/triangular/README.md @@ -116,6 +116,24 @@ var objectKeys = require( '@stdlib/utils/keys' ); var triangular = require( '@stdlib/stats/base/dists/triangular' ); console.log( objectKeys( triangular ) ); + +console.log(triangular.mean(0.0, 1.0, 0.8)); +// => ~0.6 + +console.log(triangular.mean(2.0, 8.0, 5.0)); +// => 5.0 + +console.log(triangular.median(4.0, 12.0, 5.0)); +// => ~6.708 + +console.log(triangular.median(2.0, 8.0, 5.0)); +// => 5.0 + +console.log(triangular.mode(4.0, 12.0, 5.0)); +// => 5.0 + +console.log(triangular.mode(2.0, 8.0, 5.0)); +// => 5.0 ``` diff --git a/lib/node_modules/@stdlib/stats/base/dists/triangular/examples/index.js b/lib/node_modules/@stdlib/stats/base/dists/triangular/examples/index.js index aeb22ffc0745..8c0f07de66bf 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/triangular/examples/index.js +++ b/lib/node_modules/@stdlib/stats/base/dists/triangular/examples/index.js @@ -22,3 +22,21 @@ var objectKeys = require( '@stdlib/utils/keys' ); var triangular = require( './../lib' ); console.log( objectKeys( triangular ) ); + +console.log(triangular.mean(0.0, 1.0, 0.8)); +// => ~0.6 + +console.log(triangular.mean(2.0, 8.0, 5.0)); +// => 5.0 + +console.log(triangular.median(4.0, 12.0, 5.0)); +// => ~6.708 + +console.log(triangular.median(2.0, 8.0, 5.0)); +// => 5.0 + +console.log(triangular.mode(4.0, 12.0, 5.0)); +// => 5.0 + +console.log(triangular.mode(2.0, 8.0, 5.0)); +// => 5.0 \ No newline at end of file From ed00dfdc7c09fbd6186bbc8fb455a15f92cb7191 Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Thu, 10 Oct 2024 21:13:10 -0400 Subject: [PATCH 2/2] chore: update examples --- .../stats/base/dists/triangular/README.md | 103 ++++++++++++++---- .../base/dists/triangular/examples/index.js | 91 +++++++++++++--- 2 files changed, 160 insertions(+), 34 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/triangular/README.md b/lib/node_modules/@stdlib/stats/base/dists/triangular/README.md index 8ba8a7b0e2ac..4436f4431bf8 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/triangular/README.md +++ b/lib/node_modules/@stdlib/stats/base/dists/triangular/README.md @@ -112,28 +112,91 @@ y = dist.quantile( 1.9 ); ```javascript -var objectKeys = require( '@stdlib/utils/keys' ); +var triangularRandomFactory = require( '@stdlib/random/base/triangular' ).factory; +var uniformRandomFactory = require( '@stdlib/random/base/uniform' ).factory; +var filledarrayBy = require( '@stdlib/array/filled-by' ); +var variance = require( '@stdlib/stats/base/variance' ); +var linspace = require( '@stdlib/array/base/linspace' ); +var mean = require( '@stdlib/stats/base/mean' ); +var abs = require( '@stdlib/math/base/special/abs' ); var triangular = require( '@stdlib/stats/base/dists/triangular' ); -console.log( objectKeys( triangular ) ); - -console.log(triangular.mean(0.0, 1.0, 0.8)); -// => ~0.6 - -console.log(triangular.mean(2.0, 8.0, 5.0)); -// => 5.0 - -console.log(triangular.median(4.0, 12.0, 5.0)); -// => ~6.708 - -console.log(triangular.median(2.0, 8.0, 5.0)); -// => 5.0 - -console.log(triangular.mode(4.0, 12.0, 5.0)); -// => 5.0 - -console.log(triangular.mode(2.0, 8.0, 5.0)); -// => 5.0 +// Define the parameters of the triangular distribution: +var a = 0.0; // Minimum value +var b = 10.0; // Maximum value +var c = 4.0; // Mode (most likely value) + +// Generate an array of x values: +var x = linspace( a, b, 100 ); + +// Compute the PDF for each x: +var triangularPDF = triangular.pdf.factory( a, b, c ); +var pdf = filledarrayBy( x.length, 'float64', triangularPDF ); + +// Compute the CDF for each x: +var triangularCDF = triangular.cdf.factory( a, b, c ); +var cdf = filledarrayBy( x.length, 'float64', triangularCDF ); + +// Output the PDF and CDF values: +console.log( 'x values:', x ); +console.log( 'PDF values:', pdf ); +console.log( 'CDF values:', cdf ); + +// Compute statistical properties: +var theoreticalMean = triangular.mean( a, b, c ); +var theoreticalVariance = triangular.variance( a, b, c ); +var theoreticalSkewness = triangular.skewness( a, b, c ); +var theoreticalKurtosis = triangular.kurtosis( a, b, c ); + +console.log( 'Theoretical Mean:', theoreticalMean ); +console.log( 'Theoretical Variance:', theoreticalVariance ); +console.log( 'Skewness:', theoreticalSkewness ); +console.log( 'Kurtosis:', theoreticalKurtosis ); + +// Generate random samples from the triangular distribution: +var rtriangular = triangularRandomFactory( a, b, c ); +var n = 1000; +var samples = filledarrayBy( n, 'float64', rtriangular ); + +// Compute sample mean and variance: +var sampleMean = mean( n, samples, 1 ); +var sampleVariance = variance( n, 1, samples, 1 ); + +console.log( 'Sample Mean:', sampleMean ); +console.log( 'Sample Variance:', sampleVariance ); + +// Compare sample statistics to theoretical values: +console.log( 'Difference in Mean:', abs( theoreticalMean - sampleMean ) ); +console.log( 'Difference in Variance:', abs( theoreticalVariance - sampleVariance ) ); + +// Demonstrate the relationship between the triangular distribution and the sum of uniform distributions, namely that the sum of two independent Uniform(0, 1) random variables follows a Triangular(0, 2, 1) distribution. + +// Generate samples by summing two independent Uniform(0, 1) random variables: +var runiform = uniformRandomFactory( 0.0, 1.0 ); + +function runiformSum() { + return runiform() + runiform(); +} +var sumSamples = filledarrayBy( n, 'float64', runiformSum ); + +// Compute sample mean and variance for the sum: +var sumSampleMean = mean( n, sumSamples, 1 ); +var sumSampleVariance = variance( n, 1, sumSamples, 1 ); + +// Theoretical mean and variance of Triangular(0, 2, 1): +var a2 = 0.0; +var b2 = 2.0; +var c2 = 1.0; + +var triMean = triangular.mean( a2, b2, c2 ); +var triVariance = triangular.variance( a2, b2, c2 ); + +console.log( 'Sum Sample Mean:', sumSampleMean ); +console.log( 'Sum Sample Variance:', sumSampleVariance ); +console.log( 'Theoretical Mean (Sum of Uniforms):', triMean ); +console.log( 'Theoretical Variance (Sum of Uniforms):', triVariance ); +console.log( 'Difference in Mean:', abs( triMean - sumSampleMean ) ); +console.log( 'Difference in Variance:', abs( triVariance - sumSampleVariance ) ); ``` diff --git a/lib/node_modules/@stdlib/stats/base/dists/triangular/examples/index.js b/lib/node_modules/@stdlib/stats/base/dists/triangular/examples/index.js index 8c0f07de66bf..42f6835e8d12 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/triangular/examples/index.js +++ b/lib/node_modules/@stdlib/stats/base/dists/triangular/examples/index.js @@ -18,25 +18,88 @@ 'use strict'; -var objectKeys = require( '@stdlib/utils/keys' ); +var triangularRandomFactory = require( '@stdlib/random/base/triangular' ).factory; +var uniformRandomFactory = require( '@stdlib/random/base/uniform' ).factory; +var filledarrayBy = require( '@stdlib/array/filled-by' ); +var variance = require( '@stdlib/stats/base/variance' ); +var linspace = require( '@stdlib/array/base/linspace' ); +var mean = require( '@stdlib/stats/base/mean' ); +var abs = require( '@stdlib/math/base/special/abs' ); var triangular = require( './../lib' ); -console.log( objectKeys( triangular ) ); +// Define the parameters of the triangular distribution: +var a = 0.0; // Minimum value +var b = 10.0; // Maximum value +var c = 4.0; // Mode (most likely value) -console.log(triangular.mean(0.0, 1.0, 0.8)); -// => ~0.6 +// Generate an array of x values: +var x = linspace( a, b, 100 ); -console.log(triangular.mean(2.0, 8.0, 5.0)); -// => 5.0 +// Compute the PDF for each x: +var triangularPDF = triangular.pdf.factory( a, b, c ); +var pdf = filledarrayBy( x.length, 'float64', triangularPDF ); -console.log(triangular.median(4.0, 12.0, 5.0)); -// => ~6.708 +// Compute the CDF for each x: +var triangularCDF = triangular.cdf.factory( a, b, c ); +var cdf = filledarrayBy( x.length, 'float64', triangularCDF ); -console.log(triangular.median(2.0, 8.0, 5.0)); -// => 5.0 +// Output the PDF and CDF values: +console.log( 'x values:', x ); +console.log( 'PDF values:', pdf ); +console.log( 'CDF values:', cdf ); -console.log(triangular.mode(4.0, 12.0, 5.0)); -// => 5.0 +// Compute statistical properties: +var theoreticalMean = triangular.mean( a, b, c ); +var theoreticalVariance = triangular.variance( a, b, c ); +var theoreticalSkewness = triangular.skewness( a, b, c ); +var theoreticalKurtosis = triangular.kurtosis( a, b, c ); -console.log(triangular.mode(2.0, 8.0, 5.0)); -// => 5.0 \ No newline at end of file +console.log( 'Theoretical Mean:', theoreticalMean ); +console.log( 'Theoretical Variance:', theoreticalVariance ); +console.log( 'Skewness:', theoreticalSkewness ); +console.log( 'Kurtosis:', theoreticalKurtosis ); + +// Generate random samples from the triangular distribution: +var rtriangular = triangularRandomFactory( a, b, c ); +var n = 1000; +var samples = filledarrayBy( n, 'float64', rtriangular ); + +// Compute sample mean and variance: +var sampleMean = mean( n, samples, 1 ); +var sampleVariance = variance( n, 1, samples, 1 ); + +console.log( 'Sample Mean:', sampleMean ); +console.log( 'Sample Variance:', sampleVariance ); + +// Compare sample statistics to theoretical values: +console.log( 'Difference in Mean:', abs( theoreticalMean - sampleMean ) ); +console.log( 'Difference in Variance:', abs( theoreticalVariance - sampleVariance ) ); + +// Demonstrate the relationship between the triangular distribution and the sum of uniform distributions, namely that the sum of two independent Uniform(0, 1) random variables follows a Triangular(0, 2, 1) distribution. + +// Generate samples by summing two independent Uniform(0, 1) random variables: +var runiform = uniformRandomFactory( 0.0, 1.0 ); + +function runiformSum() { + return runiform() + runiform(); +} +var sumSamples = filledarrayBy( n, 'float64', runiformSum ); + +// Compute sample mean and variance for the sum: +var sumSampleMean = mean( n, sumSamples, 1 ); +var sumSampleVariance = variance( n, 1, sumSamples, 1 ); + +// Theoretical mean and variance of Triangular(0, 2, 1): +var a2 = 0.0; +var b2 = 2.0; +var c2 = 1.0; + +var triMean = triangular.mean( a2, b2, c2 ); +var triVariance = triangular.variance( a2, b2, c2 ); + +console.log( 'Sum Sample Mean:', sumSampleMean ); +console.log( 'Sum Sample Variance:', sumSampleVariance ); +console.log( 'Theoretical Mean (Sum of Uniforms):', triMean ); +console.log( 'Theoretical Variance (Sum of Uniforms):', triVariance ); +console.log( 'Difference in Mean:', abs( triMean - sumSampleMean ) ); +console.log( 'Difference in Variance:', abs( triVariance - sumSampleVariance ) );