Contributing to simple-statistics
Simple statistics is a statistics library that can be both used and read. It should help programmers learn statistics and statisticians learn programming. In order to achieve this goal, it must be simple and explanatory.
- Conditional Operator
- ES5 Array methods
eval, and other forms of
- Most micro-optimizations, like alternative for loop forms
- Shortcut branching
// # harmonic mean // // a mean function typically used to find the average of rates // // this is the reciprocal of the arithmetic mean of the reciprocals // of the input numbers // // This runs on `O(n)`, linear time in respect to the array
simple-statistics tries to stay away from speaking only in the language of math:
in the source:
- UTF8 can be hard to type, since users need to memorize key combinations or code points
- Mathematical symbols have meanings that are often better communicated by words:
in the form of code, we do not run out of space on the paper, and can afford
to call a variable
Every function has a comment that ideally includes:
- The English, long-form name of the method
- What the method does
- What purpose the method typically serves
- A link to a longer description on Wikipedia, Mathematica, or another web-accessible, non-paywalled source
- The efficiency of the function in terms of Big-O notation, if appropriate
- If the function depends on another function in the library, a note of this, like
depends on mean()
simple-statistics has a testsuite located in
test/spec/. Each test file
covers a specific topic and tries to test against known values:
- Values produced by trusted statistics software like R or scipy
- Common-sense results
Tests can be run in node.js and are run on every commit to GitHub by Travis-CI.
To run tests:
npm install npm test
While the code is meant to readable, it is not documentation. We maintain
API.md, which has the simple form:
### .geometric_mean(x) [Geometric mean](http://en.wikipedia.org/wiki/Geometric_mean) of a single-dimensional array of **positive** numbers.
This file is written in Markdown and specifies which functions are available, what type of arguments they receive, what they compute, and what type of answer they return.
=, no aligned arguments, spaces are either indents or the 1
space between expressions. No hard tabs.
- All comparisons should be as strict and obvious as possible: prefer
(foo === 0)to
- Straightforward code is more important than most optimizations.