time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

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);