3.4 KiB
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.
Simple
simple-statistics
is written in a subset of JavaScript. Unused features
include:
- Conditional Operator
- ES5 Array methods
with
,eval
, and other forms ofeval
- Most micro-optimizations, like alternative for loop forms
- Shortcut branching
Explanatory
Example:
// # 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:
for instance, while JavaScript supports UTF8 characters like π, they are not used
in the source:
- UTF8 in JavaScript on pages without specific meta-tag or Content-Type encodings will fail
- 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
reciprocal_sum
instead ofr
.
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()
Tests
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
Documentation
While the code is meant to readable, it is not documentation. We maintain
documentation in 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.
Code Style
We use the Airbnb style for Javascript with only one difference:
4 space soft tabs always for Javascript, not 2.
No aligned =
, 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(!foo)
. - Straightforward code is more important than most optimizations.