central-f-test.js (2943B)
1 var vows = require('vows'); 2 var assert = require('assert'); 3 var suite = vows.describe('jStat.distribution'); 4 5 require('../env.js'); 6 7 suite.addBatch({ 8 'central F distribution': { 9 'topic': function() { 10 return jStat; 11 }, 12 //Check against R's df(x, df1, df2) 13 'check pdf calculation': function(jStat) { 14 var tol = 0.0000001; 15 16 var zeroth = jStat.centralF.pdf(0.2, 1, 3); 17 assert.epsilon(tol, zeroth, 0.722349); 18 19 var first = jStat.centralF.pdf(1, 100, 100); 20 assert.epsilon(tol, first, 1.989731); 21 22 var second = jStat.centralF.pdf(2.5, 50, 200); 23 assert.epsilon(tol, second, 0.00003610325); 24 25 var third = jStat.centralF.pdf(0.8, 2, 10); 26 assert.epsilon(tol, third, 0.4104423); 27 28 var fourth = jStat.centralF.pdf(0.4, 3, 10); 29 assert.epsilon(tol, fourth, 0.6733766); 30 31 var first_at_zero = jStat.centralF.pdf(0.0, 3, 5); 32 assert.epsilon(tol, first_at_zero, 0); 33 34 var second_at_zero = jStat.centralF.pdf(0.0, 2, 1); 35 assert.epsilon(tol, second_at_zero, 1); 36 37 var third_at_zero = jStat.centralF.pdf(0.0, 1, 1); 38 assert.strictEqual(third_at_zero, Infinity); 39 40 // When x < 0 return 0 41 // df(-3, 4, 11) 42 assert.epsilon(tol, jStat.centralF.pdf(-3, 4, 11), 0); 43 44 // When x = 0, and df1 = 2, return 1 45 // df(0, 2, 15) 46 assert.epsilon(tol, jStat.centralF.pdf(0, 2, 15), 1); 47 48 // When x = 0, and df1 < 2, return Infinity 49 // df(0, 1, 20) 50 assert.equal(jStat.centralF.pdf(0, 1, 20), Infinity); 51 52 assert.epsilon(tol, jStat.centralF.pdf(5, 1, 200), 0.0148982); 53 54 assert.epsilon(tol, jStat.centralF.pdf(4.099, 2, 140), 0.01759074); 55 56 assert.epsilon(tol, jStat.centralF.pdf(10, 300, 10), 8.304129e-05); 57 }, 58 // Check against R's pf(q, df1, df2, ncp, lower.tail = TRUE, log.p = FALSE): 59 // options(digits=10) 60 // pf(0.2, 1, 3) 61 // pf(1, 100, 100) 62 // pf(2.5, 50, 200) 63 // pf(0.8, 2, 10) 64 // pf(0.4, 3, 10) 65 // pf(0, 3, 5) 66 // pf(0, 2, 1) 67 // pf(0, 1, 1) 68 // pf(-5, 5, 20) 69 'check cdf calculation': function(jStat) { 70 var tol = 0.0000001; 71 // Check with x within support (x > 0) 72 assert.epsilon(tol, jStat.centralF.cdf(0.2, 1, 3), 0.3149623575); 73 assert.epsilon(tol, jStat.centralF.cdf(1, 100, 100), 0.5); 74 assert.epsilon(tol, jStat.centralF.cdf(2.5, 50, 200), 0.9999962786); 75 assert.epsilon(tol, jStat.centralF.cdf(0.8, 2, 10), 0.5238869846); 76 assert.epsilon(tol, jStat.centralF.cdf(0.4, 3, 10), 0.2439174275); 77 // Check with x at edge of support (x = 0) 78 assert.epsilon(tol, jStat.centralF.cdf(0.0, 3, 5), 0); 79 assert.epsilon(tol, jStat.centralF.cdf(0.0, 2, 1), 0); 80 assert.epsilon(tol, jStat.centralF.cdf(0.0, 1, 1), 0); 81 // Check with x outside of support (x < 0) 82 assert.epsilon(tol, jStat.centralF.cdf(-5, 5, 20), 0); 83 } 84 } 85 }); 86 87 suite.export(module);