laplace-test.js (2803B)
1 var vows = require('vows'); 2 var assert = require('assert'); 3 var suite = vows.describe('jStat.distribution'); 4 5 require('../env.js'); 6 7 var tol = 0.0000001; 8 9 suite.addBatch({ 10 'laplace pdf': { 11 'topic': function () { 12 return jStat; 13 }, 14 'check pdf calculation': function(jStat) { 15 var pdf = jStat.laplace.pdf; 16 17 assert.epsilon(tol, pdf(0, 0, 1), 0.5); 18 assert.epsilon(tol, pdf(2, 0, 1), 0.5 * Math.exp(-2)); 19 20 //Mean parameter 21 assert.epsilon(tol, pdf(0, 1, 1), 0.5 * Math.exp(-1)); 22 assert.epsilon(tol, pdf(0, 3, 1), 0.5 * Math.exp(-3)); 23 assert.epsilon(tol, pdf(0, -3, 1), 0.5 * Math.exp(-3)); 24 25 //Shape parameter 26 assert.epsilon(tol, pdf(0, 0, 5), 0.1); 27 28 //Zero for invalid parameters 29 assert.epsilon(tol, pdf(0, 0, 0), 0); 30 assert.epsilon(tol, pdf(0, 0, -3), 0); 31 32 //Large values 33 assert.epsilon(tol, pdf(0, 400, 500), 0.001 * Math.exp(-0.8)); 34 }, 35 'check cdf calculation': function(jStat) { 36 var cdf = jStat.laplace.cdf; 37 38 assert.epsilon(tol, cdf(0, 0, 1), 0.5); 39 assert.epsilon(tol, cdf(1, 0, 1), 1 - (0.5 * Math.exp(-1))); 40 41 //Mean parameter 42 assert.epsilon(tol, cdf(0, 2, 1), 0.5 * Math.exp(-2)); 43 assert.epsilon(tol, cdf(3, 2, 1), 1 - (0.5 * Math.exp(-1))); 44 45 //Shape parameter 46 assert.epsilon(tol, cdf(0, 0, 3), 0.5); 47 assert.epsilon(tol, cdf(3, 0, 3), 1 - (0.5 * Math.exp(-1))); 48 assert.epsilon(tol, cdf(-2, 0, 4), 0.5 * Math.exp(-0.5)); 49 50 //Zero returned for invalid parameters 51 assert.epsilon(tol, cdf(1, 1, 0), 0); 52 assert.epsilon(tol, cdf(1, 1, -2), 0); 53 }, 54 'mean': function(jStat) { 55 var mean = jStat.laplace.mean; 56 57 assert.epsilon(tol, mean(0, 2), 0); 58 assert.epsilon(tol, mean(1, 2), 1); 59 assert.epsilon(tol, mean(-5, 3), -5); 60 }, 61 'median': function(jStat) { 62 var median = jStat.laplace.median; 63 64 assert.epsilon(tol, median(0, 2), 0); 65 assert.epsilon(tol, median(1, 2), 1); 66 assert.epsilon(tol, median(-5, 3), -5); 67 }, 68 'mode': function(jStat) { 69 var mode = jStat.laplace.mode; 70 71 assert.epsilon(tol, mode(0, 2), 0); 72 assert.epsilon(tol, mode(1, 2), 1); 73 assert.epsilon(tol, mode(-5, 3), -5); 74 }, 75 'variance': function(jStat) { 76 var variance = jStat.laplace.variance; 77 78 assert.epsilon(tol, variance(0, 2), 2 * 2 * 2); 79 assert.epsilon(tol, variance(0, 0.25), 2 * 0.25 * 0.25); 80 } 81 } 82 }); 83 84 suite.export(module);