Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / math / stats.js @ 12

History | View | Annotate | Download (2.3 KB)

1
/*
2
        Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
3
        Available via Academic Free License >= 2.1 OR the modified BSD license.
4
        see: http://dojotoolkit.org/license for details
5
*/
6

    
7

    
8
if(!dojo._hasResource["dojox.math.stats"]){
9
dojo._hasResource["dojox.math.stats"]=true;
10
dojo.provide("dojox.math.stats");
11
(function(){
12
var st=dojox.math.stats;
13
dojo.mixin(st,{sd:function(a){
14
return Math.sqrt(st.variance(a));
15
},variance:function(a){
16
var _1=0,_2=0;
17
dojo.forEach(a,function(_3){
18
_1+=_3;
19
_2+=Math.pow(_3,2);
20
});
21
return (_2/a.length)-Math.pow(_1/a.length,2);
22
},bestFit:function(a,_4,_5){
23
_4=_4||"x",_5=_5||"y";
24
if(a[0]!==undefined&&typeof (a[0])=="number"){
25
a=dojo.map(a,function(_6,_7){
26
return {x:_7,y:_6};
27
});
28
}
29
var sx=0,sy=0,_8=0,_9=0,_a=0,_b=0,_c=0,n=a.length,t;
30
for(var i=0;i<n;i++){
31
sx+=a[i][_4];
32
sy+=a[i][_5];
33
_8+=Math.pow(a[i][_4],2);
34
_9+=Math.pow(a[i][_5],2);
35
_a+=a[i][_4]*a[i][_5];
36
}
37
for(i=0;i<n;i++){
38
t=a[i][_4]-sx/n;
39
_b+=t*t;
40
_c+=t*a[i][_5];
41
}
42
var _d=_c/(_b||1);
43
var d=Math.sqrt((_8-Math.pow(sx,2)/n)*(_9-Math.pow(sy,2)/n));
44
if(d===0){
45
throw new Error("dojox.math.stats.bestFit: the denominator for Pearson's R is 0.");
46
}
47
var r=(_a-(sx*sy/n))/d;
48
var r2=Math.pow(r,2);
49
if(_d<0){
50
r=-r;
51
}
52
return {slope:_d,intercept:(sy-sx*_d)/(n||1),r:r,r2:r2};
53
},forecast:function(a,x,_e,_f){
54
var fit=st.bestFit(a,_e,_f);
55
return (fit.slope*x)+fit.intercept;
56
},mean:function(a){
57
var t=0;
58
dojo.forEach(a,function(v){
59
t+=v;
60
});
61
return t/Math.max(a.length,1);
62
},min:function(a){
63
return Math.min.apply(null,a);
64
},max:function(a){
65
return Math.max.apply(null,a);
66
},median:function(a){
67
var t=a.slice(0).sort(function(a,b){
68
return a-b;
69
});
70
return (t[Math.floor(a.length/2)]+t[Math.ceil(a.length/2)])/2;
71
},mode:function(a){
72
var o={},r=0,m=Number.MIN_VALUE;
73
dojo.forEach(a,function(v){
74
(o[v]!==undefined)?o[v]++:o[v]=1;
75
});
76
for(var p in o){
77
if(m<o[p]){
78
m=o[p],r=p;
79
}
80
}
81
return r;
82
},sum:function(a){
83
var sum=0;
84
dojo.forEach(a,function(n){
85
sum+=n;
86
});
87
return sum;
88
},approxLin:function(a,pos){
89
var p=pos*(a.length-1),t=Math.ceil(p),f=t-1;
90
if(f<0){
91
return a[0];
92
}
93
if(t>=a.length){
94
return a[a.length-1];
95
}
96
return a[f]*(t-p)+a[t]*(p-f);
97
},summary:function(a,_10){
98
if(!_10){
99
a=a.slice(0);
100
a.sort(function(a,b){
101
return a-b;
102
});
103
}
104
var l=st.approxLin,_11={min:a[0],p25:l(a,0.25),med:l(a,0.5),p75:l(a,0.75),max:a[a.length-1],p10:l(a,0.1),p90:l(a,0.9)};
105
return _11;
106
}});
107
})();
108
}