time-to-botec

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

overview.md (2703B)


      1 ## Overview
      2 
      3 ### Description
      4 
      5 jStat is a statistical library written in JavaScript that allows you to perform advanced statistical operations without the need of a dedicated statistical language (e.g. MATLAB or R). It is available for download on [Github](http://github.com/jstat/jstat).
      6 
      7 ### Architecture
      8 
      9 Calculations are done by *static methods*, while working with groups of numbers is handled by the *instance methods*.
     10 Here is a pseudo example of what is happening in `core.js`:
     11 
     12     jStat.min = function( arr ) {
     13         return Math.min.apply( null, arr );
     14     }
     15 
     16     jStat.prototype.min = function() {
     17         var i = 0,
     18             newval = [];
     19         while( newval.push( jStat.min( this[i] )), ++i < this.length );
     20         return newval;
     21     }
     22 
     23 `jStat.min` does the actual calculation on the array, while `jStat.prototype.min` is a wrapper to help work with the jStat object.
     24 The reason for this approach is to allow for maxium flexibility to other developers who want to extend jStat, while allowing for easy creation of wrappers.
     25 This way extending jStat requires minimal performance overhead and allows for more unique wrappers to be created.
     26 
     27 **Remember: Static methods almost always return native JavaScript types. Instance methods always return a jStat object.**
     28 
     29 Here is a simple example on the difference in usage between the static and instance methods:
     30 
     31     var myVect = [2,6,4,7,2,7,4],
     32         jObj = jStat( myVect );
     33 
     34     // calculate the sum of the the vector
     35     jStat.sum( myVect ) === 32;
     36     jObj.sum() === 32;
     37 
     38 Now say we want to do several operations on the vector (e.g. sum, min, max, and standard deviation).
     39 This can be accomplished using the static methods, but each will need to be called separately.
     40 By using the jStat object we can pass callback functions and chain the execution of each operation:
     41 
     42     jObj.sum( function( val ) {
     43         // val === sum
     44     }).min( function( val ) {
     45         // val === min
     46     }).max( function( val ) {
     47         // val === max
     48     }).stdev( function( val ) {
     49         // val === st. dev.
     50     });
     51 
     52 This method sets each calculation to be executed in an asynchronous queue.
     53 Very useful method of preventing blocking when working with large data sets.
     54 
     55 Let's look at a few chaining and shorthand examples:
     56 
     57     jStat( 0, 1, 11 ) === jStat( jStat.seq( 0, 1, 11 ));
     58     jStat().rand( 4, 4 ) === jStat( jStat.rand( 4, 4 ));
     59 
     60     jStat().create( 5, function( x, y ) {
     61         return ( x + Math.random()) / ( y + Math.random());
     62     }).min( true, function( x ) {
     63         // do something with the min value
     64     }).beta( 0.5, 0.5 ).pdf();  // generate and return the pdf
     65                                 // of the beta function for all values