Skip to content

compute-io/gmean

Repository files navigation

Geometric Mean

NPM version Build Status Coverage Dependencies

Computes the geometric mean of an array.

Installation

$ npm install compute-gmean

Usage

var gmean = require( 'compute-gmean' );

gmean( arr[, accessor] )

Computes the geometric mean of an array. For numeric arrays,

var data = [ 1, 5, 2, 3, 7 ];

var mu = gmean( data );
// returns ~2.914

For non-numeric arrays, provide an accessor function for accessing numeric values

var arr = [
	{'x':1},
	{'x':5},
	{'x':2},
	{'x':3},
	{'x':7}
]:

function getValue( d ) {
	return d.x;
}

var value = prod( arr, getvalue );
// returns ~2.194

Examples

var gmean = require( 'compute-gmean' );

var data = new Array( 1000 );
for ( var i = 0; i < data.length; i++ ) {
	data[ i ] = Math.random() * 100;
}

console.log( gmean( data ) );

To run the example code from the top-level application directory,

$ node ./examples/index.js

Notes

  1. Only calculate the geometric mean of an array of positive numbers. The textbook formula for calculating the geometric mean involves taking the product of all array elements. If one element is 0, then the product is 0, even if all other values are >>> 0, yielding a nonsensical geometric mean (and measure of the central tendency). Nonsensical results also arise when an array contains negative values leading to a product without positive roots and a geometric mean which does not map to the measure's geometric interpretation. For more information, see Handbook of Parametric and Nonparametric Statistical Procedures: Third Edition by David J. Sheskin.
  2. If an array contains values less than or equal to 0, the function returns NaN.
  3. If provided an empty array, the function returns null.
  4. For arrays exceeding memory constraints, you are encouraged to use streams; see flow-gmean.

Tests

Unit

Unit tests use the Mocha test framework with Chai assertions. To run the tests, execute the following command in the top-level application directory:

$ make test

All new feature development should have corresponding unit tests to validate correct functionality.

Test Coverage

This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:

$ make test-cov

Istanbul creates a ./reports/coverage directory. To access an HTML version of the report,

$ make view-cov

License

MIT license.

Copyright

Copyright © 2014-2015. Rebekah Smith.