All notable changes to this project will be documented in this file. See standard-version for commit guidelines.
4.1.0 (2017-04-27)
- sampleKurtosis (1d9eec2)
4.0.0 (2017-04-25)
- binomialDistribution: avoid expensive factorial calculations (#205) (525f9c0)
- core: Improve performance of min, max, sumNthPowerDeviations, variance, sampleVariance (#195) (9d2569a)
- distributions: return array instead of object (#209) (6c5df5f)
- poissonDistribution: avoid expensive factorial calculation (#206) (b34aceb)
- poissonDistribution: use Math.exp instead of Math.pow (#208) (6491dfa)
- sampleSkewness: Improve sampleSkewness performance (#197) (03d37eb)
- sum: Switch from Kahan to Kahan-Babuska algorithm (1b42d7f)
- Removes .mixin(). Instead use simple-statistics in a functional style.
- distributions: The return value of bernoulliDistribution, binomialDistribution, and poissonDistribution is no longer an Object with number keys, it is now an Array of numbers.
3.0.0 (2017-04-06)
Breaking change: before this release, simple-statistics would return NaN
when provided with invalid input. After 3.0.0, simple-statistics will throw
exceptions when provided with invalid input. If you previously used isNaN
to
test for these error cases, switch to using try
and catch
, or make sure
that valid input is given to simple-statistics.
- mean: combineMeans, a method for combining calculated means (d9e3ebc)
- mean: subtractFromMean, a method to remove a value from the mean (afe76e9)
- variance: combineVariances, a method for combining pre-calculated variances of two dataset (68133f7)
2.5.0 (2017-02-24)
- mean: addToMean, a method to update an mean with a new element (b6637b4)
2.4.0 (2017-02-22)
- build: Ignore conventional-changelog-core for Flow (4874868)
- mode: Implement modeFast, an indexed mode implementation (#183) (59b7191)
2.3.0 (2017-02-17)
- core: sampleWithReplacement (#174) (a8d05d1)
- Improved Ckmeans algorithm from the updated R project that dramatically increases performance.
- Adds
permutationHeap
method for computing all permutations of an array. - Adds
combinations
for combinations without replacement - Adds
combinationsReplacement
for combinations with replacement
- Adds
bisect
method that implements the bisection method for root-finding. Thanks Jamie Neubert Pedersen for the contribution!
New features:
product
: returns the product of a series of numbersmedianSorted
: exposes the internal method ofmedian
that only operates on sorted arrays and works in constant timemodeSorted
: exposes the internal method ofmode
and works in linear time.
Specifications:
- Adds Flow annotations to all methods, allowing up-front typechecking if you use Flow in your application.
Changes:
- Invalid input now uniformly produces the value
NaN
instead of previously a mix ofnull
andundefined
. - The method
sortedUniqueCount
is now calleduniqueCountSorted
to match the other sorted methods,medianSorted
andmodeSorted
Fixes:
equalIntervalBreaks
was not exported byindex.js
, and now is.
Fixes:
- Fixes to ckmeans algorithm (thanks to @llimllib) (#125)
Housekeeping:
- Add keywords to package. Fixes #120
- Standardize indentation, add example for epsilon
- Browser testing with Sauce Labs
Bundle size optimizations:
- Add external sourcemaps for minified and unminified standalone bundles
- Use bundle-collapser for smaller bundles
- Indicate numericSort as an internal method.
- Removed the .m() and .b() shortcuts from the linear regression
class. Use
.mb().b
and.mb().m
instead. - linearRegression is now a function, and linearRegressionLine is a separate function.
UPGRADING
Before:
var l = ss.linear_regression().data([[0, 0], [1, 1]]);
l.line()(0); // 0
After:
var line = ss.linearRegressionLine(ss.linearRegression([[0, 0], [1, 1]]));
line(0); // 0
The implementation of Jenks natural breaks was removed: an implementation of Ckmeans, an improvement on its technique, is added. Ckmeans should work better for nearly all Jenks usecases.
Before:
ss.jenks([1, 2, 4, 5, 7, 9, 10, 20], 3) //= [1, 7, 20, 20]
After:
ss.ckmeans([1, 2, 4, 5, 7, 9, 10, 20], 3))
[ [ 1,
2,
4,
5,
7,
9 ],
[ 10 ],
[ 20 ] ]
Instead of class breaks, ckmeans returns clustered data. Class breaks can be derived by taking the first value from each cluster:
var breaks = ss.ckmeans([1, 2, 4, 5, 7, 9, 10, 20], 3)).map(function(cluster) {
return cluster[0];
});
BayesModel
is now a classPerceptronModel
is now a class, and theweights
andbias
members are accessable as properties rather than methods.- All multi-word method names are now camelCase rather than underscore_cased:
this means that a method like
ss.r_squared
is now accessible asss.rSquared
- Ckmeans replaces Jenks
sortedUniqueCount
provides an extremely fast method for counting unique values of sorted arrays.sumNthPowerDeviations
is now exposed, providing a simple way to calculate the fundamental aspect of measures like variance and skewness.
- JSDoc documentation throughout
- Each function is now its own file, and simple-statistics is assembled with CommonJS-style require() statements. simple-statistics can still be used in a browser with browserify.
- The standard normal table is now calculated using the cumulative distribution function, rather than hardcoded.
- Improved test coverage
- Switched linting from JSHint to eslint and fixed style issues this uncovered.
- Fixes
.jenks
corner cases.
- Adds
.sample
for simple random sampling - Adds
.shuffle
and.shuffleInPlace
for random permutations - Adds
.chunk
for splitting arrays into chunked subsets
- fixes a bug in
mode
that favored the last new number
mixin
can now take an array in order to mixin functions into a single array instance rather than the global Array prototype.
- Adds
simple_statistics.harmonicMean
thanks to jseppi
- Adds
simple_statistics.quantileSorted
thanks to rluta simple_statistics.quantile
now accepts a sorted list of quantiles as a second argument- Improved test coverage
- Adds
simple_statistics.cumulativeStdNormalProbability
by doronlinder - Adds
simple_statistics.zScore
by doronlinder - Adds
simple_statistics.standardNormalTable
- Adds
simple_statistics.median_absolute_deviation()
by siculars - Adds
simple_statistics.iqr()
by siculars - Adds
simple_statistics.skewness()
by Doron Linder - Lower-level accessors for linear regression allow users to do the line equation themselves
- Adds
simple_statistics.jenks()
- Adds
simple_statistics.jenksMatrices()
- Improves test coverage and validation
- Adds
simple_statistics.quantile()
- Adds
simple_statistics.mixin()
- Adds
simple_statistics.geometricMean()
- Adds
simple_statistics.sampleVariance()
- Adds
simple_statistics.sampleCovariance()
- Adds
simple_statistics.tTest()
- Adds
simple_statistics.min()
- Adds
simple_statistics.max()