An open API service indexing awesome lists of open source software.

https://github.com/egusahiroaki/statsmodels-js

JavaScript Statistical Libraries
https://github.com/egusahiroaki/statsmodels-js

descriptive-statistics javascript math statistic

Last synced: 5 months ago
JSON representation

JavaScript Statistical Libraries

Awesome Lists containing this project

README

          

# statsmodels-js
[![npm version](https://badge.fury.io/js/statsmodels-js.svg)](https://badge.fury.io/js/statsmodels-js) [![Build Status](https://travis-ci.org/egusahiroaki/statsmodels-js.svg?branch=master)](https://travis-ci.org/egusahiroaki/statsmodels-js) [![Coverage Status](https://coveralls.io/repos/github/egusahiroaki/statsmodels-js/badge.svg?branch=master)](https://coveralls.io/github/egusahiroaki/statsmodels-js?branch=master) ![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)

A JavaScript implementation of statistics methods.

## install

npm install statsmodels-js

## How to use

### Statistics

basic statistical summary

```javascript
const Stats = require("statsmodels-js");

const result = Stats.descripeStats([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);

/*
{
size: 10,
min: 0,
max: 9,
mean: 4.5,
se: 0.9082951062292475,
variance: 9.166666666666666,
skewness: 0,
kurtosis: -1.2
}
*/
```

### Correlation

Pearson correlation coefficient

```javascript
const Stats = require("statsmodels-js");

const a = [0, 0, 0, 1, 1, 1, 1];
const b = [0, 1, 2, 3, 4, 5, 6];
const result = Stats.pearsonr(a, b);

/*
{
r: 0.8660254037844386
pValue: 0.011724811003882547
}
*/
```

### Similarity

```javascript
const Stats = require("statsmodels-js");

const a = [1, 1];
const b = [0, 1];
const result1 = Stats.cosSimilarity(a, b);
// 0.7071067811865475

const a = [1, 1];
const b = [1, 1];
const result2 = Stats.cosSimilarity(a, b);
// 1
```

### Statistical Test

#### unpaired T-Test

```javascript
const Stats = require("statsmodels-js");

// test assumes that the variances of both populations are equal.
const result1 = Stats.tTestInd([4, 5, 6, 4, 5], [1, 2, 3, 4, 5], true);
/*
{
statistic: 2.2499999999999996,
se: 1.2649110640673518,
df: 8,
pValue: 0.054567305799939875
}
*/

// test doesn't assumes that the variances of both populations are equal.
const result2 = Stats.tTestInd([4, 5, 6, 4, 5], [1, 2, 3, 4, 5], false);
/*
{
statistic: 2.2499999999999996,
se: 0.8,
df: 6.077151335311573,
pValue: 0.06488370852885418
}
*/
```

#### T-test for the mean of ONE group of scores.

```javascript
const result = Stats.tTest1Sample([5, 5, 5, 5, 5, 5, 6, 10], 5.0);
/*
{
mean: 5.75,
sd: 1.6393596310755,
statistic: 1.2104198771788937,
pValue: 0.26539803962501435
}
*/
```

#### T-test for 2 related or repeated samples

```javascript
const result = tTestRel([4, 5, 6, 4, 5], [1, 2, 3, 4, 5]);
/*
{
statistic: 2.449489742783178,
pValue: 0.07048399691022006
}
*/
```

#### Chi-squared test

goodness-of-fit test

```javascript
const result = chiSqaure([10, 1, 1, 1], [15, 1, 1, 1]);

/*
{
statistic: 1.6666666666666667,
pValue: 0.6443698056370236
}
*/
```

test for independence

```javascript
const result = chi2Contingency([55, 22, 16, 7], [40, 32, 24, 4]);

/*
{
statistic: 6.63845472266525,
pValue: 0.08435923449835192
}
*/
```

#### One-Way ANOVA Test

The one-way ANOVA tests the null hypothesis that two or more groups have the same population mean.

```javascript
const a = [5, 6, 5, 5, 7];
const b = [6, 6, 7, 5, 6];
const result = Stats.oneWayANOVA(a, b);
// { statistic: 0.6153846153846155, pValue: 0.45536634355271177 }
```

```javascript
const a = [66, 62, 80, 50, 57, 68, 73, 65];
const b = [62, 60, 66, 63, 55, 53, 59, 63];
const c = [65, 60, 78, 52, 59, 66, 73, 64];
const d = [52, 59, 44, 67, 47, 53, 58, 49];
const result = oneWayANOVA(a, b, c, d);
/*
{
statistic: 4.024870903151017,
pValue: 0.01685989800789034
}
*/
```

### Linear Regression

```javascript
const Stats = require("statsmodels-js");
const x = [1, 2, 3];
const y = [3, 5, 7];

const result = new Stats.SimpleLinearRegression(x, y).fit();
result.summary()
/*
{
r2Score: 0.9642857142857142,
coef: 1.5,
intercept: 0.3333333333333333
}
*/

// prediction
result.predict([10, 20, 30]);
// [ 21, 41, 61 ]
```

```javascript
const Stats = require("statsmodels-js");
const x = [
[10, 20, 30],
[20, 42, 63],
[4, 8, 16],
];
const y = [30, 50, 70];

const result = new Stats.MultipleLinearRegression(x, y).fit();
result.summary()
/*
{
x1: -5.419270833334926,
x2: -14.610026041665915,
x3: 11.98828125,
intercept: 16.74479166666713,
r2Score: 1
}
*/

/* prediction case 1 */
result.predict([10, 20, 30])
// [[29.999999999999545]]

/* prediction case 2 */
result.predict([
[10, 20, 30],
[1, 2, 3],
]);
/*
[[29.999999999999545], [18.070312500000373]];
*/
```