Standard deviation in plain JavaScript

David James Knight
22 Jul 2019

Standard deviation (“σ”, or sigma, in mathematical notation) is the amount of variation in a data set relative to its mean. A low standard deviation indicates that most of the values are grouped close to the mean, whereas a high standard deviation indicates that the values are spread out over a large range.

In a normal distribution (the classic “bell curve”), 68.27% of values fall within one standard deviation, 95.45% fall within two standard deviations, and 99.73% fall within three standard deviations of the mean, respectively.

Code

This function takes an array of numeric values and returns the standard deviation:

function standardDeviation(arr) {
    return pipe(
        arr => arr.map(x => Math.pow(x - mean(arr), 2)),
        mean,
        Math.sqrt
    )(arr)
}

Note that standardDeviation invokes two other functions: pipe and mean.

The pipe function passes (or “pipes”) an object through a given set of functions in sequence, rather than from the inside out (as in nested functions). This single-line implementation was inspired by Eric Elliot’s writings on functional JavaScript.

const pipe = (...fns) => (obj) => fns.reduce((x, f) => f(x), obj)

The mean function takes an array of numeric values and returns their mean (or average value):

const mean = (arr) => arr.reduce((sum, x) => sum + x, 0) / arr.length

Usage Example

standardDeviation([95, 98, 29, 35, 77, 46, 41, 65, 90, 43])
   
// => 25.05773333723543
03 Jun 2019

Pipe functions in Python

A pipe function passes an object through a sequence of operations, with the output of each operation being the input of the next. Operations are executed in the order written, making pipes more readable than nested functions (which are executed from the inside out).

More >>
12 Sep 2018

Safely monkeypatching a .pipe() method in JavaScript

Use an ES6 Symbol to invoke a pipe function without the potential conflicts caused by monkeypatching a custom method onto the Object prototype.

More >>