toolkit/javascript/d3/examples/qq/stats.js
changeset 47 c0b4a8b5a012
equal deleted inserted replaced
46:efd9c589177a 47:c0b4a8b5a012
       
     1 // Sample from a normal distribution with mean 0, stddev 1.
       
     2 function normal() {
       
     3   var x = 0, y = 0, rds, c;
       
     4   do {
       
     5     x = Math.random() * 2 - 1;
       
     6     y = Math.random() * 2 - 1;
       
     7     rds = x * x + y * y;
       
     8   } while (rds == 0 || rds > 1);
       
     9   c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform
       
    10   return x * c; // throw away extra sample y * c
       
    11 }
       
    12 
       
    13 // Simple 1D Gaussian (normal) distribution
       
    14 function normal1(mean, deviation) {
       
    15   return function() {
       
    16     return mean + deviation * normal();
       
    17   };
       
    18 }
       
    19 
       
    20 // Gaussian Mixture Model (k=3) fit using E-M algorithm
       
    21 function normal3(dd) {
       
    22   return function() {
       
    23     var r = Math.random(),
       
    24         i = r < dd[0][2] ? 0 : r < dd[0][2] + dd[1][2] ? 1 : 2,
       
    25         d = dd[i];
       
    26     return d[0] + Math.sqrt(d[1]) * normal();
       
    27   }
       
    28 }