Skip to content

Commit

Permalink
chore: update examples
Browse files Browse the repository at this point in the history
  • Loading branch information
Planeshifter committed Oct 11, 2024
1 parent cba3c7b commit 8408fe9
Show file tree
Hide file tree
Showing 2 changed files with 157 additions and 22 deletions.
94 changes: 80 additions & 14 deletions lib/node_modules/@stdlib/stats/base/dists/chi/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,25 +101,91 @@ var mu = dist.mean;

## Examples

<!-- TODO: better examples -->

<!-- eslint no-undef: "error" -->

```javascript
var objectKeys = require( '@stdlib/utils/keys' );
var chiRandomFactory = require( '@stdlib/random/base/chi' ).factory;
var filledarrayBy = require( '@stdlib/array/filled-by' );
var variance = require( '@stdlib/stats/base/variance' );
var linspace = require( '@stdlib/array/base/linspace' );
var rayleigh = require( '@stdlib/stats/base/dists/rayleigh' );
var mean = require( '@stdlib/stats/base/mean' );
var abs = require( '@stdlib/math/base/special/abs' );
var chi = require( '@stdlib/stats/base/dists/chi' );

console.log( objectKeys( chi ) );

console.log(chi.variance( 9.0 ));
// => ~0.485

console.log(chi.variance( 0.5 ));
// => ~0.272

console.log(chi.variance( -1.0 ));
// => NaN

// Define the degrees of freedom parameter:
var k = 2;

// Generate an array of x values:
var x = linspace( 0, 10, 100 );

// Compute the PDF for each x:
var chiPDF = chi.pdf.factory( k );
var pdf = filledarrayBy( x.length, 'float64', chiPDF );

// Compute the CDF for each x:
var chiCDF = chi.cdf.factory( k );
var cdf = filledarrayBy( x.length, 'float64', chiCDF );

// 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 = chi.mean( k );
var theoreticalVariance = chi.variance( k );
var theoreticalSkewness = chi.skewness( k );
var theoreticalKurtosis = chi.kurtosis( k );

console.log( 'Theoretical Mean:', theoreticalMean );
console.log( 'Theoretical Variance:', theoreticalVariance );
console.log( 'Skewness:', theoreticalSkewness );
console.log( 'Kurtosis:', theoreticalKurtosis );

// Generate random samples from the Chi distribution:
var rchi = chiRandomFactory( k );
var n = 1000;
var samples = filledarrayBy( n, 'float64', rchi );

// 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 with the Rayleigh distribution when k=2:
var rayleighPDF = rayleigh.pdf.factory( 1.0 );
var rayleighCDF = rayleigh.cdf.factory( 1.0 );

// Compute Rayleigh PDF and CDF for each x:
var rayleighPDFValues = filledarrayBy( x.length, 'float64', rayleighPDF );

var rayleighCDFValues = filledarrayBy( x.length, 'float64', rayleighCDF );

// Compare Chi and Rayleigh PDFs and CDFs:
var maxDiffPDF = 0.0;
var maxDiffCDF = 0.0;
var diffPDF;
var diffCDF;
var i;
for ( i = 0; i < x.length; i++ ) {
diffPDF = abs( pdf[ i ] - rayleighPDFValues[ i ] );
if ( diffPDF > maxDiffPDF ) {
maxDiffPDF = diffPDF;
}
diffCDF = abs( cdf[ i ] - rayleighCDFValues[ i ] );
if ( diffCDF > maxDiffCDF ) {
maxDiffCDF = diffCDF;
}
}
console.log( 'Maximum difference between Chi(k=2) PDF and Rayleigh PDF:', maxDiffPDF );
console.log( 'Maximum difference between Chi(k=2) CDF and Rayleigh CDF:', maxDiffCDF );
```

</section>
Expand Down
85 changes: 77 additions & 8 deletions lib/node_modules/@stdlib/stats/base/dists/chi/examples/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,85 @@

'use strict';

var objectKeys = require( '@stdlib/utils/keys' );
var chiRandomFactory = require( '@stdlib/random/base/chi' ).factory;
var filledarrayBy = require( '@stdlib/array/filled-by' );
var variance = require( '@stdlib/stats/base/variance' );
var linspace = require( '@stdlib/array/base/linspace' );
var rayleigh = require( '@stdlib/stats/base/dists/rayleigh' );
var mean = require( '@stdlib/stats/base/mean' );
var abs = require( '@stdlib/math/base/special/abs' );
var chi = require( './../lib' );

console.log( objectKeys( chi ) );
// Define the degrees of freedom parameter:
var k = 2;

console.log(chi.variance( 9.0 ));
// => ~0.485
// Generate an array of x values:
var x = linspace( 0, 10, 100 );

console.log(chi.variance( 0.5 ));
// => ~0.272
// Compute the PDF for each x:
var chiPDF = chi.pdf.factory( k );
var pdf = filledarrayBy( x.length, 'float64', chiPDF );

console.log(chi.variance( -1.0 ));
// => NaN
// Compute the CDF for each x:
var chiCDF = chi.cdf.factory( k );
var cdf = filledarrayBy( x.length, 'float64', chiCDF );

// 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 = chi.mean( k );
var theoreticalVariance = chi.variance( k );
var theoreticalSkewness = chi.skewness( k );
var theoreticalKurtosis = chi.kurtosis( k );

console.log( 'Theoretical Mean:', theoreticalMean );
console.log( 'Theoretical Variance:', theoreticalVariance );
console.log( 'Skewness:', theoreticalSkewness );
console.log( 'Kurtosis:', theoreticalKurtosis );

// Generate random samples from the Chi distribution:
var rchi = chiRandomFactory( k );
var n = 1000;
var samples = filledarrayBy( n, 'float64', rchi );

// 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 with the Rayleigh distribution when k=2:
var rayleighPDF = rayleigh.pdf.factory( 1.0 );
var rayleighCDF = rayleigh.cdf.factory( 1.0 );

// Compute Rayleigh PDF and CDF for each x:
var rayleighPDFValues = filledarrayBy( x.length, 'float64', rayleighPDF );

var rayleighCDFValues = filledarrayBy( x.length, 'float64', rayleighCDF );

// Compare Chi and Rayleigh PDFs and CDFs:
var maxDiffPDF = 0.0;
var maxDiffCDF = 0.0;
var diffPDF;
var diffCDF;
var i;
for ( i = 0; i < x.length; i++ ) {
diffPDF = abs( pdf[ i ] - rayleighPDFValues[ i ] );
if ( diffPDF > maxDiffPDF ) {
maxDiffPDF = diffPDF;
}
diffCDF = abs( cdf[ i ] - rayleighCDFValues[ i ] );
if ( diffCDF > maxDiffCDF ) {
maxDiffCDF = diffCDF;
}
}
console.log( 'Maximum difference between Chi(k=2) PDF and Rayleigh PDF:', maxDiffPDF );
console.log( 'Maximum difference between Chi(k=2) CDF and Rayleigh CDF:', maxDiffCDF );

0 comments on commit 8408fe9

Please sign in to comment.