Skip to content

Instantly share code, notes, and snippets.

@diverted247
Created August 20, 2013 05:11
Show Gist options
  • Save diverted247/6277307 to your computer and use it in GitHub Desktop.
Save diverted247/6277307 to your computer and use it in GitHub Desktop.
module hist.utils {
// TypeScript Port of http://clauswitt.com/simple-statistics-in-javascript.html
// https://gist.github.com/clauswitt/1285478
// Use:
// var stats = new hist.utils.Stats( [ 1 , 2 , 3 , 4 , 5 , 6 ] );
// stats.getArithmeticMean();
// stats.getGeometricMean();
export class Stats {
private a:number[];
constructor( arr:number[] ){
this.a = arr || [];
}
//http://en.wikipedia.org/wiki/Mean#Arithmetic_mean_.28AM.29
getArithmeticMean():number {
var sum = 0;
var length = this.a.length;
for( var i=0; i<length; i++ ){
sum += this.a[ i ];
}
return sum/length;
}
//http://en.wikipedia.org/wiki/Mean#Geometric_mean_.28GM.29
getGeometricMean():number {
var product = 1;
var length = this.a.length;
for( var i=0; i<length; i++ ){
product = product * this.a[ i ];
}
return Math.pow( product , ( 1/length ) );
}
//http://en.wikipedia.org/wiki/Mean#Harmonic_mean_.28HM.29
getHarmonicMean():number {
var sum = 0;
var length = this.a.length;
for( var i = 0; i < length; i++ ){
sum += ( 1 / this.a[ i ] );
}
return length/sum;
}
//http://en.wikipedia.org/wiki/Standard_deviation
getStandardDeviation():number {
var arithmeticMean = this.getArithmeticMean();
var sum = 0
var length = this.a.length;
for( var i = 0; i < length; i++ ){
sum += Math.pow( this.a[ i ] - arithmeticMean , 2 );
}
return Math.pow( sum / length , 0.5 );
}
//http://en.wikipedia.org/wiki/Median
getMedian():number {
var length = this.a.length;
var middleId = Math.floor( length / 2 );
var arr = this.a.sort( this.sort );
return arr[ middleId ];
}
setArray( arr:number[] ){
this.a = arr;
return self;
}
getArray():number[] {
return this.a;
}
private sort( a , b ){
return a - b;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment