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:

The namespace contains a constructor function for creating a Chi distribution object.

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 );
Did you find this page helpful?