Chi
Chi distribution.
Usage
var chi = require( '@stdlib/stats/base/dists/chi' );
chi
Chi distribution.
var dist = chi;
// returns {...}
The namespace contains the following distribution functions:
cdf( x, k )
: Chi distribution cumulative distribution function.logpdf( x, k )
: evaluate the natural logarithm of the probability density function (PDF) for a chi distribution .pdf( x, k )
: Chi distribution probability density function (PDF).quantile( p, k )
: Chi distribution quantile function.
The namespace contains the following functions for calculating distribution properties:
entropy( k )
: Chi distribution differential entropy.kurtosis( k )
: Chi distribution excess kurtosis.mean( k )
: Chi distribution expected value.mode( k )
: Chi distribution mode.skewness( k )
: Chi distribution skewness.stdev( k )
: Chi distribution standard deviation.variance( k )
: Chi distribution variance.
The namespace contains a constructor function for creating a Chi distribution object.
Chi( [k] )
: Chi distribution constructor.
var Chi = require( '@stdlib/stats/base/dists/chi' ).Chi;
var dist = new Chi( 4.0 );
var mu = dist.mean;
// returns ~1.88
Examples
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 absdiff = require( '@stdlib/math/base/utils/absolute-difference' );
var mean = require( '@stdlib/stats/base/mean' );
var abs = require( '@stdlib/math/base/special/abs' );
var max = require( '@stdlib/math/base/special/max' );
var chi = require( '@stdlib/stats/base/dists/chi' );
// 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 = absdiff( pdf[ i ], rayleighPDFValues[ i ] );
maxDiffPDF = max( maxDiffPDF, diffPDF );
diffCDF = absdiff( cdf[ i ], rayleighCDFValues[ i ] );
maxDiffCDF = max( 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 );