Chris Mendez in Statistics, For Developers, ES6

Statistics: Calculating Probabilities using ES6

Suppose you wanted to calculate the percentage of men that weigh inbetween 140 and 170 lbs. This is possible if you carry a few data points such as the average weight of men (mean), the standard deviation, and the specific weight you want to measure (data point).

Step 0 - Install Normal Distribution Package

The normal distribution package contains a "Standard Normal Distribution" table that will help us with our calculations.

npm i normal-distribution --save

Step 1 - Let's Start Solving

'use strict';
const util = require('util');
const NormalDistribution = require("normal-distribution");

// This class will make it easy for us to get the values that are left of the z-score.
class StandardNormalDistTable {
    // Provide the Z Table Object
    static get zTable(){
        return NormalDistribution.default.zTable;
    }
    // Based on the z-score, provide the chart value
    static chartValue(zScore){
        let absZScore = Math.abs(zScore);
        console.log(absZScore)
        let zRow = Math.floor(absZScore * 10) / 10;
        //let zCol = ._round((Math.round(absZScore * 100) % 10) / 100, 2);
        let zColIndex = (Math.round(absZScore * 100) % 10);
        let chartValue = this.zTable[zRow][zColIndex];
        return chartValue;
    }
}

// Problem #1
// Which percentage of men weigh more than 211 lbs?
// // // // // // // // // // // // // // // // // //
function overWeight(mean, standardDeviation, dataPoint){
    // A. First create a normal distribution object.
    var normDist = new NormalDistribution.default(mean, standardDeviation)
    // B. The zscore will tell you how far you are from the mean.
    var zScore = normDist.zScore(dataPoint);
    // C. Use the zscore to get the value from the distribution table.
    var chartValue = StandardNormalDistTable.chartValue(zScore);
    // D. Subscract from 1
    let value = Number( (1 - chartValue).toFixed(3) );
    // E. We're done.
    let solution = util.format('Around %s of men weight more than %s pounds.', value, dataPoint);
    console.log( solution);
}
overWeight(150, 25, 211)


// Problem #2
// What is the probability that a man weighs between 170 and 140 lbs
// // // // // // // // // // // // // // // // // //
function inBetween(mean, standardDeviation, lowDataPoint, highDataPoint){
    // A. Find the Z Score for the low data point.
    var zScore = (lowDataPoint - mean) / standardDeviation;
    var chartValue = StandardNormalDistTable.chartValue( zScore );
    var valueLow = Number( (1 - chartValue).toFixed(3) );

    // B. Find the Z Score for the high data point.
    var zScore = (highDataPoint - mean) / standardDeviation;
    var chartValue = StandardNormalDistTable.chartValue( zScore );
    var valueHigh = Number( chartValue.toFixed(3) );

    // C. Subtract the two values to get the center & make it a percentage
    var value = Number( (valueHigh - valueLow ).toFixed(3) * 100 );
    let solution = util.format('About %s% of the men are between %s and %s pounds.', value, lowDataPoint, highDataPoint);
    console.log(solution)
}
inBetween(150, 25, 140, 170)

Resources