annotate hexagram-6ae12361157c/hexagram/jstat-1.0.0.js @ 0:1407e3634bcf draft default tip

Uploaded r11 from test tool shed.
author adam-novak
date Tue, 22 Oct 2013 14:17:59 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1 function jstat(){}
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2 j = jstat;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3 /* Simple JavaScript Inheritance
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
4 * By John Resig http://ejohn.org/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
5 * MIT Licensed.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
6 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
7 // Inspired by base2 and Prototype
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
8 (function(){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
9 var initializing = false, fnTest = /xyz/.test(function(){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
10 xyz;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
11 }) ? /\b_super\b/ : /.*/;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
12 // The base Class implementation (does nothing)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
13 this.Class = function(){};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
14
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
15 // Create a new Class that inherits from this class
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
16 Class.extend = function(prop) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
17 var _super = this.prototype;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
18
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
19 // Instantiate a base class (but only create the instance,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
20 // don't run the init constructor)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
21 initializing = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
22 var prototype = new this();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
23 initializing = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
24
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
25 // Copy the properties over onto the new prototype
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
26 for (var name in prop) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
27 // Check if we're overwriting an existing function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
28 prototype[name] = typeof prop[name] == "function" &&
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
29 typeof _super[name] == "function" && fnTest.test(prop[name]) ?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
30 (function(name, fn){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
31 return function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
32 var tmp = this._super;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
33
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
34 // Add a new ._super() method that is the same method
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
35 // but on the super-class
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
36 this._super = _super[name];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
37
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
38 // The method only need to be bound temporarily, so we
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
39 // remove it when we're done executing
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
40 var ret = fn.apply(this, arguments);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
41 this._super = tmp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
42
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
43 return ret;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
44 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
45 })(name, prop[name]) :
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
46 prop[name];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
47 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
48
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
49 // The dummy class constructor
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
50 function Class() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
51 // All construction is actually done in the init method
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
52 if ( !initializing && this.init )
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
53 this.init.apply(this, arguments);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
54 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
55
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
56 // Populate our constructed prototype object
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
57 Class.prototype = prototype;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
58
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
59 // Enforce the constructor to be what we expect
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
60 Class.constructor = Class;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
61
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
62 // And make this class extendable
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
63 Class.extend = arguments.callee;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
64
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
65 return Class;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
66 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
67 })();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
68
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
69 /******************************************************************************/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
70 /* Constants */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
71 /******************************************************************************/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
72 jstat.ONE_SQRT_2PI = 0.3989422804014327;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
73 jstat.LN_SQRT_2PI = 0.9189385332046727417803297;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
74 jstat.LN_SQRT_PId2 = 0.225791352644727432363097614947;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
75 jstat.DBL_MIN = 2.22507e-308;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
76 jstat.DBL_EPSILON = 2.220446049250313e-16;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
77 jstat.SQRT_32 = 5.656854249492380195206754896838;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
78 jstat.TWO_PI = 6.283185307179586;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
79 jstat.DBL_MIN_EXP = -999;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
80 jstat.SQRT_2dPI = 0.79788456080287;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
81 jstat.LN_SQRT_PI = 0.5723649429247;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
82 /******************************************************************************/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
83 /* jstat Functions */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
84 /******************************************************************************/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
85 jstat.seq = function(min, max, length) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
86 var r = new Range(min, max, length);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
87 return r.getPoints();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
88 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
89
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
90 jstat.dnorm = function(x, mean, sd, log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
91 if(mean == null) mean = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
92 if(sd == null) sd = 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
93 if(log == null) log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
94 var n = new NormalDistribution(mean, sd);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
95 if(!isNaN(x)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
96 // is a number
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
97 return n._pdf(x, log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
98 } else if(x.length) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
99 var res = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
100 for(var i = 0; i < x.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
101 res.push(n._pdf(x[i], log));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
102 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
103 return res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
104 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
105 throw "Illegal argument: x";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
106 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
107 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
108
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
109 jstat.pnorm = function(q, mean, sd, lower_tail, log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
110 if(mean == null) mean = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
111 if(sd == null) sd = 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
112 if(lower_tail == null) lower_tail = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
113 if(log == null) log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
114
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
115 var n = new NormalDistribution(mean, sd);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
116 if(!isNaN(q)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
117 // is a number
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
118 return n._cdf(q, lower_tail, log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
119 } else if(q.length) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
120 var res = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
121 for(var i = 0; i < q.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
122 res.push(n._cdf(q[i], lower_tail, log));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
123 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
124 return res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
125 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
126 throw "Illegal argument: x";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
127 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
128 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
129
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
130 jstat.dlnorm = function(x, meanlog, sdlog, log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
131 if(meanlog == null) meanlog = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
132 if(sdlog == null) sdlog = 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
133 if(log == null) log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
134 var n = new LogNormalDistribution(meanlog, sdlog);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
135 if(!isNaN(x)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
136 // is a number
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
137 return n._pdf(x, log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
138 } else if(x.length) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
139 var res = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
140 for(var i = 0; i < x.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
141 res.push(n._pdf(x[i], log));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
142 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
143 return res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
144 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
145 throw "Illegal argument: x";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
146 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
147 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
148
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
149 jstat.plnorm = function(q, meanlog, sdlog, lower_tail, log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
150 if(meanlog == null) meanlog = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
151 if(sdlog == null) sdlog = 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
152 if(lower_tail == null) lower_tail = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
153 if(log == null) log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
154
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
155 var n = new LogNormalDistribution(meanlog, sdlog);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
156 if(!isNaN(q)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
157 // is a number
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
158 return n._cdf(q, lower_tail, log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
159 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
160 else if(q.length) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
161 var res = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
162 for(var i = 0; i < q.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
163 res.push(n._cdf(q[i], lower_tail, log));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
164 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
165 return res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
166 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
167 throw "Illegal argument: x";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
168 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
169 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
170
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
171 jstat.dbeta = function(x, alpha, beta, ncp, log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
172 if(ncp == null) ncp = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
173 if(log == null) log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
174 var b = new BetaDistribution(alpha, beta);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
175 if(!isNaN(x)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
176 // is a number
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
177 return b._pdf(x, log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
178 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
179 else if(x.length) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
180 var res = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
181 for(var i = 0; i < x.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
182 res.push(b._pdf(x[i], log));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
183 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
184 return res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
185 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
186 throw "Illegal argument: x";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
187 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
188 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
189
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
190 jstat.pbeta = function(q, alpha, beta, ncp, lower_tail, log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
191 if(ncp == null) ncp = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
192 if(log == null) log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
193 if(lower_tail == null) lower_tail = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
194
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
195 var b = new BetaDistribution(alpha, beta);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
196 if(!isNaN(q)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
197 // is a number
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
198 return b._cdf(q, lower_tail, log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
199 } else if(q.length) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
200 var res = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
201 for(var i = 0; i < q.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
202 res.push(b._cdf(q[i], lower_tail, log));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
203 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
204 return res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
205 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
206 else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
207 throw "Illegal argument: x";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
208 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
209 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
210
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
211 jstat.dgamma = function(x, shape, rate, scale, log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
212 if(rate == null) rate = 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
213 if(scale == null) scale = 1/rate;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
214 if(log == null) log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
215
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
216 var g = new GammaDistribution(shape, scale);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
217 if(!isNaN(x)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
218 // is a number
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
219 return g._pdf(x, log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
220 } else if(x.length) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
221 var res = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
222 for(var i = 0; i < x.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
223 res.push(g._pdf(x[i], log));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
224 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
225 return res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
226 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
227 throw "Illegal argument: x";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
228 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
229 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
230
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
231 jstat.pgamma = function(q, shape, rate, scale, lower_tail, log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
232 if(rate == null) rate = 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
233 if(scale == null) scale = 1/rate;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
234 if(lower_tail == null) lower_tail = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
235 if(log == null) log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
236
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
237 var g = new GammaDistribution(shape, scale);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
238 if(!isNaN(q)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
239 // is a number
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
240 return g._cdf(q, lower_tail, log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
241 } else if(q.length) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
242 var res = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
243 for(var i = 0; i < q.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
244 res.push(g._cdf(q[i], lower_tail, log));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
245 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
246 return res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
247 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
248 throw "Illegal argument: x";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
249 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
250
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
251 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
252
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
253 jstat.dt = function(x, df, ncp, log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
254 if(log == null) log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
255
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
256 var t = new StudentTDistribution(df, ncp);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
257 if(!isNaN(x)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
258 // is a number
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
259 return t._pdf(x, log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
260 } else if(x.length) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
261 var res = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
262 for(var i = 0; i < x.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
263 res.push(t._pdf(x[i], log));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
264 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
265 return res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
266 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
267 throw "Illegal argument: x";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
268 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
269
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
270 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
271
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
272 jstat.pt = function(q, df, ncp, lower_tail, log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
273 if(lower_tail == null) lower_tail = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
274 if(log == null) log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
275
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
276 var t = new StudentTDistribution(df, ncp);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
277 if(!isNaN(q)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
278 // is a number
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
279 return t._cdf(q, lower_tail, log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
280 } else if(q.length) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
281 var res = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
282 for(var i = 0; i < q.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
283 res.push(t._cdf(q[i], lower_tail, log));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
284 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
285 return res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
286 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
287 throw "Illegal argument: x";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
288 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
289
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
290 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
291
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
292 jstat.plot = function(x, y, options) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
293 if(x == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
294 throw "x is undefined in jstat.plot";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
295 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
296 if(y == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
297 throw "y is undefined in jstat.plot";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
298 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
299 if(x.length != y.length) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
300 throw "x and y lengths differ in jstat.plot";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
301 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
302
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
303 var flotOpt = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
304 series: {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
305 lines: {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
306
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
307 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
308 points: {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
309
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
310 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
311 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
312 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
313
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
314 // combine x & y
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
315 var series = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
316 if(x.length == undefined) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
317 // single point
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
318 series.push([x, y]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
319 flotOpt.series.points.show = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
320 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
321 // array
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
322 for(var i = 0; i < x.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
323 series.push([x[i], y[i]]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
324 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
325 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
326
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
327 var title = 'jstat graph';
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
328
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
329 // configure Flot options
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
330 if(options != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
331 // options = JSON.parse(String(options));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
332 if(options.type != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
333 if(options.type == 'l') {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
334 flotOpt.series.lines.show = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
335 } else if (options.type == 'p') {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
336 flotOpt.series.lines.show = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
337 flotOpt.series.points.show = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
338 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
339 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
340 if(options.hover != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
341 flotOpt.grid = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
342 hoverable: options.hover
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
343 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
344 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
345
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
346 if(options.main != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
347 title = options.main;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
348 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
349 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
350 var now = new Date();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
351 var hash = now.getMilliseconds() * now.getMinutes() + now.getSeconds();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
352 $('body').append('<div title="' + title + '" style="display: none;" id="'+ hash +'"><div id="graph-' + hash + '" style="width:95%; height: 95%"></div></div>');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
353
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
354 $('#' + hash).dialog({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
355 modal: false,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
356 width: 475,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
357 height: 475,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
358 resizable: true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
359 resize: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
360 $.plot($('#graph-' + hash), [series], flotOpt);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
361 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
362 open: function(event, ui) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
363 var id = '#graph-' + hash;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
364 $.plot($('#graph-' + hash), [series], flotOpt);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
365 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
366 })
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
367 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
368
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
369 /******************************************************************************/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
370 /* Special Functions */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
371 /******************************************************************************/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
372
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
373 jstat.log10 = function(arg) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
374 return Math.log(arg) / Math.LN10;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
375 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
376
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
377 /*
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
378 *
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
379 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
380 jstat.toSigFig = function(num, n) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
381 if(num == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
382 return 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
383 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
384 var d = Math.ceil(jstat.log10(num < 0 ? -num: num));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
385 var power = n - parseInt(d);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
386 var magnitude = Math.pow(10,power);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
387 var shifted = Math.round(num*magnitude);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
388 return shifted/magnitude;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
389 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
390
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
391 jstat.trunc = function(x) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
392 return (x > 0) ? Math.floor(x) : Math.ceil(x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
393 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
394
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
395 /**
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
396 * Tests whether x is a finite number
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
397 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
398 jstat.isFinite = function(x) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
399 return (!isNaN(x) && (x != Number.POSITIVE_INFINITY) && (x != Number.NEGATIVE_INFINITY));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
400 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
401
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
402 /**
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
403 * dopois_raw() computes the Poisson probability lb^x exp(-lb) / x!.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
404 * This does not check that x is an integer, since dgamma() may
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
405 * call this with a fractional x argument. Any necessary argument
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
406 * checks should be done in the calling function.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
407 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
408 jstat.dopois_raw = function(x, lambda, give_log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
409 /* x >= 0 ; integer for dpois(), but not e.g. for pgamma()!
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
410 lambda >= 0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
411 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
412 if (lambda == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
413 if(x == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
414 return(give_log) ? 0.0 : 1.0; //R_D__1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
415 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
416 return (give_log) ? Number.NEGATIVE_INFINITY : 0.0; // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
417 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
418 if (!jstat.isFinite(lambda)) return (give_log) ? Number.NEGATIVE_INFINITY : 0.0; //R_D__0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
419 if (x < 0) return(give_log) ? Number.NEGATIVE_INFINITY : 0.0; //R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
420 if (x <= lambda * jstat.DBL_MIN) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
421 return (give_log) ? -lambda : Math.exp(-lambda); // R_D_exp(-lambda)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
422 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
423 if (lambda < x * jstat.DBL_MIN) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
424 var param = -lambda + x*Math.log(lambda) -jstat.lgamma(x+1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
425 return (give_log) ? param : Math.exp(param); // R_D_exp(-lambda + x*log(lambda) -lgammafn(x+1))
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
426 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
427 var param1 = jstat.TWO_PI * x; // f
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
428 var param2 = -jstat.stirlerr(x)-jstat.bd0(x,lambda); // x
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
429 return (give_log) ? -0.5*Math.log(param1)+param2 : Math.exp(param2)/Math.sqrt(param1); // R_D_fexp(M_2PI*x, -stirlerr(x)-bd0(x,lambda))
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
430 //return(R_D_fexp( , -stirlerr(x)-bd0(x,lambda) ));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
431 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
432
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
433 /** Evaluates the "deviance part"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
434 * bd0(x,M) := M * D0(x/M) = M*[ x/M * log(x/M) + 1 - (x/M) ] =
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
435 * = x * log(x/M) + M - x
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
436 * where M = E[X] = n*p (or = lambda), for x, M > 0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
437 *
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
438 * in a manner that should be stable (with small relative error)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
439 * for all x and M=np. In particular for x/np close to 1, direct
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
440 * evaluation fails, and evaluation is based on the Taylor series
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
441 * of log((1+v)/(1-v)) with v = (x-np)/(x+np).
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
442 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
443 jstat.bd0 = function(x, np) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
444 var ej, s, s1, v, j;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
445 if(!jstat.isFinite(x) || !jstat.isFinite(np) || np == 0.0) throw "illegal parameter in jstat.bd0";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
446
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
447 if(Math.abs(x-np) > 0.1*(x+np)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
448 v = (x-np)/(x+np);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
449 s = (x-np)*v;/* s using v -- change by MM */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
450 ej = 2*x*v;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
451 v = v*v;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
452 for (j=1; ; j++) { /* Taylor series */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
453 ej *= v;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
454 s1 = s+ej/((j<<1)+1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
455 if (s1==s) /* last term was effectively 0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
456 return(s1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
457 s = s1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
458 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
459 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
460 /* else: | x - np | is not too small */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
461 return(x*Math.log(x/np)+np-x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
462 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
463
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
464 /** Computes the log of the error term in Stirling's formula.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
465 * For n > 15, uses the series 1/12n - 1/360n^3 + ...
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
466 * For n <=15, integers or half-integers, uses stored values.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
467 * For other n < 15, uses lgamma directly (don't use this to
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
468 * write lgamma!)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
469 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
470 jstat.stirlerr= function(n) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
471 var S0 = 0.083333333333333333333;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
472 var S1 = 0.00277777777777777777778;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
473 var S2 = 0.00079365079365079365079365;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
474 var S3 = 0.000595238095238095238095238;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
475 var S4 = 0.0008417508417508417508417508;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
476
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
477 var sferr_halves = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
478 0.0, /* n=0 - wrong, place holder only */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
479 0.1534264097200273452913848, /* 0.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
480 0.0810614667953272582196702, /* 1.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
481 0.0548141210519176538961390, /* 1.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
482 0.0413406959554092940938221, /* 2.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
483 0.03316287351993628748511048, /* 2.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
484 0.02767792568499833914878929, /* 3.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
485 0.02374616365629749597132920, /* 3.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
486 0.02079067210376509311152277, /* 4.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
487 0.01848845053267318523077934, /* 4.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
488 0.01664469118982119216319487, /* 5.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
489 0.01513497322191737887351255, /* 5.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
490 0.01387612882307074799874573, /* 6.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
491 0.01281046524292022692424986, /* 6.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
492 0.01189670994589177009505572, /* 7.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
493 0.01110455975820691732662991, /* 7.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
494 0.010411265261972096497478567, /* 8.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
495 0.009799416126158803298389475, /* 8.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
496 0.009255462182712732917728637, /* 9.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
497 0.008768700134139385462952823, /* 9.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
498 0.008330563433362871256469318, /* 10.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
499 0.007934114564314020547248100, /* 10.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
500 0.007573675487951840794972024, /* 11.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
501 0.007244554301320383179543912, /* 11.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
502 0.006942840107209529865664152, /* 12.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
503 0.006665247032707682442354394, /* 12.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
504 0.006408994188004207068439631, /* 13.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
505 0.006171712263039457647532867, /* 13.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
506 0.005951370112758847735624416, /* 14.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
507 0.005746216513010115682023589, /* 14.5 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
508 0.005554733551962801371038690 /* 15.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
509 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
510
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
511 var nn;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
512
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
513 if (n <= 15.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
514 nn = n + n;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
515 if (nn == parseInt(nn)) return(sferr_halves[parseInt(nn)]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
516 return(jstat.lgamma(n + 1.0) - (n + 0.5)*Math.log(n) + n - jstat.LN_SQRT_2PI);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
517 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
518
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
519 nn = n*n;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
520 if (n>500) return((S0-S1/nn)/n);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
521 if (n> 80) return((S0-(S1-S2/nn)/nn)/n);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
522 if (n> 35) return((S0-(S1-(S2-S3/nn)/nn)/nn)/n);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
523 /* 15 < n <= 35 : */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
524 return((S0-(S1-(S2-(S3-S4/nn)/nn)/nn)/nn)/n);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
525 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
526
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
527
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
528
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
529 /** The function lgamma computes log|gamma(x)|. The function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
530 * lgammafn_sign in addition assigns the sign of the gamma function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
531 * to the address in the second argument if this is not null.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
532 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
533 jstat.lgamma = function(x) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
534 function lgammafn_sign(x, sgn) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
535 var ans, y, sinpiy;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
536 var xmax = 2.5327372760800758e+305;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
537 var dxrel = 1.490116119384765696e-8;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
538
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
539 // if (xmax == 0) {/* initialize machine dependent constants _ONCE_ */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
540 // xmax = jstat.DBL_MAX/Math.log(jstat.DBL_MAX);/* = 2.533 e305 for IEEE double */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
541 // dxrel = Math.sqrt(jstat.DBL_EPSILON);/* sqrt(Eps) ~ 1.49 e-8 for IEEE double */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
542 // }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
543
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
544 /* For IEEE double precision DBL_EPSILON = 2^-52 = 2.220446049250313e-16 :
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
545 xmax = DBL_MAX / log(DBL_MAX) = 2^1024 / (1024 * log(2)) = 2^1014 / log(2)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
546 dxrel = sqrt(DBL_EPSILON) = 2^-26 = 5^26 * 1e-26 (is *exact* below !)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
547 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
548
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
549 if (sgn != null) sgn = 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
550
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
551 if(isNaN(x)) return x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
552
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
553 if (x < 0 && (Math.floor(-x) % 2.0) == 0)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
554 if (sgn != null) sgn = -1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
555
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
556 if (x <= 0 && x == jstat.trunc(x)) { /* Negative integer argument */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
557 console.warn("Negative integer argument in lgammafn_sign");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
558 return Number.POSITIVE_INFINITY;/* +Inf, since lgamma(x) = log|gamma(x)| */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
559 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
560
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
561 y = Math.abs(x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
562
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
563 if(y <= 10) return Math.log(Math.abs(jstat.gamma(x))); // TODO: implement jstat.gamma
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
564
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
565 if(y > xmax) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
566 console.warn("Illegal arguement passed to lgammafn_sign");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
567 return Number.POSITIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
568 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
569
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
570 if(x > 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
571 if(x > 1e17) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
572 return (x*(Math.log(x)-1.0));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
573 } else if(x > 4934720.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
574 return (jstat.LN_SQRT_2PI + (x-0.5) * Math.log(x) - x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
575 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
576 return jstat.LN_SQRT_2PI + (x-0.5) * Math.log(x) - x + jstat.lgammacor(x); // TODO: implement lgammacor
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
577 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
578 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
579
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
580 sinpiy = Math.abs(Math.sin(Math.PI * y));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
581
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
582 if(sinpiy == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
583 throw "Should never happen!!";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
584 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
585
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
586 ans = jstat.LN_SQRT_PId2 + (x - 0.5) * Math.log(y) - x - Math.log(sinpiy) - jstat.lgammacor(y);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
587
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
588 if(Math.abs((x-jstat.trunc(x-0.5))* ans / x) < dxrel) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
589 throw "The answer is less than half the precision argument too close to a negative integer";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
590 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
591 return ans;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
592 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
593
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
594 return lgammafn_sign(x, null);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
595 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
596
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
597 jstat.gamma = function(x) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
598 var xbig = 171.624;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
599 var p = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
600 -1.71618513886549492533811,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
601 24.7656508055759199108314,-379.804256470945635097577,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
602 629.331155312818442661052,866.966202790413211295064,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
603 -31451.2729688483675254357,-36144.4134186911729807069,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
604 66456.1438202405440627855
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
605 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
606 var q = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
607 -30.8402300119738975254353,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
608 315.350626979604161529144,-1015.15636749021914166146,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
609 -3107.77167157231109440444,22538.1184209801510330112,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
610 4755.84627752788110767815,-134659.959864969306392456,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
611 -115132.259675553483497211
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
612 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
613 var c = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
614 -.001910444077728,8.4171387781295e-4,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
615 -5.952379913043012e-4,7.93650793500350248e-4,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
616 -.002777777777777681622553,.08333333333333333331554247,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
617 .0057083835261
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
618 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
619
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
620 var i,n,parity,fact,xden,xnum,y,z,yi,res,sum,ysq;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
621
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
622 parity = (0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
623 fact = 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
624 n = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
625 y=x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
626 if(y <= 0.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
627 /* -------------------------------------------------------------
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
628 Argument is negative
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
629 ------------------------------------------------------------- */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
630 y = -x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
631 yi = jstat.trunc(y);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
632 res = y - yi;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
633 if (res != 0.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
634 if (yi != jstat.trunc(yi * 0.5) * 2.0)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
635 parity = (1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
636 fact = -Math.PI / Math.sin(Math.PI * res);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
637 y += 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
638 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
639 return(Number.POSITIVE_INFINITY);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
640 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
641 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
642 /* -----------------------------------------------------------------
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
643 Argument is positive
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
644 -----------------------------------------------------------------*/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
645 if (y < jstat.DBL_EPSILON) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
646 /* --------------------------------------------------------------
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
647 Argument < EPS
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
648 -------------------------------------------------------------- */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
649 if (y >= jstat.DBL_MIN) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
650 res = 1.0 / y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
651 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
652 return(Number.POSITIVE_INFINITY);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
653 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
654 } else if (y < 12.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
655 yi = y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
656 if (y < 1.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
657 /* ---------------------------------------------------------
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
658 EPS < argument < 1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
659 --------------------------------------------------------- */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
660 z = y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
661 y += 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
662 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
663 /* -----------------------------------------------------------
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
664 1 <= argument < 12, reduce argument if necessary
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
665 ----------------------------------------------------------- */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
666 n = parseInt(y) - 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
667 y -= parseFloat(n);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
668 z = y - 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
669 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
670 /* ---------------------------------------------------------
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
671 Evaluate approximation for 1. < argument < 2.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
672 ---------------------------------------------------------*/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
673 xnum = 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
674 xden = 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
675 for (i = 0; i < 8; ++i) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
676 xnum = (xnum + p[i]) * z;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
677 xden = xden * z + q[i];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
678 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
679 res = xnum / xden + 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
680 if (yi < y) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
681 /* --------------------------------------------------------
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
682 Adjust result for case 0. < argument < 1.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
683 -------------------------------------------------------- */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
684 res /= yi;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
685 } else if (yi > y) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
686 /* ----------------------------------------------------------
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
687 Adjust result for case 2. < argument < 12.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
688 ---------------------------------------------------------- */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
689 for (i = 0; i < n; ++i) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
690 res *= y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
691 y += 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
692 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
693 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
694 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
695 /* -------------------------------------------------------------
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
696 Evaluate for argument >= 12.,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
697 ------------------------------------------------------------- */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
698 if (y <= xbig) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
699 ysq = y * y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
700 sum = c[6];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
701 for (i = 0; i < 6; ++i) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
702 sum = sum / ysq + c[i];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
703 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
704 sum = sum / y - y + jstat.LN_SQRT_2PI;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
705 sum += (y - 0.5) * Math.log(y);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
706 res = Math.exp(sum);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
707 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
708 return(Number.POSITIVE_INFINITY);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
709 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
710 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
711 /* ----------------------------------------------------------------------
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
712 Final adjustments and return
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
713 ----------------------------------------------------------------------*/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
714 if (parity)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
715 res = -res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
716 if (fact != 1.0)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
717 res = fact / res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
718 return res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
719 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
720
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
721 /** Compute the log gamma correction factor for x >= 10 so that
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
722 *
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
723 * log(gamma(x)) = .5*log(2*pi) + (x-.5)*log(x) -x + lgammacor(x)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
724 *
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
725 * [ lgammacor(x) is called Del(x) in other contexts (e.g. dcdflib)]
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
726 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
727 jstat.lgammacor = function(x) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
728 var algmcs = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
729 +.1666389480451863247205729650822e+0,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
730 -.1384948176067563840732986059135e-4,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
731 +.9810825646924729426157171547487e-8,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
732 -.1809129475572494194263306266719e-10,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
733 +.6221098041892605227126015543416e-13,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
734 -.3399615005417721944303330599666e-15,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
735 +.2683181998482698748957538846666e-17,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
736 -.2868042435334643284144622399999e-19,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
737 +.3962837061046434803679306666666e-21,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
738 -.6831888753985766870111999999999e-23,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
739 +.1429227355942498147573333333333e-24,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
740 -.3547598158101070547199999999999e-26,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
741 +.1025680058010470912000000000000e-27,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
742 -.3401102254316748799999999999999e-29,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
743 +.1276642195630062933333333333333e-30
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
744 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
745
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
746 var tmp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
747 var nalgm = 5;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
748 var xbig = 94906265.62425156;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
749 var xmax = 3.745194030963158e306;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
750
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
751 if(x < 10) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
752 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
753 } else if (x >= xmax) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
754 throw "Underflow error in lgammacor";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
755 } else if (x < xbig) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
756 tmp = 10 / x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
757 return jstat.chebyshev(tmp*tmp*2-1,algmcs,nalgm) / x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
758 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
759 return 1 / (x*12);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
760 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
761
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
762 /*
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
763 * Incomplete Beta function
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
764 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
765 jstat.incompleteBeta = function(a, b, x) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
766 /*
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
767 * Used by incompleteBeta: Evaluates continued fraction for incomplete
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
768 * beta function by modified Lentz's method.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
769 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
770 function betacf(a, b, x) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
771 var MAXIT = 100;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
772 var EPS = 3.0e-12;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
773 var FPMIN = 1.0e-30;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
774
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
775 var m,m2,aa,c,d,del,h,qab,qam,qap;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
776
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
777 qab=a+b;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
778 qap=a+1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
779 qam=a-1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
780 c=1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
781 d=1.0-qab*x/qap;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
782
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
783 if(Math.abs(d) < FPMIN) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
784 d=FPMIN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
785 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
786
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
787 d = 1.0/d;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
788 h=d;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
789 for(m = 1; m <= MAXIT; m++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
790 m2=2*m;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
791 aa=m*(b-m)*x/((qam+m2)*(a+m2));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
792 d=1.0+aa*d;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
793 if(Math.abs(d) < FPMIN) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
794 d = FPMIN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
795 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
796 c=1.0+aa/c;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
797 if(Math.abs(c) < FPMIN) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
798 c = FPMIN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
799 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
800 d=1.0/d;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
801 h *= d*c;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
802 aa = -(a+m)*(qab+m)*x/((a+m2) * (qap+m2));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
803 d=1.0+aa*d;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
804 if(Math.abs(d) < FPMIN) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
805 d = FPMIN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
806 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
807 c=1.0+aa/c;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
808 if(Math.abs(c) < FPMIN) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
809 c=FPMIN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
810 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
811 d=1.0/d;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
812 del=d*c;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
813 h *= del;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
814 if(Math.abs(del-1.0) < EPS) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
815 // are we done?
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
816 break;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
817 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
818 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
819 if(m > MAXIT) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
820 console.warn("a or b too big, or MAXIT too small in betacf: " + a + ", " + b + ", " + x + ", " + h);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
821 return h;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
822 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
823 if(isNaN(h)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
824 console.warn(a + ", " + b + ", " + x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
825 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
826 return h;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
827 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
828
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
829 var bt;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
830
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
831 if(x < 0.0 || x > 1.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
832 throw "bad x in routine incompleteBeta";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
833 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
834 if(x == 0.0 || x == 1.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
835 bt = 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
836 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
837 bt = Math.exp(jstat.lgamma(a+b) - jstat.lgamma(a) - jstat.lgamma(b) + a * Math.log(x)+ b * Math.log(1.0-x));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
838 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
839 if(x < (a + 1.0)/(a+b+2.0)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
840 return bt * betacf(a,b,x)/a;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
841 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
842 return 1.0-bt*betacf(b,a,1.0-x)/b;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
843 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
844 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
845
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
846 /** Evaluates the n-term Chebyshev series
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
847 * "a" at "x".
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
848 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
849 jstat.chebyshev = function(x, a, n) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
850 var b0, b1, b2, twox;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
851 var i;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
852
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
853 if (n < 1 || n > 1000) return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
854
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
855 if (x < -1.1 || x > 1.1) return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
856
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
857 twox = x * 2;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
858 b2 = b1 = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
859 b0 = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
860 for (i = 1; i <= n; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
861 b2 = b1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
862 b1 = b0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
863 b0 = twox * b1 - b2 + a[n - i];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
864 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
865 return (b0 - b2) * 0.5;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
866 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
867
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
868 jstat.fmin2 = function(x, y) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
869 return (x < y) ? x : y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
870 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
871
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
872 jstat.log1p = function(x) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
873 // http://kevin.vanzonneveld.net
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
874 // + original by: Brett Zamir (http://brett-zamir.me)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
875 // % note 1: Precision 'n' can be adjusted as desired
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
876 // * example 1: log1p(1e-15);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
877 // * returns 1: 9.999999999999995e-16
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
878
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
879 var ret = 0,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
880 n = 50; // degree of precision
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
881 if (x <= -1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
882 return Number.NEGATIVE_INFINITY; // JavaScript style would be to return Number.NEGATIVE_INFINITY
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
883 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
884 if (x < 0 || x > 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
885 return Math.log(1 + x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
886 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
887 for (var i = 1; i < n; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
888 if ((i % 2) === 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
889 ret -= Math.pow(x, i) / i;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
890 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
891 ret += Math.pow(x, i) / i;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
892 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
893 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
894 return ret;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
895 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
896
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
897 jstat.expm1 = function(x) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
898 var y, a = Math.abs(x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
899 if(a < jstat.DBL_EPSILON) return x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
900 if(a > 0.697) return Math.exp(x) - 1; /* negligable cancellation */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
901 if(a > 1e-8) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
902 y = Math.exp(x) - 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
903 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
904 y = (x / 2 + 1) * x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
905 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
906
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
907 /* Newton step for solving log(1 + y) = x for y : */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
908 /* WARNING: does not work for y ~ -1: bug in 1.5.0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
909 y -= (1 + y) * (jstat.log1p(y) - x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
910 return y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
911 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
912
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
913 jstat.logBeta = function(a, b) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
914 var corr, p, q;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
915 p = q = a;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
916 if(b < p) p = b;/* := min(a,b) */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
917 if(b > q) q = b;/* := max(a,b) */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
918
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
919 /* both arguments must be >= 0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
920 if (p < 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
921 console.warn('Both arguements must be >= 0');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
922 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
923 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
924 else if (p == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
925 return Number.POSITIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
926 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
927 else if (!jstat.isFinite(q)) { /* q == +Inf */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
928 return Number.NEGATIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
929 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
930
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
931 if (p >= 10) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
932 /* p and q are big. */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
933 corr = jstat.lgammacor(p) + jstat.lgammacor(q) - jstat.lgammacor(p + q);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
934 return Math.log(q) * -0.5 + jstat.LN_SQRT_2PI + corr
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
935 + (p - 0.5) * Math.log(p / (p + q)) + q * jstat.log1p(-p / (p + q));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
936 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
937 else if (q >= 10) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
938 /* p is small, but q is big. */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
939 corr = jstat.lgammacor(q) - jstat.lgammacor(p + q);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
940 return jstat.lgamma(p) + corr + p - p * Math.log(p + q)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
941 + (q - 0.5) * jstat.log1p(-p / (p + q));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
942 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
943 else
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
944 /* p and q are small: p <= q < 10. */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
945 return Math.log(jstat.gamma(p) * (jstat.gamma(q) / jstat.gamma(p + q)));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
946 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
947
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
948 jstat.dbinom_raw = function(x, n, p, q, give_log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
949 if(give_log == null) give_log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
950 var lf, lc;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
951
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
952 if(p == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
953 if(x == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
954 // R_D__1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
955 return (give_log) ? 0.0 : 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
956 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
957 // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
958 return (give_log) ? Number.NEGATIVE_INFINITY : 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
959 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
960 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
961 if(q == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
962 if(x == n) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
963 // R_D__1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
964 return (give_log) ? 0.0 : 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
965 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
966 // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
967 return (give_log) ? Number.NEGATIVE_INFINITY : 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
968 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
969 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
970
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
971 if (x == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
972 if(n == 0) return (give_log) ? 0.0 : 1.0; //R_D__1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
973 lc = (p < 0.1) ? -jstat.bd0(n,n*q) - n*p : n*Math.log(q);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
974 return ( give_log ) ? lc : Math.exp(lc); //R_D_exp(lc)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
975 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
976
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
977 if (x == n) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
978 lc = (q < 0.1) ? -jstat.bd0(n,n*p) - n*q : n*Math.log(p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
979 return ( give_log ) ? lc : Math.exp(lc); //R_D_exp(lc)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
980 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
981
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
982 if (x < 0 || x > n) return (give_log) ? Number.NEGATIVE_INFINITY : 0.0; // R_D__0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
983
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
984 /* n*p or n*q can underflow to zero if n and p or q are small. This
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
985 used to occur in dbeta, and gives NaN as from R 2.3.0. */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
986 lc = jstat.stirlerr(n) - jstat.stirlerr(x) - jstat.stirlerr(n-x) - jstat.bd0(x,n*p) - jstat.bd0(n-x,n*q);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
987
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
988 /* f = (M_2PI*x*(n-x))/n; could overflow or underflow */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
989 /* Upto R 2.7.1:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
990 * lf = log(M_2PI) + log(x) + log(n-x) - log(n);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
991 * -- following is much better for x << n : */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
992 lf = Math.log(jstat.TWO_PI) + Math.log(x) + jstat.log1p(- x/n);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
993
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
994 return (give_log) ? lc - 0.5*lf : Math.exp(lc - 0.5*lf); // R_D_exp(lc - 0.5*lf);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
995 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
996
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
997 jstat.max = function(values) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
998 var max = Number.NEGATIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
999 for(var i = 0; i < values.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1000 if(values[i] > max) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1001 max = values[i];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1002 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1003 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1004 return max;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1005 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1006
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1007 /******************************************************************************/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1008 /* Probability Distributions */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1009 /******************************************************************************/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1010
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1011 /**
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1012 * Range class
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1013 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1014 var Range = Class.extend({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1015 init: function(min, max, numPoints) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1016 this._minimum = parseFloat(min);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1017 this._maximum = parseFloat(max);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1018 this._numPoints = parseFloat(numPoints);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1019 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1020 getMinimum: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1021 return this._minimum;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1022 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1023 getMaximum: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1024 return this._maximum;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1025 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1026 getNumPoints: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1027 return this._numPoints;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1028 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1029 getPoints: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1030 var results = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1031 var x = this._minimum;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1032 var step = (this._maximum-this._minimum)/(this._numPoints-1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1033 for(var i = 0; i < this._numPoints; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1034 results[i] = parseFloat(x.toFixed(6));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1035 x += step;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1036 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1037 return results;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1038 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1039 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1040
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1041 Range.validate = function(range) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1042 if( ! range instanceof Range) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1043 return false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1044 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1045 if(isNaN(range.getMinimum()) || isNaN(range.getMaximum()) || isNaN(range.getNumPoints()) || range.getMaximum() < range.getMinimum() || range.getNumPoints() <= 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1046 return false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1047 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1048 return true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1049 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1050
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1051 var ContinuousDistribution = Class.extend({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1052 init: function(name) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1053 this._name = name;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1054 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1055 toString: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1056 return this._string;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1057 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1058 getName: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1059 return this._name;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1060 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1061 getClassName: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1062 return this._name + 'Distribution';
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1063 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1064 density: function(valueOrRange) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1065 if(!isNaN(valueOrRange)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1066 // single value
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1067 return parseFloat(this._pdf(valueOrRange).toFixed(15));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1068 } else if (Range.validate(valueOrRange)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1069 // multiple values
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1070 var points = valueOrRange.getPoints();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1071
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1072 var result = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1073 // For each point in the range
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1074 for(var i = 0; i < points.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1075 result[i] = parseFloat(this._pdf(points[i]));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1076 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1077 return result;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1078 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1079 // neither value or range
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1080 throw "Invalid parameter supplied to " + this.getClassName() + ".density()";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1081 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1082 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1083 cumulativeDensity: function(valueOrRange) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1084 if(!isNaN(valueOrRange)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1085 // single value
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1086 return parseFloat(this._cdf(valueOrRange).toFixed(15));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1087 } else if (Range.validate(valueOrRange)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1088 // multiple values
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1089 var points = valueOrRange.getPoints();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1090 var result = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1091 // For each point in the range
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1092 for(var i = 0; i < points.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1093 result[i] = parseFloat(this._cdf(points[i]));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1094 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1095 return result;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1096 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1097 // neither value or range
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1098 throw "Invalid parameter supplied to " + this.getClassName() + ".cumulativeDensity()";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1099 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1100 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1101 getRange: function(standardDeviations, numPoints) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1102 if(standardDeviations == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1103 standardDeviations = 5;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1104 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1105 if(numPoints == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1106 numPoints = 100;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1107 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1108 var min = this.getMean() - standardDeviations * Math.sqrt(this.getVariance());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1109 var max = this.getMean() + standardDeviations * Math.sqrt(this.getVariance());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1110
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1111 if(this.getClassName() == 'GammaDistribution' || this.getClassName() == 'LogNormalDistribution') {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1112 min = 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1113 max = this.getMean() + standardDeviations * Math.sqrt(this.getVariance());
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1114 } else if(this.getClassName() == 'BetaDistribution') {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1115 min = 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1116 max = 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1117 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1118
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1119
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1120 var range = new Range(min, max, numPoints);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1121 return range;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1122 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1123 getVariance: function(){},
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1124 getMean: function(){},
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1125 getQuantile: function(p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1126 var self = this;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1127 /*
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1128 * Recursive function to find the closest match
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1129 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1130 function findClosestMatch(range, p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1131 var ERR = 1.0e-5;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1132 var xs = range.getPoints();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1133 var closestIndex = 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1134 var closestDistance = 999;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1135
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1136 for(var i=0; i<xs.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1137 var pp = self.cumulativeDensity(xs[i]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1138 var distance = Math.abs(pp - p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1139 if(distance < closestDistance) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1140 // closer value found
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1141 closestIndex = i;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1142 closestDistance = distance;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1143 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1144 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1145 if(closestDistance <= ERR) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1146 // Acceptable - return value;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1147 return xs[closestIndex];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1148 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1149 // Calculate the new range
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1150 var newRange = new Range(xs[closestIndex-1], xs[closestIndex+1],20);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1151 return findClosestMatch(newRange, p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1152 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1153 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1154 var range = this.getRange(5, 20);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1155 return findClosestMatch(range, p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1156 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1157 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1158
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1159 /**
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1160 * A normal distribution object
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1161 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1162 var NormalDistribution = ContinuousDistribution.extend({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1163 init: function(mean, sigma) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1164 this._super('Normal');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1165 this._mean = parseFloat(mean);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1166 this._sigma = parseFloat(sigma);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1167 this._string = "Normal ("+this._mean.toFixed(2)+", " + this._sigma.toFixed(2) + ")";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1168 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1169 _pdf: function(x, give_log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1170 if(give_log == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1171 give_log=false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1172 } // default is false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1173 var sigma = this._sigma;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1174 var mu = this._mean;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1175 if(!jstat.isFinite(sigma)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1176 return (give_log) ? Number.NEGATIVE_INFINITY : 0.0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1177 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1178 if(!jstat.isFinite(x) && mu == x) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1179 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1180 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1181 if(sigma<=0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1182 if(sigma < 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1183 throw "invalid sigma in _pdf";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1184 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1185 return (x==mu)?Number.POSITIVE_INFINITY:(give_log)?Number.NEGATIVE_INFINITY:0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1186 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1187 x=(x-mu)/sigma;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1188 if(!jstat.isFinite(x)){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1189 return (give_log)?Number.NEGATIVE_INFINITY:0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1190 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1191 return (give_log ? -(jstat.LN_SQRT_2PI + 0.5 * x * x + Math.log(sigma)) :
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1192 jstat.ONE_SQRT_2PI * Math.exp(-0.5 * x * x) / sigma);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1193 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1194 _cdf: function(x, lower_tail, log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1195
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1196 if(lower_tail == null) lower_tail = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1197 if(log_p == null) log_p = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1198
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1199 function pnorm_both(x, cum, ccum, i_tail, log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1200 /* i_tail in {0,1,2} means: "lower", "upper", or "both" :
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1201 if(lower) return *cum := P[X <= x]
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1202 if(upper) return *ccum := P[X > x] = 1 - P[X <= x]
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1203 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1204
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1205 var a = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1206 2.2352520354606839287,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1207 161.02823106855587881,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1208 1067.6894854603709582,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1209 18154.981253343561249,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1210 0.065682337918207449113
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1211 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1212 var b = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1213 47.20258190468824187,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1214 976.09855173777669322,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1215 10260.932208618978205,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1216 45507.789335026729956
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1217 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1218 var c = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1219 0.39894151208813466764,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1220 8.8831497943883759412,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1221 93.506656132177855979,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1222 597.27027639480026226,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1223 2494.5375852903726711,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1224 6848.1904505362823326,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1225 11602.651437647350124,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1226 9842.7148383839780218,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1227 1.0765576773720192317e-8
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1228 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1229 var d = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1230 22.266688044328115691,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1231 235.38790178262499861,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1232 1519.377599407554805,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1233 6485.558298266760755,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1234 18615.571640885098091,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1235 34900.952721145977266,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1236 38912.003286093271411,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1237 19685.429676859990727
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1238 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1239 var p = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1240 0.21589853405795699,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1241 0.1274011611602473639,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1242 0.022235277870649807,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1243 0.001421619193227893466,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1244 2.9112874951168792e-5,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1245 0.02307344176494017303
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1246 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1247 var q = [
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1248 1.28426009614491121,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1249 0.468238212480865118,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1250 0.0659881378689285515,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1251 0.00378239633202758244,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1252 7.29751555083966205e-5
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1253 ];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1254
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1255 var xden, xnum, temp, del, eps, xsq, y, i, lower, upper;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1256
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1257 /* Consider changing these : */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1258 eps = jstat.DBL_EPSILON * 0.5;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1259
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1260 /* i_tail in {0,1,2} =^= {lower, upper, both} */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1261 lower = i_tail != 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1262 upper = i_tail != 0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1263
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1264 y = Math.abs(x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1265
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1266 if (y <= 0.67448975) { /* qnorm(3/4) = .6744.... -- earlier had 0.66291 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1267 if (y > eps) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1268 xsq = x * x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1269 xnum = a[4] * xsq;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1270 xden = xsq;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1271 for (i = 0; i < 3; ++i) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1272 xnum = (xnum + a[i]) * xsq;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1273 xden = (xden + b[i]) * xsq;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1274 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1275 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1276 xnum = xden = 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1277 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1278 temp = x * (xnum + a[3]) / (xden + b[3]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1279 if(lower) cum = 0.5 + temp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1280 if(upper) ccum = 0.5 - temp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1281 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1282 if(lower) cum = Math.log(cum);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1283 if(upper) ccum = Math.log(ccum);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1284 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1285
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1286 } else if (y <= jstat.SQRT_32) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1287 /* Evaluate pnorm for 0.674.. = qnorm(3/4) < |x| <= sqrt(32) ~= 5.657 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1288
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1289 xnum = c[8] * y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1290 xden = y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1291 for (i = 0; i < 7; ++i) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1292 xnum = (xnum + c[i]) * y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1293 xden = (xden + d[i]) * y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1294 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1295 temp = (xnum + c[7]) / (xden + d[7]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1296
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1297 /* do_del */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1298 xsq = jstat.trunc(x * 16) / 16;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1299 del = (x - xsq) * (x + xsq);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1300 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1301 cum = (-xsq * xsq * 0.5) + (-del * 0.5) + Math.log(temp);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1302 if((lower && x > 0.) || (upper && x <= 0.))
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1303 ccum = jstat.log1p(-Math.exp(-xsq * xsq * 0.5) *
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1304 Math.exp(-del * 0.5) * temp);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1305 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1306 else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1307 cum = Math.exp(-xsq * xsq * 0.5) * Math.exp(-del * 0.5) * temp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1308 ccum = 1.0 - cum;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1309 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1310 /* end do_del */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1311
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1312 /* swap_tail */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1313 if (x > 0.0) {/* swap ccum <--> cum */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1314 temp = cum;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1315 if(lower) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1316 cum = ccum;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1317
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1318 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1319 ccum = temp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1320 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1321 /* end swap_tail */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1322
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1323 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1324 /* else |x| > sqrt(32) = 5.657 :
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1325 * the next two case differentiations were really for lower=T, log=F
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1326 * Particularly *not* for log_p !
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1327
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1328 * Cody had (-37.5193 < x && x < 8.2924) ; R originally had y < 50
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1329 *
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1330 * Note that we do want symmetry(0), lower/upper -> hence use y
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1331 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1332
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1333 else if((log_p && y < 1e170)|| (lower && -37.5193 < x && x < 8.2924)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1334 || (upper && -8.2924 < x && x < 37.5193)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1335 /* Evaluate pnorm for x in (-37.5, -5.657) union (5.657, 37.5) */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1336 xsq = 1.0 / (x * x); /* (1./x)*(1./x) might be better */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1337 xnum = p[5] * xsq;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1338 xden = xsq;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1339 for (i = 0; i < 4; ++i) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1340 xnum = (xnum + p[i]) * xsq;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1341 xden = (xden + q[i]) * xsq;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1342 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1343 temp = xsq * (xnum + p[4]) / (xden + q[4]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1344 temp = (jstat.ONE_SQRT_2PI - temp) / y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1345
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1346 /* do_del */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1347 xsq = jstat.trunc(x * 16) / 16;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1348 del = (x - xsq) * (x + xsq);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1349 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1350 cum = (-xsq * xsq * 0.5) + (-del * 0.5) + Math.log(temp);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1351 if((lower && x > 0.) || (upper && x <= 0.))
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1352 ccum = jstat.log1p(-Math.exp(-xsq * xsq * 0.5) *
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1353 Math.exp(-del * 0.5) * temp);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1354 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1355 else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1356 cum = Math.exp(-xsq * xsq * 0.5) * Math.exp(-del * 0.5) * temp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1357 ccum = 1.0 - cum;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1358 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1359 /* end do_del */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1360
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1361 /* swap_tail */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1362 if (x > 0.0) {/* swap ccum <--> cum */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1363 temp = cum;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1364 if(lower) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1365 cum = ccum;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1366
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1367 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1368 ccum = temp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1369 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1370 /* end swap_tail */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1371
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1372 } else { /* large x such that probs are 0 or 1 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1373 if(x > 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1374 cum = (log_p) ? 0.0 : 1.0; // R_D__1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1375 ccum = (log_p) ? Number.NEGATIVE_INFINITY : 0.0; //R_D__0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1376 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1377 cum = (log_p) ? Number.NEGATIVE_INFINITY : 0.0; //R_D__0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1378 ccum = (log_p) ? 0.0 : 1.0; // R_D__1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1379 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1380 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1381
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1382 return [cum, ccum];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1383 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1384
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1385 var p, cp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1386 var mu = this._mean;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1387 var sigma = this._sigma;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1388 var R_DT_0, R_DT_1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1389
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1390 if(lower_tail) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1391 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1392 R_DT_0 = Number.NEGATIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1393 R_DT_1 = 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1394 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1395 R_DT_0 = 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1396 R_DT_1 = 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1397 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1398 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1399 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1400 R_DT_0 = 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1401 R_DT_1 = Number.NEGATIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1402 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1403 R_DT_0 = 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1404 R_DT_1 = 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1405 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1406 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1407
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1408 if(!jstat.isFinite(x) && mu == x) return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1409 if(sigma <= 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1410 if(sigma < 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1411 console.warn("Sigma is less than 0");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1412 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1413 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1414 return (x < mu) ? R_DT_0 : R_DT_1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1415 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1416
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1417 p = (x - mu) / sigma;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1418
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1419 if(!jstat.isFinite(p)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1420 return (x < mu) ? R_DT_0 : R_DT_1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1421 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1422
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1423 x = p;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1424
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1425 // pnorm_both(x, &p, &cp, (lower_tail ? 0 : 1), log_p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1426 // result[0] == &p
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1427 // result[1] == &cp
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1428
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1429 var result = pnorm_both(x, p, cp, (lower_tail ? false : true), log_p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1430
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1431 return (lower_tail ? result[0] : result[1]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1432
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1433 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1434 getMean: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1435 return this._mean;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1436 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1437 getSigma: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1438 return this._sigma;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1439 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1440 getVariance: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1441 return this._sigma*this._sigma;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1442 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1443 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1444
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1445 /**
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1446 * A Log-normal distribution object
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1447 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1448 var LogNormalDistribution = ContinuousDistribution.extend({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1449 init: function(location, scale) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1450 this._super('LogNormal')
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1451 this._location = parseFloat(location);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1452 this._scale = parseFloat(scale);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1453 this._string = "LogNormal ("+this._location.toFixed(2)+", " + this._scale.toFixed(2) + ")";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1454 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1455 _pdf: function(x, give_log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1456 var y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1457 var sdlog = this._scale;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1458 var meanlog = this._location;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1459 if(give_log == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1460 give_log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1461 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1462
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1463 if(sdlog <= 0) throw "Illegal parameter in _pdf";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1464
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1465 if(x <= 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1466 return (give_log) ? Number.NEGATIVE_INFINITY : 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1467 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1468
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1469 y = (Math.log(x) - meanlog) / sdlog;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1470
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1471 return (give_log ? -(jstat.LN_SQRT_2PI + 0.5 * y * y + Math.log(x * sdlog)) :
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1472 jstat.ONE_SQRT_2PI * Math.exp(-0.5 * y * y) / (x * sdlog));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1473
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1474 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1475 _cdf: function(x, lower_tail, log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1476 var sdlog = this._scale;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1477 var meanlog = this._location;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1478 if(lower_tail == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1479 lower_tail = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1480 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1481 if(log_p == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1482 log_p = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1483 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1484
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1485
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1486 if(sdlog <= 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1487 throw "illegal std in _cdf";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1488 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1489
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1490 if(x > 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1491 var nd = new NormalDistribution(meanlog, sdlog);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1492 return nd._cdf(Math.log(x), lower_tail, log_p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1493 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1494 if(lower_tail) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1495 return (log_p) ? Number.NEGATIVE_INFINITY : 0.0; // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1496 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1497 return (log_p) ? 0.0 : 1.0; // R_D__1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1498 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1499 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1500 getLocation: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1501 return this._location;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1502 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1503 getScale: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1504 return this._scale;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1505 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1506 getMean: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1507 return Math.exp((this._location + this._scale) / 2);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1508 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1509 getVariance: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1510 var ans = (Math.exp(this._scale)-1)*Math.exp(2*this._location+this._scale);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1511 return ans;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1512 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1513 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1514
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1515
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1516 /**
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1517 * Gamma distribution object
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1518 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1519 var GammaDistribution = ContinuousDistribution.extend({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1520 init: function(shape, scale) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1521 this._super('Gamma');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1522 this._shape = parseFloat(shape);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1523 this._scale = parseFloat(scale);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1524 this._string = "Gamma ("+this._shape.toFixed(2)+", " + this._scale.toFixed(2) + ")";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1525 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1526 _pdf: function(x, give_log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1527 var pr;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1528 var shape = this._shape;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1529 var scale = this._scale;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1530 if(give_log == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1531 give_log = false; // default value
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1532 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1533
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1534 if(shape < 0 || scale <= 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1535 throw "Illegal argument in _pdf";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1536 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1537
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1538 if(x < 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1539 return (give_log) ? Number.NEGATIVE_INFINITY : 0.0; // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1540 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1541 if(shape == 0) { /* point mass at 0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1542 return (x == 0) ? Number.POSITIVE_INFINITY : (give_log) ? Number.NEGATIVE_INFINITY : 0.0; // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1543 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1544 if(x == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1545 if(shape < 1) return Number.POSITIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1546 if(shape > 1) return (give_log) ? Number.NEGATIVE_INFINITY : 0.0; // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1547 /* else */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1548 return (give_log) ? -Math.log(scale) : 1/scale;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1549 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1550
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1551 if(shape < 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1552 pr = jstat.dopois_raw(shape, x/scale, give_log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1553 return give_log ? pr + Math.log(shape/x) : pr*shape/x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1554 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1555 /* else shape >= 1 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1556 pr = jstat.dopois_raw(shape-1, x/scale, give_log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1557 return give_log ? pr - Math.log(scale) : pr/scale;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1558
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1559 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1560 /**
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1561 * This function computes the distribution function for the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1562 * gamma distribution with shape parameter alph and scale parameter
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1563 * scale. This is also known as the incomplete gamma function.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1564 * See Abramowitz and Stegun (6.5.1) for example.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1565 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1566 _cdf: function(x, lower_tail, log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1567 /* define USE_PNORM */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1568 function USE_PNORM() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1569 pn1 = Math.sqrt(alph) * 3.0 * (Math.pow(x/alph,1.0/3.0) + 1.0 / (9.0 * alph) - 1.0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1570 var norm_dist = new NormalDistribution(0.0, 1.0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1571 return norm_dist._cdf(pn1, lower_tail, log_p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1572 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1573
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1574 /* Defaults */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1575 if(lower_tail == null) lower_tail = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1576 if(log_p == null) log_p = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1577 var alph = this._shape;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1578 var scale = this._scale;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1579 var xbig = 1.0e+8;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1580 var xlarge = 1.0e+37;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1581 var alphlimit = 1e5;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1582 var pn1,pn2,pn3,pn4,pn5,pn6,arg,a,b,c,an,osum,sum,n,pearson;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1583
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1584 if(alph <= 0. || scale <= 0.) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1585 console.warn('Invalid gamma params in _cdf');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1586 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1587 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1588
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1589 x/=scale;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1590 if(isNaN(x)) return x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1591 if(x <= 0.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1592 // R_DT_0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1593 if(lower_tail) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1594 // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1595 return (log_p) ? Number.NEGATIVE_INFINITY : 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1596 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1597 // R_D__1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1598 return (log_p) ? 0.0 : 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1599 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1600 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1601
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1602 if(alph > alphlimit) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1603 return USE_PNORM();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1604 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1605
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1606 if(x > xbig * alph) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1607 if(x > jstat.DBL_MAX * alph) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1608 // R_DT_1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1609 if(lower_tail) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1610 // R_D__1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1611 return (log_p) ? 0.0 : 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1612 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1613 // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1614 return (log_p) ? Number.NEGATIVE_INFINITY : 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1615 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1616 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1617 return USE_PNORM();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1618 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1619 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1620
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1621 if(x <= 1.0 || x < alph) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1622 pearson = 1; /* use pearson's series expansion */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1623 arg = alph * Math.log(x) - x - jstat.lgamma(alph + 1.0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1624
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1625 c = 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1626 sum = 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1627 a = alph;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1628 do {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1629 a += 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1630 c *= x / a;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1631 sum += c;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1632 } while(c > jstat.DBL_EPSILON * sum);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1633 } else { /* x >= max( 1, alph) */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1634 pearson = 0;/* use a continued fraction expansion */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1635 arg = alph * Math.log(x) - x - jstat.lgamma(alph);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1636
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1637 a = 1. - alph;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1638 b = a + x + 1.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1639 pn1 = 1.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1640 pn2 = x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1641 pn3 = x + 1.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1642 pn4 = x * b;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1643 sum = pn3 / pn4;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1644
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1645 for (n = 1; ; n++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1646 a += 1.;/* = n+1 -alph */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1647 b += 2.;/* = 2(n+1)-alph+x */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1648 an = a * n;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1649 pn5 = b * pn3 - an * pn1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1650 pn6 = b * pn4 - an * pn2;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1651 if (Math.abs(pn6) > 0.) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1652 osum = sum;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1653 sum = pn5 / pn6;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1654 if (Math.abs(osum - sum) <= jstat.DBL_EPSILON * jstat.fmin2(1.0, sum))
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1655 break;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1656 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1657 pn1 = pn3;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1658 pn2 = pn4;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1659 pn3 = pn5;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1660 pn4 = pn6;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1661
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1662 if (Math.abs(pn5) >= xlarge) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1663 pn1 /= xlarge;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1664 pn2 /= xlarge;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1665 pn3 /= xlarge;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1666 pn4 /= xlarge;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1667 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1668 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1669 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1670 arg += Math.log(sum);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1671 lower_tail = (lower_tail == pearson);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1672
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1673 if (log_p && lower_tail)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1674 return(arg);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1675 /* else */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1676 /* sum = exp(arg); and return if(lower_tail) sum else 1-sum : */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1677
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1678 if(lower_tail) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1679 return Math.exp(arg);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1680 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1681 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1682 // R_Log1_Exp(arg);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1683 return (arg > -Math.LN2) ? Math.log(-jstat.expm1(arg)) : jstat.log1p(-Math.exp(arg));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1684 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1685 return -jstat.expm1(arg);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1686 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1687 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1688 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1689 getShape: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1690 return this._shape;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1691 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1692 getScale: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1693 return this._scale;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1694 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1695 getMean: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1696 return this._shape * this._scale;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1697 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1698 getVariance: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1699 return this._shape*Math.pow(this._scale,2);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1700 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1701 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1702
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1703 /**
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1704 * A Beta distribution object
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1705 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1706 var BetaDistribution = ContinuousDistribution.extend({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1707 init: function(alpha, beta) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1708 this._super('Beta');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1709 this._alpha = parseFloat(alpha);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1710 this._beta = parseFloat(beta);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1711 this._string = "Beta ("+this._alpha.toFixed(2)+", " + this._beta.toFixed(2) + ")";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1712 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1713 _pdf: function(x, give_log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1714 if(give_log == null) give_log = false; // default;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1715 var a = this._alpha;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1716 var b = this._beta;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1717 var lval;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1718 if(a <= 0 || b <= 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1719 console.warn('Illegal arguments in _pdf');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1720 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1721 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1722 if(x < 0 || x > 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1723 // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1724 return (give_log) ? Number.NEGATIVE_INFINITY : 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1725 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1726 if(x == 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1727 if(a > 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1728 // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1729 return (give_log) ? Number.NEGATIVE_INFINITY : 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1730 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1731 if(a < 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1732 return Number.POSITIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1733 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1734 /*a == 1 */ return (give_log) ? Math.log(b) : b; // R_D_val(b)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1735 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1736 if(x == 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1737 if(b > 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1738 // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1739 return (give_log) ? Number.NEGATIVE_INFINITY : 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1740 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1741 if(b < 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1742 return Number.POSITIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1743 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1744 /* b == 1 */ return (give_log) ? Math.log(a) : a; // R_D_val(a)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1745 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1746 if(a<=2||b<=2) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1747 lval = (a-1)*Math.log(x) + (b-1)*jstat.log1p(-x) - jstat.logBeta(a, b);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1748 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1749 lval = Math.log(a+b-1) + jstat.dbinom_raw(a-1, a+b-2, x, 1-x, true);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1750 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1751 //R_D_exp(lval)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1752 return (give_log) ? lval : Math.exp(lval);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1753 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1754 _cdf: function(x, lower_tail, log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1755 if(lower_tail == null) lower_tail = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1756 if(log_p == null) log_p = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1757
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1758 var pin = this._alpha;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1759 var qin = this._beta;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1760
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1761 if(pin <= 0 || qin <= 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1762 console.warn('Invalid argument in _cdf');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1763 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1764 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1765
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1766 if(x <= 0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1767 //R_DT_0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1768 if(lower_tail) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1769 // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1770 return (log_p) ? Number.NEGATIVE_INFINITY : 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1771 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1772 // R_D__1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1773 return (log_p) ? 0.1 : 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1774 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1775 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1776
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1777 if(x >= 1){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1778 // R_DT_1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1779 if(lower_tail) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1780 // R_D__1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1781 return (log_p) ? 0.1 : 1.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1782 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1783 // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1784 return (log_p) ? Number.NEGATIVE_INFINITY : 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1785 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1786 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1787
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1788 /* else */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1789 return jstat.incompleteBeta(pin, qin, x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1790 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1791 getAlpha: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1792 return this._alpha;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1793 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1794 getBeta: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1795 return this._beta;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1796 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1797 getMean: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1798 return this._alpha / (this._alpha+ this._beta);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1799 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1800 getVariance: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1801 var ans = (this._alpha * this._beta) / (Math.pow(this._alpha+this._beta,2)*(this._alpha+this._beta+1));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1802 return ans;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1803 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1804 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1805
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1806 var StudentTDistribution = ContinuousDistribution.extend({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1807 init: function(degreesOfFreedom, mu) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1808 this._super('StudentT');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1809 this._dof = parseFloat(degreesOfFreedom);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1810
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1811 if(mu != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1812 this._mu = parseFloat(mu);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1813 this._string = "StudentT ("+this._dof.toFixed(2)+", " + this._mu.toFixed(2)+ ")";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1814 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1815 this._mu = 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1816 this._string = "StudentT ("+this._dof.toFixed(2)+")";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1817 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1818
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1819 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1820 _pdf: function(x, give_log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1821 if(give_log == null) give_log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1822 if(this._mu == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1823 return this._dt(x, give_log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1824 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1825 var y = this._dnt(x, give_log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1826 if(y > 1){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1827 console.warn('x:' + x + ', y: ' + y);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1828 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1829 return y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1830 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1831 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1832 _cdf: function(x, lower_tail, give_log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1833 if(lower_tail == null) lower_tail = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1834 if(give_log == null) give_log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1835 if(this._mu == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1836 return this._pt(x, lower_tail, give_log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1837 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1838 return this._pnt(x, lower_tail, give_log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1839 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1840 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1841 _dt: function(x, give_log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1842 var t,u;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1843 var n = this._dof;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1844 if (n <= 0){
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1845 console.warn('Invalid parameters in _dt');
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1846 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1847 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1848 if(!jstat.isFinite(x)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1849 return (give_log) ? Number.NEGATIVE_INFINITY : 0.0; // R_D__0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1850 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1851
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1852 if(!jstat.isFinite(n)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1853 var norm = new NormalDistribution(0.0, 1.0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1854 return norm.density(x, give_log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1855 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1856
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1857
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1858 t = -jstat.bd0(n/2.0,(n+1)/2.0) + jstat.stirlerr((n+1)/2.0) - jstat.stirlerr(n/2.0);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1859 if ( x*x > 0.2*n )
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1860 u = Math.log( 1+ x*x/n ) * n/2;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1861 else
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1862 u = -jstat.bd0(n/2.0,(n+x*x)/2.0) + x*x/2.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1863
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1864 var p1 = jstat.TWO_PI *(1+x*x/n);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1865 var p2 = t-u;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1866
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1867 return (give_log) ? -0.5*Math.log(p1) + p2 : Math.exp(p2)/Math.sqrt(p1); // R_D_fexp(M_2PI*(1+x*x/n), t-u);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1868 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1869 _dnt: function(x, give_log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1870 if(give_log == null) give_log = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1871 var df = this._dof;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1872 var ncp = this._mu;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1873 var u;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1874
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1875 if(df <= 0.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1876 console.warn("Illegal arguments _dnf");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1877 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1878 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1879 if(ncp == 0.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1880 return this._dt(x, give_log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1881 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1882
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1883 if(!jstat.isFinite(x)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1884 // R_D__0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1885 if(give_log) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1886 return Number.NEGATIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1887 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1888 return 0.0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1889 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1890 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1891
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1892 /* If infinite df then the density is identical to a
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1893 normal distribution with mean = ncp. However, the formula
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1894 loses a lot of accuracy around df=1e9
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1895 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1896 if(!isFinite(df) || df > 1e8) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1897 var dist = new NormalDistribution(ncp, 1.);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1898 return dist.density(x, give_log);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1899 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1900
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1901 /* Do calculations on log scale to stabilize */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1902
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1903 /* Consider two cases: x ~= 0 or not */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1904 if (Math.abs(x) > Math.sqrt(df * jstat.DBL_EPSILON)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1905 var newT = new StudentTDistribution(df+2, ncp);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1906 u = Math.log(df) - Math.log(Math.abs(x)) +
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1907 Math.log(Math.abs(newT._pnt(x*Math.sqrt((df+2)/df), true, false) -
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1908 this._pnt(x, true, false)));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1909 /* FIXME: the above still suffers from cancellation (but not horribly) */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1910 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1911 else { /* x ~= 0 : -> same value as for x = 0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1912 u = jstat.lgamma((df+1)/2) - jstat.lgamma(df/2)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1913 - .5*(Math.log(Math.PI) + Math.log(df) + ncp*ncp);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1914 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1915
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1916 return (give_log ? u : Math.exp(u));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1917 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1918 _pt: function(x, lower_tail, log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1919 if(lower_tail == null) lower_tail = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1920 if(log_p == null) log_p = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1921 var val, nx;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1922 var n = this._dof;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1923 var DT_0, DT_1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1924
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1925 if(lower_tail) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1926 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1927 DT_0 = Number.NEGATIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1928 DT_1 = 1.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1929 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1930 DT_0 = 0.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1931 DT_1 = 1.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1932 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1933 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1934 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1935 // not lower_tail but log_p
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1936 DT_0 = 0.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1937 DT_1 = Number.NEGATIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1938 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1939 // not lower_tail and not log_p
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1940 DT_0 = 1.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1941 DT_1 = 0.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1942 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1943 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1944
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1945 if(n <= 0.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1946 console.warn("Invalid T distribution _pt");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1947 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1948 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1949 var norm = new NormalDistribution(0,1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1950 if(!jstat.isFinite(x)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1951 return (x < 0) ? DT_0 : DT_1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1952 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1953 if(!jstat.isFinite(n)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1954 return norm._cdf(x, lower_tail, log_p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1955 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1956
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1957 if (n > 4e5) { /*-- Fixme(?): test should depend on `n' AND `x' ! */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1958 /* Approx. from Abramowitz & Stegun 26.7.8 (p.949) */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1959 val = 1./(4.*n);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1960 return norm._cdf(x*(1. - val)/sqrt(1. + x*x*2.*val), lower_tail, log_p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1961 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1962
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1963 nx = 1 + (x/n)*x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1964 /* FIXME: This test is probably losing rather than gaining precision,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1965 * now that pbeta(*, log_p = TRUE) is much better.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1966 * Note however that a version of this test *is* needed for x*x > D_MAX */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1967 if(nx > 1e100) { /* <==> x*x > 1e100 * n */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1968 /* Danger of underflow. So use Abramowitz & Stegun 26.5.4
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1969 pbeta(z, a, b) ~ z^a(1-z)^b / aB(a,b) ~ z^a / aB(a,b),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1970 with z = 1/nx, a = n/2, b= 1/2 :
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1971 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1972 var lval;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1973 lval = -0.5*n*(2*Math.log(Math.abs(x)) - Math.log(n))
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1974 - jstat.logBeta(0.5*n, 0.5) - Math.log(0.5*n);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1975 val = log_p ? lval : Math.exp(lval);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1976 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1977 /*
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1978 val = (n > x * x)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1979 // ? pbeta (x * x / (n + x * x), 0.5, n / 2., 0, log_p)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1980 // : pbeta (1. / nx, n / 2., 0.5, 1, log_p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1981 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1982 if(n > x * x) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1983 var beta = new BetaDistribution(0.5, n/2.);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1984 return beta._cdf(x*x/ (n + x * x), false, log_p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1985 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1986 beta = new BetaDistribution(n / 2., 0.5);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1987 return beta._cdf(1. / nx, true, log_p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1988 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1989
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1990
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1991 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1992
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1993 /* Use "1 - v" if lower_tail and x > 0 (but not both):*/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1994 if(x <= 0.)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1995 lower_tail = !lower_tail;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1996
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1997 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1998 if(lower_tail) return jstat.log1p(-0.5*Math.exp(val));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1999 else return val - M_LN2; /* = log(.5* pbeta(....)) */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2000 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2001 else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2002 val /= 2.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2003 if(lower_tail) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2004 return (0.5 - val + 0.5);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2005 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2006 return val;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2007 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2008 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2009 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2010 _pnt: function(t, lower_tail, log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2011
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2012 var dof = this._dof;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2013 var ncp = this._mu;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2014 var DT_0, DT_1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2015
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2016 if(lower_tail) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2017 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2018 DT_0 = Number.NEGATIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2019 DT_1 = 1.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2020 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2021 DT_0 = 0.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2022 DT_1 = 1.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2023 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2024 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2025 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2026 // not lower_tail but log_p
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2027 DT_0 = 0.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2028 DT_1 = Number.NEGATIVE_INFINITY;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2029 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2030 // not lower_tail and not log_p
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2031 DT_0 = 1.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2032 DT_1 = 0.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2033 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2034 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2035
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2036 var albeta, a, b, del, errbd, lambda, rxb, tt, x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2037 var geven, godd, p, q, s, tnc, xeven, xodd;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2038 var it, negdel;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2039
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2040 /* note - itrmax and errmax may be changed to suit one's needs. */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2041 var ITRMAX = 1000;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2042 var ERRMAX = 1.e-7;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2043
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2044 if(dof <= 0.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2045 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2046 } else if (dof == 0.0) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2047 return this._pt(t);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2048 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2049
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2050 if(!jstat.isFinite(t)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2051 return (t < 0) ? DT_0 : DT_1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2052 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2053 if(t >= 0.) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2054 negdel = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2055 tt = t;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2056 del = ncp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2057 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2058 /* We deal quickly with left tail if extreme,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2059 since pt(q, df, ncp) <= pt(0, df, ncp) = \Phi(-ncp) */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2060 if(ncp >= 40 && (!log_p || !lower_tail)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2061 return DT_0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2062 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2063 negdel = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2064 tt = -t;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2065 del = -ncp;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2066 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2067
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2068 if(dof > 4e5 || del*del > 2* Math.LN2 * (-(jstat.DBL_MIN_EXP))) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2069 /*-- 2nd part: if del > 37.62, then p=0 below
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2070 FIXME: test should depend on `df', `tt' AND `del' ! */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2071 /* Approx. from Abramowitz & Stegun 26.7.10 (p.949) */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2072 s=1./(4.*dof);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2073 var norm = new NormalDistribution(del, Math.sqrt(1. + tt*tt*2.*s));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2074 var result = norm._cdf(tt*(1.-s), lower_tail != negdel, log_p);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2075 return result;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2076 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2077
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2078 /* initialize twin series */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2079 /* Guenther, J. (1978). Statist. Computn. Simuln. vol.6, 199. */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2080 x = t * t;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2081 rxb = dof/(x + dof);/* := (1 - x) {x below} -- but more accurately */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2082 x = x / (x + dof);/* in [0,1) */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2083 if (x > 0.) {/* <==> t != 0 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2084 lambda = del * del;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2085 p = .5 * Math.exp(-.5 * lambda);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2086 if(p == 0.) { // underflow!
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2087 console.warn("underflow in _pnt");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2088 return DT_0;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2089 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2090 q = jstat.SQRT_2dPI * p * del;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2091 s = .5 - p;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2092 if(s < 1e-7) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2093 s = -0.5 * jstat.expm1(-0.5 * lambda);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2094 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2095 a = .5;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2096 b = .5 * dof;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2097 /* rxb = (1 - x) ^ b [ ~= 1 - b*x for tiny x --> see 'xeven' below]
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2098 * where '(1 - x)' =: rxb {accurately!} above */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2099 rxb = Math.pow(rxb, b);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2100 albeta = jstat.LN_SQRT_PI + jstat.lgamma(b) - jstat.lgamma(.5 + b);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2101 /* TODO: change incompleteBeta function to accept lower_tail and p_log */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2102 xodd = jstat.incompleteBeta(a, b, x);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2103 godd = 2. * rxb * Math.exp(a * Math.log(x) - albeta);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2104 tnc = b * x;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2105 xeven = (tnc < jstat.DBL_EPSILON) ? tnc : 1. - rxb;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2106 geven = tnc * rxb;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2107 tnc = p * xodd + q * xeven;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2108
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2109 /* repeat until convergence or iteration limit */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2110 for(it = 1; it <= ITRMAX; it++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2111 a += 1.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2112 xodd -= godd;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2113 xeven -= geven;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2114 godd *= x * (a + b - 1.) / a;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2115 geven *= x * (a + b - .5) / (a + .5);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2116 p *= lambda / (2 * it);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2117 q *= lambda / (2 * it + 1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2118 tnc += p * xodd + q * xeven;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2119 s -= p;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2120 /* R 2.4.0 added test for rounding error here. */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2121 if(s < -1.e-10) { /* happens e.g. for (t,df,ncp)=(40,10,38.5), after 799 it.*/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2122 //console.write("precision error _pnt");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2123 break;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2124 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2125 if(s <= 0 && it > 1) break;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2126
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2127 errbd = 2. * s * (xodd - godd);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2128
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2129 if(Math.abs(errbd) < ERRMAX) break;/*convergence*/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2130 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2131
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2132 if(it == ITRMAX) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2133 throw "Non-convergence _pnt";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2134 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2135 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2136 tnc = 0.;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2137 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2138 norm = new NormalDistribution(0,1);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2139 tnc += norm._cdf(-del, /*lower*/true, /*log_p*/ false);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2140
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2141 lower_tail = lower_tail != negdel; /* xor */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2142 if(tnc > 1 - 1e-10 && lower_tail) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2143 //console.warn("precision error _pnt");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2144 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2145 var res = jstat.fmin2(tnc, 1.);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2146 if(lower_tail) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2147 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2148 return Math.log(res);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2149 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2150 return res;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2151 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2152 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2153 if(log_p) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2154 return jstat.log1p(-(res));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2155 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2156 return (0.5 - (res) + 0.5);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2157 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2158 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2159 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2160 getDegreesOfFreedom: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2161 return this._dof;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2162 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2163 getNonCentralityParameter: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2164 return this._mu;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2165 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2166 getMean: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2167 if(this._dof > 1) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2168 var ans = (1/2)*Math.log(this._dof/2) + jstat.lgamma((this._dof-1)/2) - jstat.lgamma(this._dof/2)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2169 return Math.exp(ans) * this._mu;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2170 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2171 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2172 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2173 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2174 getVariance: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2175 if(this._dof > 2) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2176 var ans = this._dof * (1 + this._mu*this._mu)/(this._dof-2) - (((this._mu*this._mu * this._dof) / 2) * Math.pow(Math.exp(jstat.lgamma((this._dof - 1)/2)-jstat.lgamma(this._dof/2)), 2));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2177 return ans;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2178 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2179 return Number.NaN;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2180 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2181 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2182 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2183
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2184
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2185 /******************************************************************************/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2186 /* jQuery Flot graph objects */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2187 /******************************************************************************/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2188
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2189 var Plot = Class.extend({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2190 init: function(id, options) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2191 this._container = '#' + String(id);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2192 this._plots = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2193 this._flotObj = null;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2194 this._locked = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2195
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2196 if(options != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2197 this._options = options;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2198 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2199 this._options = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2200 };
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2201 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2202
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2203 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2204 getContainer: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2205 return this._container;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2206 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2207 getGraph: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2208 return this._flotObj;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2209 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2210 setData: function(data) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2211 this._plots = data;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2212 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2213 clear: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2214 this._plots = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2215 //this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2216 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2217 showLegend: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2218 this._options.legend = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2219 show: true
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2220 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2221 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2222 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2223 hideLegend: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2224 this._options.legend = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2225 show: false
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2226 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2227 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2228 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2229 render: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2230 this._flotObj = null;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2231 this._flotObj = $.plot($(this._container), this._plots, this._options);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2232 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2233 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2234
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2235 var DistributionPlot = Plot.extend({
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2236 init: function(id, distribution, range, options) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2237 this._super(id, options);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2238 this._showPDF = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2239 this._showCDF = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2240 this._pdfValues = []; // raw values for pdf
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2241 this._cdfValues = []; // raw values for cdf
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2242 this._maxY = 1;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2243 this._plotType = 'line'; // line, point, both
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2244 this._fill = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2245 this._distribution = distribution; // underlying PDF
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2246 // Range object for the plot
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2247 if(range != null && Range.validate(range)) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2248 this._range = range;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2249 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2250 this._range = this._distribution.getRange(); // no range supplied, use distribution default
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2251 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2252
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2253 // render
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2254 if(this._distribution != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2255 this._maxY = this._generateValues(); // create the pdf/cdf values in the ctor
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2256 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2257 this._options.xaxis = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2258 min: range.getMinimum(),
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2259 max: range.getMaximum()
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2260 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2261 this._options.yaxis = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2262 max: 1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2263 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2264 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2265
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2266
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2267
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2268 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2269 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2270 setHover: function(bool) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2271 if(bool) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2272 if(this._options.grid == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2273 this._options.grid = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2274 hoverable: true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2275 mouseActiveRadius: 25
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2276 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2277 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2278 this._options.grid.hoverable = true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2279 this._options.grid.mouseActiveRadius = 25
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2280 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2281 function showTooltip(x, y, contents, color) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2282 $('<div id="jstat_tooltip">' + contents + '</div>').css( {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2283 position: 'absolute',
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2284 display: 'none',
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2285 top: y + 15,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2286 'font-size': 'small',
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2287 left: x + 5,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2288 border: '1px solid ' + color[1],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2289 color: color[2],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2290 padding: '5px',
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2291 'background-color': color[0],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2292 opacity: 0.80
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2293 }).appendTo("body").show();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2294 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2295 var previousPoint = null;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2296 $(this._container).bind("plothover", function(event, pos, item) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2297 $("#x").text(pos.x.toFixed(2));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2298 $("#y").text(pos.y.toFixed(2));
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2299 if (item) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2300 if (previousPoint != item.datapoint) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2301 previousPoint = item.datapoint;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2302 $("#jstat_tooltip").remove();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2303 var x = jstat.toSigFig(item.datapoint[0],2), y = jstat.toSigFig(item.datapoint[1], 2);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2304 var text = null;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2305 var color = item.series.color;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2306 if(item.series.label == 'PDF') {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2307 text = "P(" + x + ") = " + y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2308 color = ["#fee", "#fdd", "#C05F5F"];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2309 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2310 // cdf
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2311 text = "F(" + x + ") = " + y;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2312 color = ["#eef", "#ddf", "#4A4AC0"];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2313 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2314 showTooltip(item.pageX, item.pageY, text, color);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2315 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2316 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2317 else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2318 $("#jstat_tooltip").remove();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2319 previousPoint = null;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2320 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2321 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2322 $(this._container).bind("mouseleave", function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2323 if($('#jstat_tooltip').is(':visible')) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2324 $('#jstat_tooltip').remove();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2325 previousPoint = null;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2326 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2327 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2328 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2329 // unbind
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2330 if(this._options.grid == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2331 this._options.grid = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2332 hoverable: false
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2333 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2334 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2335 this._options.grid.hoverable = false
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2336 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2337 $(this._container).unbind("plothover");
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2338 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2339
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2340 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2341 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2342 setType: function(type) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2343 this._plotType = type;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2344 var lines = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2345 var points = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2346 if(this._plotType == 'line') {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2347 lines.show = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2348 points.show = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2349 } else if(this._plotType == 'points') {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2350 lines.show = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2351 points.show = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2352 } else if(this._plotType == 'both') {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2353 lines.show = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2354 points.show = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2355 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2356 if(this._options.series == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2357 this._options.series = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2358 lines: lines,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2359 points: points
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2360 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2361 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2362 if(this._options.series.lines == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2363 this._options.series.lines = lines;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2364 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2365 this._options.series.lines.show = lines.show;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2366 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2367 if(this._options.series.points == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2368 this._options.series.points = points;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2369 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2370 this._options.series.points.show = points.show;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2371 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2372 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2373
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2374 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2375 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2376 setFill: function(bool) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2377 this._fill = bool;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2378 if(this._options.series == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2379 this._options.series = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2380 lines: {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2381 fill: bool
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2382 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2383 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2384 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2385 if(this._options.series.lines == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2386 this._options.series.lines = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2387 fill: bool
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2388 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2389 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2390 this._options.series.lines.fill = bool;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2391 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2392 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2393 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2394 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2395 clear: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2396 this._super();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2397 this._distribution = null;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2398 this._pdfValues = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2399 this._cdfValues = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2400 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2401 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2402 _generateValues: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2403 this._cdfValues = []; // reinitialize the arrays.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2404 this._pdfValues = [];
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2405
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2406 var xs = this._range.getPoints();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2407
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2408 this._options.xaxis = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2409 min: xs[0],
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2410 max: xs[xs.length-1]
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2411 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2412 var pdfs = this._distribution.density(this._range);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2413 var cdfs = this._distribution.cumulativeDensity(this._range);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2414 for(var i = 0; i < xs.length; i++) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2415 if(pdfs[i] == Number.POSITIVE_INFINITY || pdfs[i] == Number.NEGATIVE_INFINITY) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2416 pdfs[i] = null;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2417 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2418 if(cdfs[i] == Number.POSITIVE_INFINITY || cdfs[i] == Number.NEGATIVE_INFINITY) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2419 cdfs[i] = null;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2420 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2421 this._pdfValues.push([xs[i], pdfs[i]]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2422 this._cdfValues.push([xs[i], cdfs[i]]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2423 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2424 return jstat.max(pdfs);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2425 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2426 showPDF: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2427 this._showPDF = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2428 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2429 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2430 hidePDF: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2431 this._showPDF = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2432 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2433 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2434 showCDF: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2435 this._showCDF = true;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2436 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2437 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2438 hideCDF: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2439 this._showCDF = false;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2440 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2441 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2442 setDistribution: function(distribution, range) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2443 this._distribution = distribution;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2444 if(range != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2445 this._range = range;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2446 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2447 this._range = distribution.getRange();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2448 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2449 this._maxY = this._generateValues();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2450 this._options.yaxis = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2451 max: this._maxY*1.1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2452 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2453
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2454 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2455 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2456 getDistribution: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2457 return this._distribution;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2458 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2459 getRange: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2460 return this._range;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2461 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2462 setRange: function(range) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2463 this._range = range;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2464 this._generateValues();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2465 this.render();
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2466 },
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2467 render: function() {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2468 if(this._distribution != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2469 if(this._showPDF && this._showCDF) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2470 this.setData([{
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2471 yaxis: 1,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2472 data:this._pdfValues,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2473 color: 'rgb(237,194,64)',
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2474 clickable: false,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2475 hoverable: true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2476 label: "PDF"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2477 }, {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2478 yaxis: 2,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2479 data:this._cdfValues,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2480 clickable: false,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2481 color: 'rgb(175,216,248)',
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2482 hoverable: true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2483 label: "CDF"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2484 }]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2485 this._options.yaxis = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2486 max: this._maxY*1.1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2487 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2488 } else if(this._showPDF) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2489 this.setData([{
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2490 data:this._pdfValues,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2491 hoverable: true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2492 color: 'rgb(237,194,64)',
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2493 clickable: false,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2494 label: "PDF"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2495 }]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2496 this._options.yaxis = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2497 max: this._maxY*1.1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2498 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2499 } else if(this._showCDF) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2500 this.setData([{
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2501 data:this._cdfValues,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2502 hoverable: true,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2503 color: 'rgb(175,216,248)',
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2504 clickable: false,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2505 label: "CDF"
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2506 }]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2507 this._options.yaxis = {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2508 max: 1.1
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2509 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2510 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2511 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2512 this.setData([]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2513 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2514 this._super(); // Call the parent plot method
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2515 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2516 });
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2517
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2518 var DistributionFactory = {};
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2519 DistributionFactory.build = function(json) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2520 /*
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2521 if(json.name == null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2522 try{
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2523 json = JSON.parse(json);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2524 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2525 catch(err) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2526 throw "invalid JSON";
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2527 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2528
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2529 // try to parse it
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2530 }*/
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2531
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2532 /*
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2533 if(json.name != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2534 var name = json.name;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2535 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2536 throw "Malformed JSON provided to DistributionBuilder " + json;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2537 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2538 */
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2539 if(json.NormalDistribution) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2540 if(json.NormalDistribution.mean != null && json.NormalDistribution.standardDeviation != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2541 return new NormalDistribution(json.NormalDistribution.mean[0], json.NormalDistribution.standardDeviation[0]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2542 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2543 throw "Malformed JSON provided to DistributionBuilder " + json;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2544 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2545 } else if (json.LogNormalDistribution) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2546 if(json.LogNormalDistribution.location != null && json.LogNormalDistribution.scale != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2547 return new LogNormalDistribution(json.LogNormalDistribution.location[0], json.LogNormalDistribution.scale[0]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2548 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2549 throw "Malformed JSON provided to DistributionBuilder " + json;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2550 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2551 } else if (json.BetaDistribution) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2552 if(json.BetaDistribution.alpha != null && json.BetaDistribution.beta != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2553 return new BetaDistribution(json.BetaDistribution.alpha[0], json.BetaDistribution.beta[0]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2554 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2555 throw "Malformed JSON provided to DistributionBuilder " + json;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2556 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2557 } else if (json.GammaDistribution) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2558 if(json.GammaDistribution.shape != null && json.GammaDistribution.scale != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2559 return new GammaDistribution(json.GammaDistribution.shape[0], json.GammaDistribution.scale[0]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2560 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2561 throw "Malformed JSON provided to DistributionBuilder " + json;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2562 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2563 } else if (json.StudentTDistribution) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2564 if(json.StudentTDistribution.degreesOfFreedom != null && json.StudentTDistribution.nonCentralityParameter != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2565 return new StudentTDistribution(json.StudentTDistribution.degreesOfFreedom[0], json.StudentTDistribution.nonCentralityParameter[0]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2566 } else if(json.StudentTDistribution.degreesOfFreedom != null) {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2567 return new StudentTDistribution(json.StudentTDistribution.degreesOfFreedom[0]);
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2568 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2569 throw "Malformed JSON provided to DistributionBuilder " + json;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2570 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2571 } else {
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2572 throw "Malformed JSON provided to DistributionBuilder " + json;
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2573 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2574 }
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2575
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2576