diff --git a/package.json b/package.json index 45279bd..52c32be 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,11 @@ { "name": "js-stats", "version": "1.0.0", - "description": "Package implements various statistic methods and distribution functions such as normal, fisher and student-t, and so on", + "description": "Package implements various statistics and distribution function", "author": "Xianshun Chen", + "contributors": [ + "Xianshun Chen " + ], "license": "MIT", "main": "index.js", "directories": { diff --git a/src/jsstats.js b/src/jsstats.js index 9f1a738..ce8805c 100644 --- a/src/jsstats.js +++ b/src/jsstats.js @@ -89,6 +89,8 @@ var jsstats = jsstats || {}; this.ntable = [ 1.880794, 1.959964, 2.053749, 2.170090, 2.326348, 2.575829 ]; + this.percentiles = [0.970, 0.975, 0.980, 0.985, 0.990, 0.995]; + this.ttable = [ [10.57889, 12.7062, 15.89454, 21.20495, 31.82052, 63.65674], @@ -256,6 +258,18 @@ var jsstats = jsstats || {}; return tcdf; }; + TDistribution.prototype.invCumulativeProbability = function(p, df) { + if(!df){ + df = this.df; + } + var delta = 0.005; + var row = df - 1; + var column = Math.round((p - this.percentiles[0]) / delta); + column = (column >= 0) ? column : 0; + column = (column < this.percentiles.Length) ? column : this.percentiles.length - 1; + return (row < this.ttable.length) ? this.ttable[row][column] : this.ntable[column]; + }; + jsstats.TDistribution = TDistribution; diff --git a/src/t-distribution.js b/src/t-distribution.js deleted file mode 100644 index 3f00459..0000000 --- a/src/t-distribution.js +++ /dev/null @@ -1,9 +0,0 @@ -var jsstats = jsstats || {}; - -(function(jss){ - -})(jsstats); - -if(module){ - module.exports = jsstats.TDistribution; -} \ No newline at end of file diff --git a/test/t-distribution-spec.js b/test/t-distribution-spec.js index ebcfdf3..f1af5b8 100644 --- a/test/t-distribution-spec.js +++ b/test/t-distribution-spec.js @@ -15,6 +15,10 @@ describe("Create t distribution", function() { var distribution = new jsstats.TDistribution(10.0); expect(distribution.cumulativeProbability(0.0)).to.equal(0.5); }); + it('has t_df = 0 with probability of 0.5', function(){ + var distribution = new jsstats.TDistribution(10); + expect(distribution.invCumulativeProbability(0.5)).to.equal(0.0); + }); });