43 lines
1.4 KiB
JavaScript
43 lines
1.4 KiB
JavaScript
var vows = require('vows');
|
||
var assert = require('assert');
|
||
var suite = vows.describe('jStat.distribution');
|
||
|
||
require('../env.js');
|
||
|
||
suite.addBatch({
|
||
'hypergeometric pdf': {
|
||
'topic': function() {
|
||
return jStat;
|
||
},
|
||
'check pdf calculation': function(jStat) {
|
||
var tol = 0.0000001;
|
||
// How many 1s were obtained by sampling?
|
||
var successes = [10, 16];
|
||
// How big was the source population?
|
||
var population = [100, 3589];
|
||
// How many 1s were in it?
|
||
var available = [20, 16];
|
||
// How big a sample was taken?
|
||
var draws = [15, 2290];
|
||
// What was the probability of exactly this many 1s?
|
||
// Obtained from the calculator at
|
||
// <http://www.geneprof.org/GeneProf/tools/hypergeometric.jsp>
|
||
var answers = [0.000017532028090435493, 0.0007404996809672229];
|
||
|
||
for (var i = 0; i < answers.length; i++) {
|
||
// See if we get the right answer for each calculation.
|
||
var calculated = jStat.hypgeom.pdf(successes[i],
|
||
population[i],
|
||
available[i],
|
||
draws[i]);
|
||
// None of the answers should be NaN
|
||
assert(!isNaN(calculated));
|
||
// And they should all match
|
||
assert.epsilon(tol, calculated, answers[i]);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
|
||
suite.export(module);
|