button to generate plot pheno from plants
[sgn.git] / js / solGS / normalDistribution.js
blob6e75b5d522a8b63dd03bac31541e1ea12881fc61
1 /** 
3 * given an array of arrays dataset ([[A, 1], [B, 2], [C, 4], [D, 1]]), 
4 it standardizes dependent variable values (calculates z-scores), calculates probabilties 
5 and returns an array of js objects of the form 
6 [{x: xvalue, y: yvalue, z: z-score , p: probability}, ....]
8 * uses methods from statistics/simple_statistics js library
10 * Isaak Y Tecle <iyt2@cornell.edu>
12 **/
14 var solGS = solGS || function solGS () {};
16 solGS.normalDistribution =  function () {};
19 solGS.normalDistribution.prototype.getNormalDistData = function (xy) {
20         
21         var yValues = this.getYValues(xy);
22         
23         var mean = ss.mean(yValues);
24         var std  = ss.standard_deviation(yValues);
25         
26         var normalDistData = [];
27         
28         for (var i=0; i < xy.length; i++) {
29             
30             var x = xy[i][0];       
31             var y = xy[i][1];
32             y     = d3.format('.2f')(y);            
33             var z = ss.z_score(y, mean, std);
34             z     = d3.format('.2f')(z);          
35             var p = ss.cumulative_std_normal_probability(z);
37             if (y > mean) {
38                 p = 1 - p;
39             }
41             normalDistData.push({'x': x, 'y': y, 'z': z, 'p': p});
42         }
43         
44     return normalDistData;
48 solGS.normalDistribution.prototype.getPValues = function (normalData) {
50         var p = [];
51         
52         for (var i=0; i < normalData.length; i++) {
53             var pV  = normalData[i].p;
54             p.push(pV);
55         }
56         
57         return p;
62 solGS.normalDistribution.prototype.getXValues = function (xy) {
63         
64         var xv = [];
65         
66         for (var i=0; i < xy.length; i++) {      
67             var x = xy[i][0];
68             x     = x.replace(/^\s+|\s+$/g, '');
69             x     = Number(x);
70             xv.push(x);
71         }
72         
73         return xv;
74         
77 solGS.normalDistribution.prototype.getYValues = function (xy) {
78         
79         var yv = [];
80         
81         for (var i=0; i < xy.length; i++) {      
82             var y = xy[i][1];    
83             y     = Number(y);
84             
85             yv.push(y);
86         }
87         
88         return yv;
89         
93 solGS.normalDistribution.prototype.getYValuesZScores = function (normalData) {
95         var yz = [];
96         
97         for (var i=0; i < normalData.length; i++) {
98             var y = normalData[i].y;
99             var z  = normalData[i].z;
100             yz.push([y, z]);
102         }
103         
104         return yz;
108 solGS.normalDistribution.prototype.getZScoresP = function (normalData) {
110         var zp = [];
112         for (var i=0; i < normalData.length; i++) {
113             var zV  = normalData[i].z;
114             var pV  = normalData[i].p;
115             zp.push([zV, pV]);
117         }
118         
119         return zp;
123 solGS.normalDistribution.prototype.getYValuesP = function (normalData) {
125         var yp = [];
127         for (var i=0; i < normalData.length; i++) {
128             var x  = normalData[i].y;
129             var y  = normalData[i].p;
130             yp.push([x, y]);
132         }
133         
134         return yp;
138 solGS.normalDistribution.prototype.getObsValueZScore = function (obsValuesZScores, zScore) {
140         var obsValue;
141         for (var i=0; i < obsValuesZScores.length; i++) {
142          
143             var j =  obsValuesZScores[i];
145             if (obsValuesZScores[i][1] == zScore) {
146                 obsValue = obsValuesZScores[i][0];
147             }
148         }
149   
150     return [obsValue, zScore];
154