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..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,10 +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 ) ); +// 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 aeb22ffc0745..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,7 +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) + +// 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 ) );