Skip to content

Latest commit

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

statkit

A statistics toolkit for javascript.

Usage

Install using npm:

npm install statkit

Fit a linear regression model using MCMC:

varsk=require("statkit.js");// log-likelihood for the model y ~ N(m*x + b, 1/t)functionlnlike(theta,x,y){varm=theta[0],b=theta[1],t=theta[2];vars=0.0;for(vari=0;i<x.length;i++){varr=y[i]-(m*x[i]+b);s+=r*r*t-Math.log(t);}return-0.5*s;}// uniform log-prior for m, b, tfunctionlnprior(theta){varm=theta[0],b=theta[1],t=theta[2];if(0.0<m&&m<1.0&&0.0<b&&b<10.0&&0.0<t&&t<100.0){return0.0;}return-Infinity;}// posterior log-probability functionfunctionlnpost(theta,x,y){varlp=lnprior(theta);if(!isFinite(lp)){return-Infinity;}returnlp+lnlike(theta,x,y);}varx=[10,8,13,9,11,14,6,4,12,7,5];vary=[8.04,6.95,7.58,8.81,8.33,9.96,7.24,4.26,10.84,4.82,5.68];varres=sk.metropolis(function(theta){returnlnpost(theta,x,y);},[0.5,3.0,1.0],1000000,0.1,50000,100);console.log('acceptance rate:',res.accepted)console.log('posteriors (16/50/84 percentiles):')console.log('m',sk.quantile(res.chain[0],0.16),sk.median(res.chain[0]),sk.quantile(res.chain[0],0.84))console.log('b',sk.quantile(res.chain[1],0.16),sk.median(res.chain[1]),sk.quantile(res.chain[1],0.84))console.log('t',sk.quantile(res.chain[2],0.16),sk.median(res.chain[2]),sk.quantile(res.chain[2],0.84))

Calculate a confidence interval for a correlation using the bootstrap method:

varsk=require("statkit");varlsat=[576,635,558,578,666,580,555,661,651,605,653,575,545,572,594];vargpa=[3.39,3.30,2.81,3.03,3.44,3.07,3.00,3.43,3.36,3.13,3.12,2.74,2.76,2.88,2.96];varcorr=sk.corr(gpa,lsat);varci=sk.bootci(100000,sk.corr,gpa,lsat);console.log("corr = ",corr,"ci = ",ci);

Perform a linear regression on the first data set in Anscombe's quartet:

varsk=require("statkit");varx=[10,8,13,9,11,14,6,4,12,7,5];vary=[8.04,6.95,7.58,8.81,8.33,9.96,7.24,4.26,10.84,4.82,5.68];varA=newArray(x.length*2);for(vari=0;i<x.length;++i){A[2*i]=1;A[2*i+1]=x[i];}varb=sk.lstsq(x.length,2,A,y);console.log("intercept = ",b[0],"slope = ",b[1]);

Functions

Credits

(c) 2014 Erik Rigtorp erik@rigtorp.se. MIT License

About

Statistics toolkit for JavaScript

Resources

Stars

50 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages