@fecp/vue 1.1.3 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/es/_virtual/bessel.mjs +7 -0
  2. package/es/_virtual/bessel2.mjs +4 -0
  3. package/es/_virtual/index.mjs +1 -1
  4. package/es/_virtual/index2.mjs +1 -1
  5. package/es/_virtual/jstat.mjs +7 -0
  6. package/es/_virtual/jstat2.mjs +4 -0
  7. package/es/node_modules/.pnpm/@formulajs_formulajs@4.5.6/node_modules/@formulajs/formulajs/lib/esm/index.mjs +7150 -0
  8. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/index.esm.mjs +1 -1
  9. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/clipboard.mjs +1 -1
  10. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/commands.mjs +1 -1
  11. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/config.mjs +1 -1
  12. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/event.mjs +1 -1
  13. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/formats.mjs +1 -1
  14. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/i18n.mjs +1 -1
  15. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/icon.mjs +1 -1
  16. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/interceptor.mjs +1 -1
  17. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/menus.mjs +1 -1
  18. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/permission.mjs +1 -1
  19. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/renderer.mjs +1 -1
  20. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/resize.mjs +1 -1
  21. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/store.mjs +1 -1
  22. package/es/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/vm.mjs +1 -1
  23. package/es/node_modules/.pnpm/bessel@1.0.2/node_modules/bessel/bessel.mjs +226 -0
  24. package/es/node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/container/index.mjs +7 -7
  25. package/es/node_modules/.pnpm/jstat@1.9.6/node_modules/jstat/dist/jstat.mjs +3853 -0
  26. package/es/packages/mobile/src/components/form/field/Field.vue.mjs +1 -1
  27. package/es/packages/mobile/src/utils/formatterUtil.mjs +1 -1
  28. package/es/packages/mobile/src/utils/optionUtil.mjs +1 -1
  29. package/es/packages/vue/index.mjs +4 -0
  30. package/es/packages/vue/src/components/all.mjs +4 -0
  31. package/es/packages/vue/src/components/details/header/Header.vue.mjs +1 -1
  32. package/es/packages/vue/src/components/forms/checkbox/Checkbox.vue.mjs +8 -2
  33. package/es/packages/vue/src/components/forms/date/Date.vue.mjs +6 -6
  34. package/es/packages/vue/src/components/forms/divider/Divider.vue.mjs +15 -20
  35. package/es/packages/vue/src/components/forms/divider/index.mjs +2 -2
  36. package/es/packages/vue/src/components/forms/form/Form.vue.mjs +281 -96
  37. package/es/packages/vue/src/components/forms/form/index.mjs +2 -2
  38. package/es/packages/vue/src/components/forms/formItem/FormItem.vue.mjs +76 -48
  39. package/es/packages/vue/src/components/forms/h2/H2.vue.mjs +16 -7
  40. package/es/packages/vue/src/components/forms/multipleSelection/MultipleSelection.vue.mjs +1 -1
  41. package/es/packages/vue/src/components/forms/number/Number.vue.mjs +18 -12
  42. package/es/packages/vue/src/components/forms/radio/Radio.vue.mjs +5 -3
  43. package/es/packages/vue/src/components/forms/select/Select.vue.mjs +6 -4
  44. package/es/packages/vue/src/components/forms/subForm/SubForm.vue.mjs +90 -0
  45. package/es/packages/vue/src/components/forms/subForm/index.mjs +7 -0
  46. package/es/packages/vue/src/components/forms/subTable/SubTable.vue.mjs +109 -0
  47. package/es/packages/vue/src/components/forms/subTable/index.mjs +7 -0
  48. package/es/packages/vue/src/components/forms/switch/Switch.vue.mjs +1 -1
  49. package/es/packages/vue/src/components/forms/text/Text.vue.mjs +6 -3
  50. package/es/packages/vue/src/components/forms/textarea/Textarea.vue.mjs +7 -4
  51. package/es/packages/vue/src/components/table/CustomButtons.vue.mjs +17 -17
  52. package/es/packages/vue/src/components/table/Table.vue.mjs +143 -77
  53. package/es/packages/vue/src/components/table/TableColumn.vue.mjs +37 -5
  54. package/es/packages/vue/src/components/table/TableFilter.vue.mjs +60 -21
  55. package/es/packages/vue/src/components/table/index.mjs +2 -2
  56. package/es/packages/vue/src/composables/usePageEvents.mjs +4 -5
  57. package/es/packages/vue/src/utils/common.mjs +5 -0
  58. package/es/packages/vue/src/utils/datasource.mjs +9 -1
  59. package/es/packages/vue/src/utils/formulajs/calculate.mjs +57 -0
  60. package/es/packages/vue/src/utils/formulajs/functionCore.mjs +17 -0
  61. package/es/vue.css +170 -61
  62. package/lib/_virtual/bessel.js +7 -0
  63. package/lib/_virtual/bessel2.js +4 -0
  64. package/lib/_virtual/index.js +1 -1
  65. package/lib/_virtual/index2.js +1 -1
  66. package/lib/_virtual/jstat.js +7 -0
  67. package/lib/_virtual/jstat2.js +4 -0
  68. package/lib/node_modules/.pnpm/@formulajs_formulajs@4.5.6/node_modules/@formulajs/formulajs/lib/esm/index.js +7150 -0
  69. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/index.esm.js +1 -1
  70. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/clipboard.js +1 -1
  71. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/commands.js +1 -1
  72. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/config.js +1 -1
  73. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/event.js +1 -1
  74. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/formats.js +1 -1
  75. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/i18n.js +1 -1
  76. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/icon.js +1 -1
  77. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/interceptor.js +1 -1
  78. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/menus.js +1 -1
  79. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/permission.js +1 -1
  80. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/renderer.js +1 -1
  81. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/resize.js +1 -1
  82. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/store.js +1 -1
  83. package/lib/node_modules/.pnpm/@vxe-ui_core@4.3.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vxe-ui/core/es/src/vm.js +1 -1
  84. package/lib/node_modules/.pnpm/bessel@1.0.2/node_modules/bessel/bessel.js +226 -0
  85. package/lib/node_modules/.pnpm/jstat@1.9.6/node_modules/jstat/dist/jstat.js +3853 -0
  86. package/lib/packages/mobile/src/components/form/field/Field.vue.js +1 -1
  87. package/lib/packages/mobile/src/utils/formatterUtil.js +1 -1
  88. package/lib/packages/mobile/src/utils/optionUtil.js +1 -1
  89. package/lib/packages/vue/index.js +13 -9
  90. package/lib/packages/vue/src/components/all.js +10 -6
  91. package/lib/packages/vue/src/components/details/header/Header.vue.js +1 -1
  92. package/lib/packages/vue/src/components/forms/checkbox/Checkbox.vue.js +8 -2
  93. package/lib/packages/vue/src/components/forms/date/Date.vue.js +6 -6
  94. package/lib/packages/vue/src/components/forms/divider/Divider.vue.js +14 -19
  95. package/lib/packages/vue/src/components/forms/form/Form.vue.js +280 -95
  96. package/lib/packages/vue/src/components/forms/formItem/FormItem.vue.js +63 -35
  97. package/lib/packages/vue/src/components/forms/h2/H2.vue.js +15 -6
  98. package/lib/packages/vue/src/components/forms/multipleSelection/MultipleSelection.vue.js +1 -1
  99. package/lib/packages/vue/src/components/forms/number/Number.vue.js +18 -12
  100. package/lib/packages/vue/src/components/forms/radio/Radio.vue.js +5 -3
  101. package/lib/packages/vue/src/components/forms/select/Select.vue.js +6 -4
  102. package/lib/packages/vue/src/components/forms/subForm/SubForm.vue.js +90 -0
  103. package/lib/packages/vue/src/components/forms/subForm/index.js +7 -0
  104. package/lib/packages/vue/src/components/forms/subTable/SubTable.vue.js +109 -0
  105. package/lib/packages/vue/src/components/forms/subTable/index.js +7 -0
  106. package/lib/packages/vue/src/components/forms/switch/Switch.vue.js +1 -1
  107. package/lib/packages/vue/src/components/forms/text/Text.vue.js +6 -3
  108. package/lib/packages/vue/src/components/forms/textarea/Textarea.vue.js +7 -4
  109. package/lib/packages/vue/src/components/table/CustomButtons.vue.js +16 -16
  110. package/lib/packages/vue/src/components/table/Table.vue.js +145 -79
  111. package/lib/packages/vue/src/components/table/TableColumn.vue.js +37 -5
  112. package/lib/packages/vue/src/components/table/TableFilter.vue.js +82 -43
  113. package/lib/packages/vue/src/composables/usePageEvents.js +4 -5
  114. package/lib/packages/vue/src/utils/common.js +5 -0
  115. package/lib/packages/vue/src/utils/datasource.js +9 -1
  116. package/lib/packages/vue/src/utils/formulajs/calculate.js +57 -0
  117. package/lib/packages/vue/src/utils/formulajs/functionCore.js +17 -0
  118. package/lib/vue.css +170 -61
  119. package/package.json +1 -1
@@ -0,0 +1,3853 @@
1
+ import { __module as jstat$1 } from "../../../../../../_virtual/jstat2.mjs";
2
+ var jstat = jstat$1.exports;
3
+ var hasRequiredJstat;
4
+ function requireJstat() {
5
+ if (hasRequiredJstat) return jstat$1.exports;
6
+ hasRequiredJstat = 1;
7
+ (function(module, exports) {
8
+ (function(window, factory) {
9
+ {
10
+ module.exports = factory();
11
+ }
12
+ })(jstat, function() {
13
+ var jStat = function(Math2, undefined$1) {
14
+ var concat = Array.prototype.concat;
15
+ var slice = Array.prototype.slice;
16
+ var toString = Object.prototype.toString;
17
+ function calcRdx(n, m) {
18
+ var val = n > m ? n : m;
19
+ return Math2.pow(
20
+ 10,
21
+ 17 - ~~(Math2.log(val > 0 ? val : -val) * Math2.LOG10E)
22
+ );
23
+ }
24
+ var isArray = Array.isArray || function isArray2(arg) {
25
+ return toString.call(arg) === "[object Array]";
26
+ };
27
+ function isFunction(arg) {
28
+ return toString.call(arg) === "[object Function]";
29
+ }
30
+ function isNumber(num) {
31
+ return typeof num === "number" ? num - num === 0 : false;
32
+ }
33
+ function toVector(arr) {
34
+ return concat.apply([], arr);
35
+ }
36
+ function jStat2() {
37
+ return new jStat2._init(arguments);
38
+ }
39
+ jStat2.fn = jStat2.prototype;
40
+ jStat2._init = function _init(args) {
41
+ if (isArray(args[0])) {
42
+ if (isArray(args[0][0])) {
43
+ if (isFunction(args[1]))
44
+ args[0] = jStat2.map(args[0], args[1]);
45
+ for (var i = 0; i < args[0].length; i++)
46
+ this[i] = args[0][i];
47
+ this.length = args[0].length;
48
+ } else {
49
+ this[0] = isFunction(args[1]) ? jStat2.map(args[0], args[1]) : args[0];
50
+ this.length = 1;
51
+ }
52
+ } else if (isNumber(args[0])) {
53
+ this[0] = jStat2.seq.apply(null, args);
54
+ this.length = 1;
55
+ } else if (args[0] instanceof jStat2) {
56
+ return jStat2(args[0].toArray());
57
+ } else {
58
+ this[0] = [];
59
+ this.length = 1;
60
+ }
61
+ return this;
62
+ };
63
+ jStat2._init.prototype = jStat2.prototype;
64
+ jStat2._init.constructor = jStat2;
65
+ jStat2.utils = {
66
+ calcRdx,
67
+ isArray,
68
+ isFunction,
69
+ isNumber,
70
+ toVector
71
+ };
72
+ jStat2._random_fn = Math2.random;
73
+ jStat2.setRandom = function setRandom(fn) {
74
+ if (typeof fn !== "function")
75
+ throw new TypeError("fn is not a function");
76
+ jStat2._random_fn = fn;
77
+ };
78
+ jStat2.extend = function extend(obj) {
79
+ var i, j;
80
+ if (arguments.length === 1) {
81
+ for (j in obj)
82
+ jStat2[j] = obj[j];
83
+ return this;
84
+ }
85
+ for (i = 1; i < arguments.length; i++) {
86
+ for (j in arguments[i])
87
+ obj[j] = arguments[i][j];
88
+ }
89
+ return obj;
90
+ };
91
+ jStat2.rows = function rows(arr) {
92
+ return arr.length || 1;
93
+ };
94
+ jStat2.cols = function cols(arr) {
95
+ return arr[0].length || 1;
96
+ };
97
+ jStat2.dimensions = function dimensions(arr) {
98
+ return {
99
+ rows: jStat2.rows(arr),
100
+ cols: jStat2.cols(arr)
101
+ };
102
+ };
103
+ jStat2.row = function row(arr, index) {
104
+ if (isArray(index)) {
105
+ return index.map(function(i) {
106
+ return jStat2.row(arr, i);
107
+ });
108
+ }
109
+ return arr[index];
110
+ };
111
+ jStat2.rowa = function rowa(arr, i) {
112
+ return jStat2.row(arr, i);
113
+ };
114
+ jStat2.col = function col(arr, index) {
115
+ if (isArray(index)) {
116
+ var submat = jStat2.arange(arr.length).map(function() {
117
+ return new Array(index.length);
118
+ });
119
+ index.forEach(function(ind, i2) {
120
+ jStat2.arange(arr.length).forEach(function(j) {
121
+ submat[j][i2] = arr[j][ind];
122
+ });
123
+ });
124
+ return submat;
125
+ }
126
+ var column = new Array(arr.length);
127
+ for (var i = 0; i < arr.length; i++)
128
+ column[i] = [arr[i][index]];
129
+ return column;
130
+ };
131
+ jStat2.cola = function cola(arr, i) {
132
+ return jStat2.col(arr, i).map(function(a) {
133
+ return a[0];
134
+ });
135
+ };
136
+ jStat2.diag = function diag(arr) {
137
+ var nrow = jStat2.rows(arr);
138
+ var res = new Array(nrow);
139
+ for (var row = 0; row < nrow; row++)
140
+ res[row] = [arr[row][row]];
141
+ return res;
142
+ };
143
+ jStat2.antidiag = function antidiag(arr) {
144
+ var nrow = jStat2.rows(arr) - 1;
145
+ var res = new Array(nrow);
146
+ for (var i = 0; nrow >= 0; nrow--, i++)
147
+ res[i] = [arr[i][nrow]];
148
+ return res;
149
+ };
150
+ jStat2.transpose = function transpose(arr) {
151
+ var obj = [];
152
+ var objArr, rows, cols, j, i;
153
+ if (!isArray(arr[0]))
154
+ arr = [arr];
155
+ rows = arr.length;
156
+ cols = arr[0].length;
157
+ for (i = 0; i < cols; i++) {
158
+ objArr = new Array(rows);
159
+ for (j = 0; j < rows; j++)
160
+ objArr[j] = arr[j][i];
161
+ obj.push(objArr);
162
+ }
163
+ return obj.length === 1 ? obj[0] : obj;
164
+ };
165
+ jStat2.map = function map(arr, func, toAlter) {
166
+ var row, nrow, ncol, res, col;
167
+ if (!isArray(arr[0]))
168
+ arr = [arr];
169
+ nrow = arr.length;
170
+ ncol = arr[0].length;
171
+ res = toAlter ? arr : new Array(nrow);
172
+ for (row = 0; row < nrow; row++) {
173
+ if (!res[row])
174
+ res[row] = new Array(ncol);
175
+ for (col = 0; col < ncol; col++)
176
+ res[row][col] = func(arr[row][col], row, col);
177
+ }
178
+ return res.length === 1 ? res[0] : res;
179
+ };
180
+ jStat2.cumreduce = function cumreduce(arr, func, toAlter) {
181
+ var row, nrow, ncol, res, col;
182
+ if (!isArray(arr[0]))
183
+ arr = [arr];
184
+ nrow = arr.length;
185
+ ncol = arr[0].length;
186
+ res = toAlter ? arr : new Array(nrow);
187
+ for (row = 0; row < nrow; row++) {
188
+ if (!res[row])
189
+ res[row] = new Array(ncol);
190
+ if (ncol > 0)
191
+ res[row][0] = arr[row][0];
192
+ for (col = 1; col < ncol; col++)
193
+ res[row][col] = func(res[row][col - 1], arr[row][col]);
194
+ }
195
+ return res.length === 1 ? res[0] : res;
196
+ };
197
+ jStat2.alter = function alter(arr, func) {
198
+ return jStat2.map(arr, func, true);
199
+ };
200
+ jStat2.create = function create(rows, cols, func) {
201
+ var res = new Array(rows);
202
+ var i, j;
203
+ if (isFunction(cols)) {
204
+ func = cols;
205
+ cols = rows;
206
+ }
207
+ for (i = 0; i < rows; i++) {
208
+ res[i] = new Array(cols);
209
+ for (j = 0; j < cols; j++)
210
+ res[i][j] = func(i, j);
211
+ }
212
+ return res;
213
+ };
214
+ function retZero() {
215
+ return 0;
216
+ }
217
+ jStat2.zeros = function zeros(rows, cols) {
218
+ if (!isNumber(cols))
219
+ cols = rows;
220
+ return jStat2.create(rows, cols, retZero);
221
+ };
222
+ function retOne() {
223
+ return 1;
224
+ }
225
+ jStat2.ones = function ones(rows, cols) {
226
+ if (!isNumber(cols))
227
+ cols = rows;
228
+ return jStat2.create(rows, cols, retOne);
229
+ };
230
+ jStat2.rand = function rand(rows, cols) {
231
+ if (!isNumber(cols))
232
+ cols = rows;
233
+ return jStat2.create(rows, cols, jStat2._random_fn);
234
+ };
235
+ function retIdent(i, j) {
236
+ return i === j ? 1 : 0;
237
+ }
238
+ jStat2.identity = function identity(rows, cols) {
239
+ if (!isNumber(cols))
240
+ cols = rows;
241
+ return jStat2.create(rows, cols, retIdent);
242
+ };
243
+ jStat2.symmetric = function symmetric(arr) {
244
+ var size = arr.length;
245
+ var row, col;
246
+ if (arr.length !== arr[0].length)
247
+ return false;
248
+ for (row = 0; row < size; row++) {
249
+ for (col = 0; col < size; col++)
250
+ if (arr[col][row] !== arr[row][col])
251
+ return false;
252
+ }
253
+ return true;
254
+ };
255
+ jStat2.clear = function clear(arr) {
256
+ return jStat2.alter(arr, retZero);
257
+ };
258
+ jStat2.seq = function seq(min, max, length, func) {
259
+ if (!isFunction(func))
260
+ func = false;
261
+ var arr = [];
262
+ var hival = calcRdx(min, max);
263
+ var step = (max * hival - min * hival) / ((length - 1) * hival);
264
+ var current = min;
265
+ var cnt;
266
+ for (cnt = 0; current <= max && cnt < length; cnt++, current = (min * hival + step * hival * cnt) / hival) {
267
+ arr.push(func ? func(current, cnt) : current);
268
+ }
269
+ return arr;
270
+ };
271
+ jStat2.arange = function arange(start, end, step) {
272
+ var rl = [];
273
+ var i;
274
+ step = step || 1;
275
+ if (end === undefined$1) {
276
+ end = start;
277
+ start = 0;
278
+ }
279
+ if (start === end || step === 0) {
280
+ return [];
281
+ }
282
+ if (start < end && step < 0) {
283
+ return [];
284
+ }
285
+ if (start > end && step > 0) {
286
+ return [];
287
+ }
288
+ if (step > 0) {
289
+ for (i = start; i < end; i += step) {
290
+ rl.push(i);
291
+ }
292
+ } else {
293
+ for (i = start; i > end; i += step) {
294
+ rl.push(i);
295
+ }
296
+ }
297
+ return rl;
298
+ };
299
+ jStat2.slice = /* @__PURE__ */ function() {
300
+ function _slice(list, start, end, step) {
301
+ var i;
302
+ var rl = [];
303
+ var length = list.length;
304
+ if (start === undefined$1 && end === undefined$1 && step === undefined$1) {
305
+ return jStat2.copy(list);
306
+ }
307
+ start = start || 0;
308
+ end = end || list.length;
309
+ start = start >= 0 ? start : length + start;
310
+ end = end >= 0 ? end : length + end;
311
+ step = step || 1;
312
+ if (start === end || step === 0) {
313
+ return [];
314
+ }
315
+ if (start < end && step < 0) {
316
+ return [];
317
+ }
318
+ if (start > end && step > 0) {
319
+ return [];
320
+ }
321
+ if (step > 0) {
322
+ for (i = start; i < end; i += step) {
323
+ rl.push(list[i]);
324
+ }
325
+ } else {
326
+ for (i = start; i > end; i += step) {
327
+ rl.push(list[i]);
328
+ }
329
+ }
330
+ return rl;
331
+ }
332
+ function slice2(list, rcSlice) {
333
+ var colSlice, rowSlice;
334
+ rcSlice = rcSlice || {};
335
+ if (isNumber(rcSlice.row)) {
336
+ if (isNumber(rcSlice.col))
337
+ return list[rcSlice.row][rcSlice.col];
338
+ var row = jStat2.rowa(list, rcSlice.row);
339
+ colSlice = rcSlice.col || {};
340
+ return _slice(row, colSlice.start, colSlice.end, colSlice.step);
341
+ }
342
+ if (isNumber(rcSlice.col)) {
343
+ var col = jStat2.cola(list, rcSlice.col);
344
+ rowSlice = rcSlice.row || {};
345
+ return _slice(col, rowSlice.start, rowSlice.end, rowSlice.step);
346
+ }
347
+ rowSlice = rcSlice.row || {};
348
+ colSlice = rcSlice.col || {};
349
+ var rows = _slice(list, rowSlice.start, rowSlice.end, rowSlice.step);
350
+ return rows.map(function(row2) {
351
+ return _slice(row2, colSlice.start, colSlice.end, colSlice.step);
352
+ });
353
+ }
354
+ return slice2;
355
+ }();
356
+ jStat2.sliceAssign = function sliceAssign(A, rcSlice, B) {
357
+ var nl, ml;
358
+ if (isNumber(rcSlice.row)) {
359
+ if (isNumber(rcSlice.col))
360
+ return A[rcSlice.row][rcSlice.col] = B;
361
+ rcSlice.col = rcSlice.col || {};
362
+ rcSlice.col.start = rcSlice.col.start || 0;
363
+ rcSlice.col.end = rcSlice.col.end || A[0].length;
364
+ rcSlice.col.step = rcSlice.col.step || 1;
365
+ nl = jStat2.arange(
366
+ rcSlice.col.start,
367
+ Math2.min(A.length, rcSlice.col.end),
368
+ rcSlice.col.step
369
+ );
370
+ var m = rcSlice.row;
371
+ nl.forEach(function(n2, i) {
372
+ A[m][n2] = B[i];
373
+ });
374
+ return A;
375
+ }
376
+ if (isNumber(rcSlice.col)) {
377
+ rcSlice.row = rcSlice.row || {};
378
+ rcSlice.row.start = rcSlice.row.start || 0;
379
+ rcSlice.row.end = rcSlice.row.end || A.length;
380
+ rcSlice.row.step = rcSlice.row.step || 1;
381
+ ml = jStat2.arange(
382
+ rcSlice.row.start,
383
+ Math2.min(A[0].length, rcSlice.row.end),
384
+ rcSlice.row.step
385
+ );
386
+ var n = rcSlice.col;
387
+ ml.forEach(function(m2, j) {
388
+ A[m2][n] = B[j];
389
+ });
390
+ return A;
391
+ }
392
+ if (B[0].length === undefined$1) {
393
+ B = [B];
394
+ }
395
+ rcSlice.row.start = rcSlice.row.start || 0;
396
+ rcSlice.row.end = rcSlice.row.end || A.length;
397
+ rcSlice.row.step = rcSlice.row.step || 1;
398
+ rcSlice.col.start = rcSlice.col.start || 0;
399
+ rcSlice.col.end = rcSlice.col.end || A[0].length;
400
+ rcSlice.col.step = rcSlice.col.step || 1;
401
+ ml = jStat2.arange(
402
+ rcSlice.row.start,
403
+ Math2.min(A.length, rcSlice.row.end),
404
+ rcSlice.row.step
405
+ );
406
+ nl = jStat2.arange(
407
+ rcSlice.col.start,
408
+ Math2.min(A[0].length, rcSlice.col.end),
409
+ rcSlice.col.step
410
+ );
411
+ ml.forEach(function(m2, i) {
412
+ nl.forEach(function(n2, j) {
413
+ A[m2][n2] = B[i][j];
414
+ });
415
+ });
416
+ return A;
417
+ };
418
+ jStat2.diagonal = function diagonal(diagArray) {
419
+ var mat = jStat2.zeros(diagArray.length, diagArray.length);
420
+ diagArray.forEach(function(t, i) {
421
+ mat[i][i] = t;
422
+ });
423
+ return mat;
424
+ };
425
+ jStat2.copy = function copy(A) {
426
+ return A.map(function(row) {
427
+ if (isNumber(row))
428
+ return row;
429
+ return row.map(function(t) {
430
+ return t;
431
+ });
432
+ });
433
+ };
434
+ var jProto = jStat2.prototype;
435
+ jProto.length = 0;
436
+ jProto.push = Array.prototype.push;
437
+ jProto.sort = Array.prototype.sort;
438
+ jProto.splice = Array.prototype.splice;
439
+ jProto.slice = Array.prototype.slice;
440
+ jProto.toArray = function toArray() {
441
+ return this.length > 1 ? slice.call(this) : slice.call(this)[0];
442
+ };
443
+ jProto.map = function map(func, toAlter) {
444
+ return jStat2(jStat2.map(this, func, toAlter));
445
+ };
446
+ jProto.cumreduce = function cumreduce(func, toAlter) {
447
+ return jStat2(jStat2.cumreduce(this, func, toAlter));
448
+ };
449
+ jProto.alter = function alter(func) {
450
+ jStat2.alter(this, func);
451
+ return this;
452
+ };
453
+ (function(funcs) {
454
+ for (var i = 0; i < funcs.length; i++) (function(passfunc) {
455
+ jProto[passfunc] = function(func) {
456
+ var self = this, results;
457
+ if (func) {
458
+ setTimeout(function() {
459
+ func.call(self, jProto[passfunc].call(self));
460
+ });
461
+ return this;
462
+ }
463
+ results = jStat2[passfunc](this);
464
+ return isArray(results) ? jStat2(results) : results;
465
+ };
466
+ })(funcs[i]);
467
+ })("transpose clear symmetric rows cols dimensions diag antidiag".split(" "));
468
+ (function(funcs) {
469
+ for (var i = 0; i < funcs.length; i++) (function(passfunc) {
470
+ jProto[passfunc] = function(index, func) {
471
+ var self = this;
472
+ if (func) {
473
+ setTimeout(function() {
474
+ func.call(self, jProto[passfunc].call(self, index));
475
+ });
476
+ return this;
477
+ }
478
+ return jStat2(jStat2[passfunc](this, index));
479
+ };
480
+ })(funcs[i]);
481
+ })("row col".split(" "));
482
+ (function(funcs) {
483
+ for (var i = 0; i < funcs.length; i++) (function(passfunc) {
484
+ jProto[passfunc] = function() {
485
+ return jStat2(jStat2[passfunc].apply(null, arguments));
486
+ };
487
+ })(funcs[i]);
488
+ })("create zeros ones rand identity".split(" "));
489
+ return jStat2;
490
+ }(Math);
491
+ (function(jStat2, Math2) {
492
+ var isFunction = jStat2.utils.isFunction;
493
+ function ascNum(a, b) {
494
+ return a - b;
495
+ }
496
+ function clip(arg, min, max) {
497
+ return Math2.max(min, Math2.min(arg, max));
498
+ }
499
+ jStat2.sum = function sum(arr) {
500
+ var sum2 = 0;
501
+ var i = arr.length;
502
+ while (--i >= 0)
503
+ sum2 += arr[i];
504
+ return sum2;
505
+ };
506
+ jStat2.sumsqrd = function sumsqrd(arr) {
507
+ var sum = 0;
508
+ var i = arr.length;
509
+ while (--i >= 0)
510
+ sum += arr[i] * arr[i];
511
+ return sum;
512
+ };
513
+ jStat2.sumsqerr = function sumsqerr(arr) {
514
+ var mean = jStat2.mean(arr);
515
+ var sum = 0;
516
+ var i = arr.length;
517
+ var tmp;
518
+ while (--i >= 0) {
519
+ tmp = arr[i] - mean;
520
+ sum += tmp * tmp;
521
+ }
522
+ return sum;
523
+ };
524
+ jStat2.sumrow = function sumrow(arr) {
525
+ var sum = 0;
526
+ var i = arr.length;
527
+ while (--i >= 0)
528
+ sum += arr[i];
529
+ return sum;
530
+ };
531
+ jStat2.product = function product(arr) {
532
+ var prod = 1;
533
+ var i = arr.length;
534
+ while (--i >= 0)
535
+ prod *= arr[i];
536
+ return prod;
537
+ };
538
+ jStat2.min = function min(arr) {
539
+ var low = arr[0];
540
+ var i = 0;
541
+ while (++i < arr.length)
542
+ if (arr[i] < low)
543
+ low = arr[i];
544
+ return low;
545
+ };
546
+ jStat2.max = function max(arr) {
547
+ var high = arr[0];
548
+ var i = 0;
549
+ while (++i < arr.length)
550
+ if (arr[i] > high)
551
+ high = arr[i];
552
+ return high;
553
+ };
554
+ jStat2.unique = function unique(arr) {
555
+ var hash = {}, _arr = [];
556
+ for (var i = 0; i < arr.length; i++) {
557
+ if (!hash[arr[i]]) {
558
+ hash[arr[i]] = true;
559
+ _arr.push(arr[i]);
560
+ }
561
+ }
562
+ return _arr;
563
+ };
564
+ jStat2.mean = function mean(arr) {
565
+ return jStat2.sum(arr) / arr.length;
566
+ };
567
+ jStat2.meansqerr = function meansqerr(arr) {
568
+ return jStat2.sumsqerr(arr) / arr.length;
569
+ };
570
+ jStat2.geomean = function geomean(arr) {
571
+ var logs = arr.map(Math2.log);
572
+ var meanOfLogs = jStat2.mean(logs);
573
+ return Math2.exp(meanOfLogs);
574
+ };
575
+ jStat2.median = function median(arr) {
576
+ var arrlen = arr.length;
577
+ var _arr = arr.slice().sort(ascNum);
578
+ return !(arrlen & 1) ? (_arr[arrlen / 2 - 1] + _arr[arrlen / 2]) / 2 : _arr[arrlen / 2 | 0];
579
+ };
580
+ jStat2.cumsum = function cumsum(arr) {
581
+ return jStat2.cumreduce(arr, function(a, b) {
582
+ return a + b;
583
+ });
584
+ };
585
+ jStat2.cumprod = function cumprod(arr) {
586
+ return jStat2.cumreduce(arr, function(a, b) {
587
+ return a * b;
588
+ });
589
+ };
590
+ jStat2.diff = function diff(arr) {
591
+ var diffs = [];
592
+ var arrLen = arr.length;
593
+ var i;
594
+ for (i = 1; i < arrLen; i++)
595
+ diffs.push(arr[i] - arr[i - 1]);
596
+ return diffs;
597
+ };
598
+ jStat2.rank = function(arr) {
599
+ var i;
600
+ var distinctNumbers = [];
601
+ var numberCounts = {};
602
+ for (i = 0; i < arr.length; i++) {
603
+ var number = arr[i];
604
+ if (numberCounts[number]) {
605
+ numberCounts[number]++;
606
+ } else {
607
+ numberCounts[number] = 1;
608
+ distinctNumbers.push(number);
609
+ }
610
+ }
611
+ var sortedDistinctNumbers = distinctNumbers.sort(ascNum);
612
+ var numberRanks = {};
613
+ var currentRank = 1;
614
+ for (i = 0; i < sortedDistinctNumbers.length; i++) {
615
+ var number = sortedDistinctNumbers[i];
616
+ var count = numberCounts[number];
617
+ var first = currentRank;
618
+ var last = currentRank + count - 1;
619
+ var rank = (first + last) / 2;
620
+ numberRanks[number] = rank;
621
+ currentRank += count;
622
+ }
623
+ return arr.map(function(number2) {
624
+ return numberRanks[number2];
625
+ });
626
+ };
627
+ jStat2.mode = function mode(arr) {
628
+ var arrLen = arr.length;
629
+ var _arr = arr.slice().sort(ascNum);
630
+ var count = 1;
631
+ var maxCount = 0;
632
+ var numMaxCount = 0;
633
+ var mode_arr = [];
634
+ var i;
635
+ for (i = 0; i < arrLen; i++) {
636
+ if (_arr[i] === _arr[i + 1]) {
637
+ count++;
638
+ } else {
639
+ if (count > maxCount) {
640
+ mode_arr = [_arr[i]];
641
+ maxCount = count;
642
+ numMaxCount = 0;
643
+ } else if (count === maxCount) {
644
+ mode_arr.push(_arr[i]);
645
+ numMaxCount++;
646
+ }
647
+ count = 1;
648
+ }
649
+ }
650
+ return numMaxCount === 0 ? mode_arr[0] : mode_arr;
651
+ };
652
+ jStat2.range = function range(arr) {
653
+ return jStat2.max(arr) - jStat2.min(arr);
654
+ };
655
+ jStat2.variance = function variance(arr, flag) {
656
+ return jStat2.sumsqerr(arr) / (arr.length - (flag ? 1 : 0));
657
+ };
658
+ jStat2.pooledvariance = function pooledvariance(arr) {
659
+ var sumsqerr = arr.reduce(function(a, samples) {
660
+ return a + jStat2.sumsqerr(samples);
661
+ }, 0);
662
+ var count = arr.reduce(function(a, samples) {
663
+ return a + samples.length;
664
+ }, 0);
665
+ return sumsqerr / (count - arr.length);
666
+ };
667
+ jStat2.deviation = function(arr) {
668
+ var mean = jStat2.mean(arr);
669
+ var arrlen = arr.length;
670
+ var dev = new Array(arrlen);
671
+ for (var i = 0; i < arrlen; i++) {
672
+ dev[i] = arr[i] - mean;
673
+ }
674
+ return dev;
675
+ };
676
+ jStat2.stdev = function stdev(arr, flag) {
677
+ return Math2.sqrt(jStat2.variance(arr, flag));
678
+ };
679
+ jStat2.pooledstdev = function pooledstdev(arr) {
680
+ return Math2.sqrt(jStat2.pooledvariance(arr));
681
+ };
682
+ jStat2.meandev = function meandev(arr) {
683
+ var mean = jStat2.mean(arr);
684
+ var a = [];
685
+ for (var i = arr.length - 1; i >= 0; i--) {
686
+ a.push(Math2.abs(arr[i] - mean));
687
+ }
688
+ return jStat2.mean(a);
689
+ };
690
+ jStat2.meddev = function meddev(arr) {
691
+ var median = jStat2.median(arr);
692
+ var a = [];
693
+ for (var i = arr.length - 1; i >= 0; i--) {
694
+ a.push(Math2.abs(arr[i] - median));
695
+ }
696
+ return jStat2.median(a);
697
+ };
698
+ jStat2.coeffvar = function coeffvar(arr) {
699
+ return jStat2.stdev(arr) / jStat2.mean(arr);
700
+ };
701
+ jStat2.quartiles = function quartiles(arr) {
702
+ var arrlen = arr.length;
703
+ var _arr = arr.slice().sort(ascNum);
704
+ return [
705
+ _arr[Math2.round(arrlen / 4) - 1],
706
+ _arr[Math2.round(arrlen / 2) - 1],
707
+ _arr[Math2.round(arrlen * 3 / 4) - 1]
708
+ ];
709
+ };
710
+ jStat2.quantiles = function quantiles(arr, quantilesArray, alphap, betap) {
711
+ var sortedArray = arr.slice().sort(ascNum);
712
+ var quantileVals = [quantilesArray.length];
713
+ var n = arr.length;
714
+ var i, p, m, aleph, k, gamma;
715
+ if (typeof alphap === "undefined")
716
+ alphap = 3 / 8;
717
+ if (typeof betap === "undefined")
718
+ betap = 3 / 8;
719
+ for (i = 0; i < quantilesArray.length; i++) {
720
+ p = quantilesArray[i];
721
+ m = alphap + p * (1 - alphap - betap);
722
+ aleph = n * p + m;
723
+ k = Math2.floor(clip(aleph, 1, n - 1));
724
+ gamma = clip(aleph - k, 0, 1);
725
+ quantileVals[i] = (1 - gamma) * sortedArray[k - 1] + gamma * sortedArray[k];
726
+ }
727
+ return quantileVals;
728
+ };
729
+ jStat2.percentile = function percentile(arr, k, exclusive) {
730
+ var _arr = arr.slice().sort(ascNum);
731
+ var realIndex = k * (_arr.length + (exclusive ? 1 : -1)) + (exclusive ? 0 : 1);
732
+ var index = parseInt(realIndex);
733
+ var frac = realIndex - index;
734
+ if (index + 1 < _arr.length) {
735
+ return _arr[index - 1] + frac * (_arr[index] - _arr[index - 1]);
736
+ } else {
737
+ return _arr[index - 1];
738
+ }
739
+ };
740
+ jStat2.percentileOfScore = function percentileOfScore(arr, score, kind) {
741
+ var counter = 0;
742
+ var len = arr.length;
743
+ var strict = false;
744
+ var value, i;
745
+ if (kind === "strict")
746
+ strict = true;
747
+ for (i = 0; i < len; i++) {
748
+ value = arr[i];
749
+ if (strict && value < score || !strict && value <= score) {
750
+ counter++;
751
+ }
752
+ }
753
+ return counter / len;
754
+ };
755
+ jStat2.histogram = function histogram(arr, binCnt) {
756
+ binCnt = binCnt || 4;
757
+ var first = jStat2.min(arr);
758
+ var binWidth = (jStat2.max(arr) - first) / binCnt;
759
+ var len = arr.length;
760
+ var bins = [];
761
+ var i;
762
+ for (i = 0; i < binCnt; i++)
763
+ bins[i] = 0;
764
+ for (i = 0; i < len; i++)
765
+ bins[Math2.min(Math2.floor((arr[i] - first) / binWidth), binCnt - 1)] += 1;
766
+ return bins;
767
+ };
768
+ jStat2.covariance = function covariance(arr1, arr2) {
769
+ var u = jStat2.mean(arr1);
770
+ var v = jStat2.mean(arr2);
771
+ var arr1Len = arr1.length;
772
+ var sq_dev = new Array(arr1Len);
773
+ var i;
774
+ for (i = 0; i < arr1Len; i++)
775
+ sq_dev[i] = (arr1[i] - u) * (arr2[i] - v);
776
+ return jStat2.sum(sq_dev) / (arr1Len - 1);
777
+ };
778
+ jStat2.corrcoeff = function corrcoeff(arr1, arr2) {
779
+ return jStat2.covariance(arr1, arr2) / jStat2.stdev(arr1, 1) / jStat2.stdev(arr2, 1);
780
+ };
781
+ jStat2.spearmancoeff = function(arr1, arr2) {
782
+ arr1 = jStat2.rank(arr1);
783
+ arr2 = jStat2.rank(arr2);
784
+ return jStat2.corrcoeff(arr1, arr2);
785
+ };
786
+ jStat2.stanMoment = function stanMoment(arr, n) {
787
+ var mu = jStat2.mean(arr);
788
+ var sigma = jStat2.stdev(arr);
789
+ var len = arr.length;
790
+ var skewSum = 0;
791
+ for (var i = 0; i < len; i++)
792
+ skewSum += Math2.pow((arr[i] - mu) / sigma, n);
793
+ return skewSum / arr.length;
794
+ };
795
+ jStat2.skewness = function skewness(arr) {
796
+ return jStat2.stanMoment(arr, 3);
797
+ };
798
+ jStat2.kurtosis = function kurtosis(arr) {
799
+ return jStat2.stanMoment(arr, 4) - 3;
800
+ };
801
+ var jProto = jStat2.prototype;
802
+ (function(funcs) {
803
+ for (var i = 0; i < funcs.length; i++) (function(passfunc) {
804
+ jProto[passfunc] = function(fullbool, func) {
805
+ var arr = [];
806
+ var i2 = 0;
807
+ var tmpthis = this;
808
+ if (isFunction(fullbool)) {
809
+ func = fullbool;
810
+ fullbool = false;
811
+ }
812
+ if (func) {
813
+ setTimeout(function() {
814
+ func.call(tmpthis, jProto[passfunc].call(tmpthis, fullbool));
815
+ });
816
+ return this;
817
+ }
818
+ if (this.length > 1) {
819
+ tmpthis = fullbool === true ? this : this.transpose();
820
+ for (; i2 < tmpthis.length; i2++)
821
+ arr[i2] = jStat2[passfunc](tmpthis[i2]);
822
+ return arr;
823
+ }
824
+ return jStat2[passfunc](this[0], fullbool);
825
+ };
826
+ })(funcs[i]);
827
+ })("cumsum cumprod".split(" "));
828
+ (function(funcs) {
829
+ for (var i = 0; i < funcs.length; i++) (function(passfunc) {
830
+ jProto[passfunc] = function(fullbool, func) {
831
+ var arr = [];
832
+ var i2 = 0;
833
+ var tmpthis = this;
834
+ if (isFunction(fullbool)) {
835
+ func = fullbool;
836
+ fullbool = false;
837
+ }
838
+ if (func) {
839
+ setTimeout(function() {
840
+ func.call(tmpthis, jProto[passfunc].call(tmpthis, fullbool));
841
+ });
842
+ return this;
843
+ }
844
+ if (this.length > 1) {
845
+ if (passfunc !== "sumrow")
846
+ tmpthis = fullbool === true ? this : this.transpose();
847
+ for (; i2 < tmpthis.length; i2++)
848
+ arr[i2] = jStat2[passfunc](tmpthis[i2]);
849
+ return fullbool === true ? jStat2[passfunc](jStat2.utils.toVector(arr)) : arr;
850
+ }
851
+ return jStat2[passfunc](this[0], fullbool);
852
+ };
853
+ })(funcs[i]);
854
+ })("sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr geomean median diff rank mode range variance deviation stdev meandev meddev coeffvar quartiles histogram skewness kurtosis".split(" "));
855
+ (function(funcs) {
856
+ for (var i = 0; i < funcs.length; i++) (function(passfunc) {
857
+ jProto[passfunc] = function() {
858
+ var arr = [];
859
+ var i2 = 0;
860
+ var tmpthis = this;
861
+ var args = Array.prototype.slice.call(arguments);
862
+ var callbackFunction;
863
+ if (isFunction(args[args.length - 1])) {
864
+ callbackFunction = args[args.length - 1];
865
+ var argsToPass = args.slice(0, args.length - 1);
866
+ setTimeout(function() {
867
+ callbackFunction.call(
868
+ tmpthis,
869
+ jProto[passfunc].apply(tmpthis, argsToPass)
870
+ );
871
+ });
872
+ return this;
873
+ } else {
874
+ callbackFunction = void 0;
875
+ var curriedFunction = function curriedFunction2(vector) {
876
+ return jStat2[passfunc].apply(tmpthis, [vector].concat(args));
877
+ };
878
+ }
879
+ if (this.length > 1) {
880
+ tmpthis = tmpthis.transpose();
881
+ for (; i2 < tmpthis.length; i2++)
882
+ arr[i2] = curriedFunction(tmpthis[i2]);
883
+ return arr;
884
+ }
885
+ return curriedFunction(this[0]);
886
+ };
887
+ })(funcs[i]);
888
+ })("quantiles percentileOfScore".split(" "));
889
+ })(jStat, Math);
890
+ (function(jStat2, Math2) {
891
+ jStat2.gammaln = function gammaln(x) {
892
+ var j = 0;
893
+ var cof = [
894
+ 76.18009172947146,
895
+ -86.50532032941678,
896
+ 24.01409824083091,
897
+ -1.231739572450155,
898
+ 0.001208650973866179,
899
+ -5395239384953e-18
900
+ ];
901
+ var ser = 1.000000000190015;
902
+ var xx, y, tmp;
903
+ tmp = (y = xx = x) + 5.5;
904
+ tmp -= (xx + 0.5) * Math2.log(tmp);
905
+ for (; j < 6; j++)
906
+ ser += cof[j] / ++y;
907
+ return Math2.log(2.5066282746310007 * ser / xx) - tmp;
908
+ };
909
+ jStat2.loggam = function loggam(x) {
910
+ var x0, x2, xp, gl, gl0;
911
+ var k, n;
912
+ var a = [
913
+ 0.08333333333333333,
914
+ -0.002777777777777778,
915
+ 7936507936507937e-19,
916
+ -5952380952380952e-19,
917
+ 8417508417508418e-19,
918
+ -0.001917526917526918,
919
+ 0.00641025641025641,
920
+ -0.02955065359477124,
921
+ 0.1796443723688307,
922
+ -1.3924322169059
923
+ ];
924
+ x0 = x;
925
+ n = 0;
926
+ if (x == 1 || x == 2) {
927
+ return 0;
928
+ }
929
+ if (x <= 7) {
930
+ n = Math2.floor(7 - x);
931
+ x0 = x + n;
932
+ }
933
+ x2 = 1 / (x0 * x0);
934
+ xp = 2 * Math2.PI;
935
+ gl0 = a[9];
936
+ for (k = 8; k >= 0; k--) {
937
+ gl0 *= x2;
938
+ gl0 += a[k];
939
+ }
940
+ gl = gl0 / x0 + 0.5 * Math2.log(xp) + (x0 - 0.5) * Math2.log(x0) - x0;
941
+ if (x <= 7) {
942
+ for (k = 1; k <= n; k++) {
943
+ gl -= Math2.log(x0 - 1);
944
+ x0 -= 1;
945
+ }
946
+ }
947
+ return gl;
948
+ };
949
+ jStat2.gammafn = function gammafn(x) {
950
+ var p = [
951
+ -1.716185138865495,
952
+ 24.76565080557592,
953
+ -379.80425647094563,
954
+ 629.3311553128184,
955
+ 866.9662027904133,
956
+ -31451.272968848367,
957
+ -36144.413418691176,
958
+ 66456.14382024054
959
+ ];
960
+ var q = [
961
+ -30.8402300119739,
962
+ 315.35062697960416,
963
+ -1015.1563674902192,
964
+ -3107.771671572311,
965
+ 22538.11842098015,
966
+ 4755.846277527881,
967
+ -134659.9598649693,
968
+ -115132.2596755535
969
+ ];
970
+ var fact = false;
971
+ var n = 0;
972
+ var xden = 0;
973
+ var xnum = 0;
974
+ var y = x;
975
+ var i, z, yi, res;
976
+ if (x > 171.6243769536076) {
977
+ return Infinity;
978
+ }
979
+ if (y <= 0) {
980
+ res = y % 1 + 36e-17;
981
+ if (res) {
982
+ fact = (!(y & 1) ? 1 : -1) * Math2.PI / Math2.sin(Math2.PI * res);
983
+ y = 1 - y;
984
+ } else {
985
+ return Infinity;
986
+ }
987
+ }
988
+ yi = y;
989
+ if (y < 1) {
990
+ z = y++;
991
+ } else {
992
+ z = (y -= n = (y | 0) - 1) - 1;
993
+ }
994
+ for (i = 0; i < 8; ++i) {
995
+ xnum = (xnum + p[i]) * z;
996
+ xden = xden * z + q[i];
997
+ }
998
+ res = xnum / xden + 1;
999
+ if (yi < y) {
1000
+ res /= yi;
1001
+ } else if (yi > y) {
1002
+ for (i = 0; i < n; ++i) {
1003
+ res *= y;
1004
+ y++;
1005
+ }
1006
+ }
1007
+ if (fact) {
1008
+ res = fact / res;
1009
+ }
1010
+ return res;
1011
+ };
1012
+ jStat2.gammap = function gammap(a, x) {
1013
+ return jStat2.lowRegGamma(a, x) * jStat2.gammafn(a);
1014
+ };
1015
+ jStat2.lowRegGamma = function lowRegGamma(a, x) {
1016
+ var aln = jStat2.gammaln(a);
1017
+ var ap = a;
1018
+ var sum = 1 / a;
1019
+ var del = sum;
1020
+ var b = x + 1 - a;
1021
+ var c = 1 / 1e-30;
1022
+ var d = 1 / b;
1023
+ var h = d;
1024
+ var i = 1;
1025
+ var ITMAX = -~(Math2.log(a >= 1 ? a : 1 / a) * 8.5 + a * 0.4 + 17);
1026
+ var an;
1027
+ if (x < 0 || a <= 0) {
1028
+ return NaN;
1029
+ } else if (x < a + 1) {
1030
+ for (; i <= ITMAX; i++) {
1031
+ sum += del *= x / ++ap;
1032
+ }
1033
+ return sum * Math2.exp(-x + a * Math2.log(x) - aln);
1034
+ }
1035
+ for (; i <= ITMAX; i++) {
1036
+ an = -i * (i - a);
1037
+ b += 2;
1038
+ d = an * d + b;
1039
+ c = b + an / c;
1040
+ d = 1 / d;
1041
+ h *= d * c;
1042
+ }
1043
+ return 1 - h * Math2.exp(-x + a * Math2.log(x) - aln);
1044
+ };
1045
+ jStat2.factorialln = function factorialln(n) {
1046
+ return n < 0 ? NaN : jStat2.gammaln(n + 1);
1047
+ };
1048
+ jStat2.factorial = function factorial(n) {
1049
+ return n < 0 ? NaN : jStat2.gammafn(n + 1);
1050
+ };
1051
+ jStat2.combination = function combination(n, m) {
1052
+ return n > 170 || m > 170 ? Math2.exp(jStat2.combinationln(n, m)) : jStat2.factorial(n) / jStat2.factorial(m) / jStat2.factorial(n - m);
1053
+ };
1054
+ jStat2.combinationln = function combinationln(n, m) {
1055
+ return jStat2.factorialln(n) - jStat2.factorialln(m) - jStat2.factorialln(n - m);
1056
+ };
1057
+ jStat2.permutation = function permutation(n, m) {
1058
+ return jStat2.factorial(n) / jStat2.factorial(n - m);
1059
+ };
1060
+ jStat2.betafn = function betafn(x, y) {
1061
+ if (x <= 0 || y <= 0)
1062
+ return void 0;
1063
+ return x + y > 170 ? Math2.exp(jStat2.betaln(x, y)) : jStat2.gammafn(x) * jStat2.gammafn(y) / jStat2.gammafn(x + y);
1064
+ };
1065
+ jStat2.betaln = function betaln(x, y) {
1066
+ return jStat2.gammaln(x) + jStat2.gammaln(y) - jStat2.gammaln(x + y);
1067
+ };
1068
+ jStat2.betacf = function betacf(x, a, b) {
1069
+ var fpmin = 1e-30;
1070
+ var m = 1;
1071
+ var qab = a + b;
1072
+ var qap = a + 1;
1073
+ var qam = a - 1;
1074
+ var c = 1;
1075
+ var d = 1 - qab * x / qap;
1076
+ var m2, aa, del, h;
1077
+ if (Math2.abs(d) < fpmin)
1078
+ d = fpmin;
1079
+ d = 1 / d;
1080
+ h = d;
1081
+ for (; m <= 100; m++) {
1082
+ m2 = 2 * m;
1083
+ aa = m * (b - m) * x / ((qam + m2) * (a + m2));
1084
+ d = 1 + aa * d;
1085
+ if (Math2.abs(d) < fpmin)
1086
+ d = fpmin;
1087
+ c = 1 + aa / c;
1088
+ if (Math2.abs(c) < fpmin)
1089
+ c = fpmin;
1090
+ d = 1 / d;
1091
+ h *= d * c;
1092
+ aa = -(a + m) * (qab + m) * x / ((a + m2) * (qap + m2));
1093
+ d = 1 + aa * d;
1094
+ if (Math2.abs(d) < fpmin)
1095
+ d = fpmin;
1096
+ c = 1 + aa / c;
1097
+ if (Math2.abs(c) < fpmin)
1098
+ c = fpmin;
1099
+ d = 1 / d;
1100
+ del = d * c;
1101
+ h *= del;
1102
+ if (Math2.abs(del - 1) < 3e-7)
1103
+ break;
1104
+ }
1105
+ return h;
1106
+ };
1107
+ jStat2.gammapinv = function gammapinv(p, a) {
1108
+ var j = 0;
1109
+ var a1 = a - 1;
1110
+ var EPS = 1e-8;
1111
+ var gln = jStat2.gammaln(a);
1112
+ var x, err, t, u, pp, lna1, afac;
1113
+ if (p >= 1)
1114
+ return Math2.max(100, a + 100 * Math2.sqrt(a));
1115
+ if (p <= 0)
1116
+ return 0;
1117
+ if (a > 1) {
1118
+ lna1 = Math2.log(a1);
1119
+ afac = Math2.exp(a1 * (lna1 - 1) - gln);
1120
+ pp = p < 0.5 ? p : 1 - p;
1121
+ t = Math2.sqrt(-2 * Math2.log(pp));
1122
+ x = (2.30753 + t * 0.27061) / (1 + t * (0.99229 + t * 0.04481)) - t;
1123
+ if (p < 0.5)
1124
+ x = -x;
1125
+ x = Math2.max(
1126
+ 1e-3,
1127
+ a * Math2.pow(1 - 1 / (9 * a) - x / (3 * Math2.sqrt(a)), 3)
1128
+ );
1129
+ } else {
1130
+ t = 1 - a * (0.253 + a * 0.12);
1131
+ if (p < t)
1132
+ x = Math2.pow(p / t, 1 / a);
1133
+ else
1134
+ x = 1 - Math2.log(1 - (p - t) / (1 - t));
1135
+ }
1136
+ for (; j < 12; j++) {
1137
+ if (x <= 0)
1138
+ return 0;
1139
+ err = jStat2.lowRegGamma(a, x) - p;
1140
+ if (a > 1)
1141
+ t = afac * Math2.exp(-(x - a1) + a1 * (Math2.log(x) - lna1));
1142
+ else
1143
+ t = Math2.exp(-x + a1 * Math2.log(x) - gln);
1144
+ u = err / t;
1145
+ x -= t = u / (1 - 0.5 * Math2.min(1, u * ((a - 1) / x - 1)));
1146
+ if (x <= 0)
1147
+ x = 0.5 * (x + t);
1148
+ if (Math2.abs(t) < EPS * x)
1149
+ break;
1150
+ }
1151
+ return x;
1152
+ };
1153
+ jStat2.erf = function erf(x) {
1154
+ var cof = [
1155
+ -1.3026537197817094,
1156
+ 0.6419697923564902,
1157
+ 0.019476473204185836,
1158
+ -0.00956151478680863,
1159
+ -946595344482036e-18,
1160
+ 366839497852761e-18,
1161
+ 42523324806907e-18,
1162
+ -20278578112534e-18,
1163
+ -1624290004647e-18,
1164
+ 130365583558e-17,
1165
+ 15626441722e-18,
1166
+ -85238095915e-18,
1167
+ 6529054439e-18,
1168
+ 5059343495e-18,
1169
+ -991364156e-18,
1170
+ -227365122e-18,
1171
+ 96467911e-18,
1172
+ 2394038e-18,
1173
+ -6886027e-18,
1174
+ 894487e-18,
1175
+ 313092e-18,
1176
+ -112708e-18,
1177
+ 381e-18,
1178
+ 7106e-18,
1179
+ -1523e-18,
1180
+ -94e-18,
1181
+ 121e-18,
1182
+ -28e-18
1183
+ ];
1184
+ var j = cof.length - 1;
1185
+ var isneg = false;
1186
+ var d = 0;
1187
+ var dd = 0;
1188
+ var t, ty, tmp, res;
1189
+ if (x < 0) {
1190
+ x = -x;
1191
+ isneg = true;
1192
+ }
1193
+ t = 2 / (2 + x);
1194
+ ty = 4 * t - 2;
1195
+ for (; j > 0; j--) {
1196
+ tmp = d;
1197
+ d = ty * d - dd + cof[j];
1198
+ dd = tmp;
1199
+ }
1200
+ res = t * Math2.exp(-x * x + 0.5 * (cof[0] + ty * d) - dd);
1201
+ return isneg ? res - 1 : 1 - res;
1202
+ };
1203
+ jStat2.erfc = function erfc(x) {
1204
+ return 1 - jStat2.erf(x);
1205
+ };
1206
+ jStat2.erfcinv = function erfcinv(p) {
1207
+ var j = 0;
1208
+ var x, err, t, pp;
1209
+ if (p >= 2)
1210
+ return -100;
1211
+ if (p <= 0)
1212
+ return 100;
1213
+ pp = p < 1 ? p : 2 - p;
1214
+ t = Math2.sqrt(-2 * Math2.log(pp / 2));
1215
+ x = -0.70711 * ((2.30753 + t * 0.27061) / (1 + t * (0.99229 + t * 0.04481)) - t);
1216
+ for (; j < 2; j++) {
1217
+ err = jStat2.erfc(x) - pp;
1218
+ x += err / (1.1283791670955126 * Math2.exp(-x * x) - x * err);
1219
+ }
1220
+ return p < 1 ? x : -x;
1221
+ };
1222
+ jStat2.ibetainv = function ibetainv(p, a, b) {
1223
+ var EPS = 1e-8;
1224
+ var a1 = a - 1;
1225
+ var b1 = b - 1;
1226
+ var j = 0;
1227
+ var lna, lnb, pp, t, u, err, x, al, h, w, afac;
1228
+ if (p <= 0)
1229
+ return 0;
1230
+ if (p >= 1)
1231
+ return 1;
1232
+ if (a >= 1 && b >= 1) {
1233
+ pp = p < 0.5 ? p : 1 - p;
1234
+ t = Math2.sqrt(-2 * Math2.log(pp));
1235
+ x = (2.30753 + t * 0.27061) / (1 + t * (0.99229 + t * 0.04481)) - t;
1236
+ if (p < 0.5)
1237
+ x = -x;
1238
+ al = (x * x - 3) / 6;
1239
+ h = 2 / (1 / (2 * a - 1) + 1 / (2 * b - 1));
1240
+ w = x * Math2.sqrt(al + h) / h - (1 / (2 * b - 1) - 1 / (2 * a - 1)) * (al + 5 / 6 - 2 / (3 * h));
1241
+ x = a / (a + b * Math2.exp(2 * w));
1242
+ } else {
1243
+ lna = Math2.log(a / (a + b));
1244
+ lnb = Math2.log(b / (a + b));
1245
+ t = Math2.exp(a * lna) / a;
1246
+ u = Math2.exp(b * lnb) / b;
1247
+ w = t + u;
1248
+ if (p < t / w)
1249
+ x = Math2.pow(a * w * p, 1 / a);
1250
+ else
1251
+ x = 1 - Math2.pow(b * w * (1 - p), 1 / b);
1252
+ }
1253
+ afac = -jStat2.gammaln(a) - jStat2.gammaln(b) + jStat2.gammaln(a + b);
1254
+ for (; j < 10; j++) {
1255
+ if (x === 0 || x === 1)
1256
+ return x;
1257
+ err = jStat2.ibeta(x, a, b) - p;
1258
+ t = Math2.exp(a1 * Math2.log(x) + b1 * Math2.log(1 - x) + afac);
1259
+ u = err / t;
1260
+ x -= t = u / (1 - 0.5 * Math2.min(1, u * (a1 / x - b1 / (1 - x))));
1261
+ if (x <= 0)
1262
+ x = 0.5 * (x + t);
1263
+ if (x >= 1)
1264
+ x = 0.5 * (x + t + 1);
1265
+ if (Math2.abs(t) < EPS * x && j > 0)
1266
+ break;
1267
+ }
1268
+ return x;
1269
+ };
1270
+ jStat2.ibeta = function ibeta(x, a, b) {
1271
+ var bt = x === 0 || x === 1 ? 0 : Math2.exp(jStat2.gammaln(a + b) - jStat2.gammaln(a) - jStat2.gammaln(b) + a * Math2.log(x) + b * Math2.log(1 - x));
1272
+ if (x < 0 || x > 1)
1273
+ return false;
1274
+ if (x < (a + 1) / (a + b + 2))
1275
+ return bt * jStat2.betacf(x, a, b) / a;
1276
+ return 1 - bt * jStat2.betacf(1 - x, b, a) / b;
1277
+ };
1278
+ jStat2.randn = function randn(n, m) {
1279
+ var u, v, x, y, q;
1280
+ if (!m)
1281
+ m = n;
1282
+ if (n)
1283
+ return jStat2.create(n, m, function() {
1284
+ return jStat2.randn();
1285
+ });
1286
+ do {
1287
+ u = jStat2._random_fn();
1288
+ v = 1.7156 * (jStat2._random_fn() - 0.5);
1289
+ x = u - 0.449871;
1290
+ y = Math2.abs(v) + 0.386595;
1291
+ q = x * x + y * (0.196 * y - 0.25472 * x);
1292
+ } while (q > 0.27597 && (q > 0.27846 || v * v > -4 * Math2.log(u) * u * u));
1293
+ return v / u;
1294
+ };
1295
+ jStat2.randg = function randg(shape, n, m) {
1296
+ var oalph = shape;
1297
+ var a1, a2, u, v, x, mat;
1298
+ if (!m)
1299
+ m = n;
1300
+ if (!shape)
1301
+ shape = 1;
1302
+ if (n) {
1303
+ mat = jStat2.zeros(n, m);
1304
+ mat.alter(function() {
1305
+ return jStat2.randg(shape);
1306
+ });
1307
+ return mat;
1308
+ }
1309
+ if (shape < 1)
1310
+ shape += 1;
1311
+ a1 = shape - 1 / 3;
1312
+ a2 = 1 / Math2.sqrt(9 * a1);
1313
+ do {
1314
+ do {
1315
+ x = jStat2.randn();
1316
+ v = 1 + a2 * x;
1317
+ } while (v <= 0);
1318
+ v = v * v * v;
1319
+ u = jStat2._random_fn();
1320
+ } while (u > 1 - 0.331 * Math2.pow(x, 4) && Math2.log(u) > 0.5 * x * x + a1 * (1 - v + Math2.log(v)));
1321
+ if (shape == oalph)
1322
+ return a1 * v;
1323
+ do {
1324
+ u = jStat2._random_fn();
1325
+ } while (u === 0);
1326
+ return Math2.pow(u, 1 / oalph) * a1 * v;
1327
+ };
1328
+ (function(funcs) {
1329
+ for (var i = 0; i < funcs.length; i++) (function(passfunc) {
1330
+ jStat2.fn[passfunc] = function() {
1331
+ return jStat2(
1332
+ jStat2.map(this, function(value) {
1333
+ return jStat2[passfunc](value);
1334
+ })
1335
+ );
1336
+ };
1337
+ })(funcs[i]);
1338
+ })("gammaln gammafn factorial factorialln".split(" "));
1339
+ (function(funcs) {
1340
+ for (var i = 0; i < funcs.length; i++) (function(passfunc) {
1341
+ jStat2.fn[passfunc] = function() {
1342
+ return jStat2(jStat2[passfunc].apply(null, arguments));
1343
+ };
1344
+ })(funcs[i]);
1345
+ })("randn".split(" "));
1346
+ })(jStat, Math);
1347
+ (function(jStat2, Math2) {
1348
+ (function(list) {
1349
+ for (var i = 0; i < list.length; i++) (function(func) {
1350
+ jStat2[func] = function f(a, b, c) {
1351
+ if (!(this instanceof f))
1352
+ return new f(a, b, c);
1353
+ this._a = a;
1354
+ this._b = b;
1355
+ this._c = c;
1356
+ return this;
1357
+ };
1358
+ jStat2.fn[func] = function(a, b, c) {
1359
+ var newthis = jStat2[func](a, b, c);
1360
+ newthis.data = this;
1361
+ return newthis;
1362
+ };
1363
+ jStat2[func].prototype.sample = function(arr) {
1364
+ var a = this._a;
1365
+ var b = this._b;
1366
+ var c = this._c;
1367
+ if (arr)
1368
+ return jStat2.alter(arr, function() {
1369
+ return jStat2[func].sample(a, b, c);
1370
+ });
1371
+ else
1372
+ return jStat2[func].sample(a, b, c);
1373
+ };
1374
+ (function(vals) {
1375
+ for (var i2 = 0; i2 < vals.length; i2++) (function(fnfunc) {
1376
+ jStat2[func].prototype[fnfunc] = function(x) {
1377
+ var a = this._a;
1378
+ var b = this._b;
1379
+ var c = this._c;
1380
+ if (!x && x !== 0)
1381
+ x = this.data;
1382
+ if (typeof x !== "number") {
1383
+ return jStat2.fn.map.call(x, function(x2) {
1384
+ return jStat2[func][fnfunc](x2, a, b, c);
1385
+ });
1386
+ }
1387
+ return jStat2[func][fnfunc](x, a, b, c);
1388
+ };
1389
+ })(vals[i2]);
1390
+ })("pdf cdf inv".split(" "));
1391
+ (function(vals) {
1392
+ for (var i2 = 0; i2 < vals.length; i2++) (function(fnfunc) {
1393
+ jStat2[func].prototype[fnfunc] = function() {
1394
+ return jStat2[func][fnfunc](this._a, this._b, this._c);
1395
+ };
1396
+ })(vals[i2]);
1397
+ })("mean median mode variance".split(" "));
1398
+ })(list[i]);
1399
+ })("beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy laplace lognormal noncentralt normal pareto studentt weibull uniform binomial negbin hypgeom poisson triangular tukey arcsine".split(" "));
1400
+ jStat2.extend(jStat2.beta, {
1401
+ pdf: function pdf(x, alpha, beta) {
1402
+ if (x > 1 || x < 0)
1403
+ return 0;
1404
+ if (alpha == 1 && beta == 1)
1405
+ return 1;
1406
+ if (alpha < 512 && beta < 512) {
1407
+ return Math2.pow(x, alpha - 1) * Math2.pow(1 - x, beta - 1) / jStat2.betafn(alpha, beta);
1408
+ } else {
1409
+ return Math2.exp((alpha - 1) * Math2.log(x) + (beta - 1) * Math2.log(1 - x) - jStat2.betaln(alpha, beta));
1410
+ }
1411
+ },
1412
+ cdf: function cdf(x, alpha, beta) {
1413
+ return x > 1 || x < 0 ? (x > 1) * 1 : jStat2.ibeta(x, alpha, beta);
1414
+ },
1415
+ inv: function inv(x, alpha, beta) {
1416
+ return jStat2.ibetainv(x, alpha, beta);
1417
+ },
1418
+ mean: function mean(alpha, beta) {
1419
+ return alpha / (alpha + beta);
1420
+ },
1421
+ median: function median(alpha, beta) {
1422
+ return jStat2.ibetainv(0.5, alpha, beta);
1423
+ },
1424
+ mode: function mode(alpha, beta) {
1425
+ return (alpha - 1) / (alpha + beta - 2);
1426
+ },
1427
+ // return a random sample
1428
+ sample: function sample(alpha, beta) {
1429
+ var u = jStat2.randg(alpha);
1430
+ return u / (u + jStat2.randg(beta));
1431
+ },
1432
+ variance: function variance(alpha, beta) {
1433
+ return alpha * beta / (Math2.pow(alpha + beta, 2) * (alpha + beta + 1));
1434
+ }
1435
+ });
1436
+ jStat2.extend(jStat2.centralF, {
1437
+ // This implementation of the pdf function avoids float overflow
1438
+ // See the way that R calculates this value:
1439
+ // https://svn.r-project.org/R/trunk/src/nmath/df.c
1440
+ pdf: function pdf(x, df1, df2) {
1441
+ var p, q, f;
1442
+ if (x < 0)
1443
+ return 0;
1444
+ if (df1 <= 2) {
1445
+ if (x === 0 && df1 < 2) {
1446
+ return Infinity;
1447
+ }
1448
+ if (x === 0 && df1 === 2) {
1449
+ return 1;
1450
+ }
1451
+ return 1 / jStat2.betafn(df1 / 2, df2 / 2) * Math2.pow(df1 / df2, df1 / 2) * Math2.pow(x, df1 / 2 - 1) * Math2.pow(1 + df1 / df2 * x, -(df1 + df2) / 2);
1452
+ }
1453
+ p = df1 * x / (df2 + x * df1);
1454
+ q = df2 / (df2 + x * df1);
1455
+ f = df1 * q / 2;
1456
+ return f * jStat2.binomial.pdf((df1 - 2) / 2, (df1 + df2 - 2) / 2, p);
1457
+ },
1458
+ cdf: function cdf(x, df1, df2) {
1459
+ if (x < 0)
1460
+ return 0;
1461
+ return jStat2.ibeta(df1 * x / (df1 * x + df2), df1 / 2, df2 / 2);
1462
+ },
1463
+ inv: function inv(x, df1, df2) {
1464
+ return df2 / (df1 * (1 / jStat2.ibetainv(x, df1 / 2, df2 / 2) - 1));
1465
+ },
1466
+ mean: function mean(df1, df2) {
1467
+ return df2 > 2 ? df2 / (df2 - 2) : void 0;
1468
+ },
1469
+ mode: function mode(df1, df2) {
1470
+ return df1 > 2 ? df2 * (df1 - 2) / (df1 * (df2 + 2)) : void 0;
1471
+ },
1472
+ // return a random sample
1473
+ sample: function sample(df1, df2) {
1474
+ var x1 = jStat2.randg(df1 / 2) * 2;
1475
+ var x2 = jStat2.randg(df2 / 2) * 2;
1476
+ return x1 / df1 / (x2 / df2);
1477
+ },
1478
+ variance: function variance(df1, df2) {
1479
+ if (df2 <= 4)
1480
+ return void 0;
1481
+ return 2 * df2 * df2 * (df1 + df2 - 2) / (df1 * (df2 - 2) * (df2 - 2) * (df2 - 4));
1482
+ }
1483
+ });
1484
+ jStat2.extend(jStat2.cauchy, {
1485
+ pdf: function pdf(x, local, scale) {
1486
+ if (scale < 0) {
1487
+ return 0;
1488
+ }
1489
+ return scale / (Math2.pow(x - local, 2) + Math2.pow(scale, 2)) / Math2.PI;
1490
+ },
1491
+ cdf: function cdf(x, local, scale) {
1492
+ return Math2.atan((x - local) / scale) / Math2.PI + 0.5;
1493
+ },
1494
+ inv: function(p, local, scale) {
1495
+ return local + scale * Math2.tan(Math2.PI * (p - 0.5));
1496
+ },
1497
+ median: function median(local) {
1498
+ return local;
1499
+ },
1500
+ mode: function mode(local) {
1501
+ return local;
1502
+ },
1503
+ sample: function sample(local, scale) {
1504
+ return jStat2.randn() * Math2.sqrt(1 / (2 * jStat2.randg(0.5))) * scale + local;
1505
+ }
1506
+ });
1507
+ jStat2.extend(jStat2.chisquare, {
1508
+ pdf: function pdf(x, dof) {
1509
+ if (x < 0)
1510
+ return 0;
1511
+ return x === 0 && dof === 2 ? 0.5 : Math2.exp((dof / 2 - 1) * Math2.log(x) - x / 2 - dof / 2 * Math2.log(2) - jStat2.gammaln(dof / 2));
1512
+ },
1513
+ cdf: function cdf(x, dof) {
1514
+ if (x < 0)
1515
+ return 0;
1516
+ return jStat2.lowRegGamma(dof / 2, x / 2);
1517
+ },
1518
+ inv: function(p, dof) {
1519
+ return 2 * jStat2.gammapinv(p, 0.5 * dof);
1520
+ },
1521
+ mean: function(dof) {
1522
+ return dof;
1523
+ },
1524
+ // TODO: this is an approximation (is there a better way?)
1525
+ median: function median(dof) {
1526
+ return dof * Math2.pow(1 - 2 / (9 * dof), 3);
1527
+ },
1528
+ mode: function mode(dof) {
1529
+ return dof - 2 > 0 ? dof - 2 : 0;
1530
+ },
1531
+ sample: function sample(dof) {
1532
+ return jStat2.randg(dof / 2) * 2;
1533
+ },
1534
+ variance: function variance(dof) {
1535
+ return 2 * dof;
1536
+ }
1537
+ });
1538
+ jStat2.extend(jStat2.exponential, {
1539
+ pdf: function pdf(x, rate) {
1540
+ return x < 0 ? 0 : rate * Math2.exp(-rate * x);
1541
+ },
1542
+ cdf: function cdf(x, rate) {
1543
+ return x < 0 ? 0 : 1 - Math2.exp(-rate * x);
1544
+ },
1545
+ inv: function(p, rate) {
1546
+ return -Math2.log(1 - p) / rate;
1547
+ },
1548
+ mean: function(rate) {
1549
+ return 1 / rate;
1550
+ },
1551
+ median: function(rate) {
1552
+ return 1 / rate * Math2.log(2);
1553
+ },
1554
+ mode: function mode() {
1555
+ return 0;
1556
+ },
1557
+ sample: function sample(rate) {
1558
+ return -1 / rate * Math2.log(jStat2._random_fn());
1559
+ },
1560
+ variance: function(rate) {
1561
+ return Math2.pow(rate, -2);
1562
+ }
1563
+ });
1564
+ jStat2.extend(jStat2.gamma, {
1565
+ pdf: function pdf(x, shape, scale) {
1566
+ if (x < 0)
1567
+ return 0;
1568
+ return x === 0 && shape === 1 ? 1 / scale : Math2.exp((shape - 1) * Math2.log(x) - x / scale - jStat2.gammaln(shape) - shape * Math2.log(scale));
1569
+ },
1570
+ cdf: function cdf(x, shape, scale) {
1571
+ if (x < 0)
1572
+ return 0;
1573
+ return jStat2.lowRegGamma(shape, x / scale);
1574
+ },
1575
+ inv: function(p, shape, scale) {
1576
+ return jStat2.gammapinv(p, shape) * scale;
1577
+ },
1578
+ mean: function(shape, scale) {
1579
+ return shape * scale;
1580
+ },
1581
+ mode: function mode(shape, scale) {
1582
+ if (shape > 1) return (shape - 1) * scale;
1583
+ return void 0;
1584
+ },
1585
+ sample: function sample(shape, scale) {
1586
+ return jStat2.randg(shape) * scale;
1587
+ },
1588
+ variance: function variance(shape, scale) {
1589
+ return shape * scale * scale;
1590
+ }
1591
+ });
1592
+ jStat2.extend(jStat2.invgamma, {
1593
+ pdf: function pdf(x, shape, scale) {
1594
+ if (x <= 0)
1595
+ return 0;
1596
+ return Math2.exp(-(shape + 1) * Math2.log(x) - scale / x - jStat2.gammaln(shape) + shape * Math2.log(scale));
1597
+ },
1598
+ cdf: function cdf(x, shape, scale) {
1599
+ if (x <= 0)
1600
+ return 0;
1601
+ return 1 - jStat2.lowRegGamma(shape, scale / x);
1602
+ },
1603
+ inv: function(p, shape, scale) {
1604
+ return scale / jStat2.gammapinv(1 - p, shape);
1605
+ },
1606
+ mean: function(shape, scale) {
1607
+ return shape > 1 ? scale / (shape - 1) : void 0;
1608
+ },
1609
+ mode: function mode(shape, scale) {
1610
+ return scale / (shape + 1);
1611
+ },
1612
+ sample: function sample(shape, scale) {
1613
+ return scale / jStat2.randg(shape);
1614
+ },
1615
+ variance: function variance(shape, scale) {
1616
+ if (shape <= 2)
1617
+ return void 0;
1618
+ return scale * scale / ((shape - 1) * (shape - 1) * (shape - 2));
1619
+ }
1620
+ });
1621
+ jStat2.extend(jStat2.kumaraswamy, {
1622
+ pdf: function pdf(x, alpha, beta) {
1623
+ if (x === 0 && alpha === 1)
1624
+ return beta;
1625
+ else if (x === 1 && beta === 1)
1626
+ return alpha;
1627
+ return Math2.exp(Math2.log(alpha) + Math2.log(beta) + (alpha - 1) * Math2.log(x) + (beta - 1) * Math2.log(1 - Math2.pow(x, alpha)));
1628
+ },
1629
+ cdf: function cdf(x, alpha, beta) {
1630
+ if (x < 0)
1631
+ return 0;
1632
+ else if (x > 1)
1633
+ return 1;
1634
+ return 1 - Math2.pow(1 - Math2.pow(x, alpha), beta);
1635
+ },
1636
+ inv: function inv(p, alpha, beta) {
1637
+ return Math2.pow(1 - Math2.pow(1 - p, 1 / beta), 1 / alpha);
1638
+ },
1639
+ mean: function(alpha, beta) {
1640
+ return beta * jStat2.gammafn(1 + 1 / alpha) * jStat2.gammafn(beta) / jStat2.gammafn(1 + 1 / alpha + beta);
1641
+ },
1642
+ median: function median(alpha, beta) {
1643
+ return Math2.pow(1 - Math2.pow(2, -1 / beta), 1 / alpha);
1644
+ },
1645
+ mode: function mode(alpha, beta) {
1646
+ if (!(alpha >= 1 && beta >= 1 && (alpha !== 1 && beta !== 1)))
1647
+ return void 0;
1648
+ return Math2.pow((alpha - 1) / (alpha * beta - 1), 1 / alpha);
1649
+ },
1650
+ variance: function variance() {
1651
+ throw new Error("variance not yet implemented");
1652
+ }
1653
+ });
1654
+ jStat2.extend(jStat2.lognormal, {
1655
+ pdf: function pdf(x, mu, sigma) {
1656
+ if (x <= 0)
1657
+ return 0;
1658
+ return Math2.exp(-Math2.log(x) - 0.5 * Math2.log(2 * Math2.PI) - Math2.log(sigma) - Math2.pow(Math2.log(x) - mu, 2) / (2 * sigma * sigma));
1659
+ },
1660
+ cdf: function cdf(x, mu, sigma) {
1661
+ if (x < 0)
1662
+ return 0;
1663
+ return 0.5 + 0.5 * jStat2.erf((Math2.log(x) - mu) / Math2.sqrt(2 * sigma * sigma));
1664
+ },
1665
+ inv: function(p, mu, sigma) {
1666
+ return Math2.exp(-1.4142135623730951 * sigma * jStat2.erfcinv(2 * p) + mu);
1667
+ },
1668
+ mean: function mean(mu, sigma) {
1669
+ return Math2.exp(mu + sigma * sigma / 2);
1670
+ },
1671
+ median: function median(mu) {
1672
+ return Math2.exp(mu);
1673
+ },
1674
+ mode: function mode(mu, sigma) {
1675
+ return Math2.exp(mu - sigma * sigma);
1676
+ },
1677
+ sample: function sample(mu, sigma) {
1678
+ return Math2.exp(jStat2.randn() * sigma + mu);
1679
+ },
1680
+ variance: function variance(mu, sigma) {
1681
+ return (Math2.exp(sigma * sigma) - 1) * Math2.exp(2 * mu + sigma * sigma);
1682
+ }
1683
+ });
1684
+ jStat2.extend(jStat2.noncentralt, {
1685
+ pdf: function pdf(x, dof, ncp) {
1686
+ var tol = 1e-14;
1687
+ if (Math2.abs(ncp) < tol)
1688
+ return jStat2.studentt.pdf(x, dof);
1689
+ if (Math2.abs(x) < tol) {
1690
+ return Math2.exp(jStat2.gammaln((dof + 1) / 2) - ncp * ncp / 2 - 0.5 * Math2.log(Math2.PI * dof) - jStat2.gammaln(dof / 2));
1691
+ }
1692
+ return dof / x * (jStat2.noncentralt.cdf(x * Math2.sqrt(1 + 2 / dof), dof + 2, ncp) - jStat2.noncentralt.cdf(x, dof, ncp));
1693
+ },
1694
+ cdf: function cdf(x, dof, ncp) {
1695
+ var tol = 1e-14;
1696
+ var min_iterations = 200;
1697
+ if (Math2.abs(ncp) < tol)
1698
+ return jStat2.studentt.cdf(x, dof);
1699
+ var flip = false;
1700
+ if (x < 0) {
1701
+ flip = true;
1702
+ ncp = -ncp;
1703
+ }
1704
+ var prob = jStat2.normal.cdf(-ncp, 0, 1);
1705
+ var value = tol + 1;
1706
+ var lastvalue = value;
1707
+ var y = x * x / (x * x + dof);
1708
+ var j = 0;
1709
+ var p = Math2.exp(-ncp * ncp / 2);
1710
+ var q = Math2.exp(-ncp * ncp / 2 - 0.5 * Math2.log(2) - jStat2.gammaln(3 / 2)) * ncp;
1711
+ while (j < min_iterations || lastvalue > tol || value > tol) {
1712
+ lastvalue = value;
1713
+ if (j > 0) {
1714
+ p *= ncp * ncp / (2 * j);
1715
+ q *= ncp * ncp / (2 * (j + 1 / 2));
1716
+ }
1717
+ value = p * jStat2.beta.cdf(y, j + 0.5, dof / 2) + q * jStat2.beta.cdf(y, j + 1, dof / 2);
1718
+ prob += 0.5 * value;
1719
+ j++;
1720
+ }
1721
+ return flip ? 1 - prob : prob;
1722
+ }
1723
+ });
1724
+ jStat2.extend(jStat2.normal, {
1725
+ pdf: function pdf(x, mean, std) {
1726
+ return Math2.exp(-0.5 * Math2.log(2 * Math2.PI) - Math2.log(std) - Math2.pow(x - mean, 2) / (2 * std * std));
1727
+ },
1728
+ cdf: function cdf(x, mean, std) {
1729
+ return 0.5 * (1 + jStat2.erf((x - mean) / Math2.sqrt(2 * std * std)));
1730
+ },
1731
+ inv: function(p, mean, std) {
1732
+ return -1.4142135623730951 * std * jStat2.erfcinv(2 * p) + mean;
1733
+ },
1734
+ mean: function(mean) {
1735
+ return mean;
1736
+ },
1737
+ median: function median(mean) {
1738
+ return mean;
1739
+ },
1740
+ mode: function(mean) {
1741
+ return mean;
1742
+ },
1743
+ sample: function sample(mean, std) {
1744
+ return jStat2.randn() * std + mean;
1745
+ },
1746
+ variance: function(mean, std) {
1747
+ return std * std;
1748
+ }
1749
+ });
1750
+ jStat2.extend(jStat2.pareto, {
1751
+ pdf: function pdf(x, scale, shape) {
1752
+ if (x < scale)
1753
+ return 0;
1754
+ return shape * Math2.pow(scale, shape) / Math2.pow(x, shape + 1);
1755
+ },
1756
+ cdf: function cdf(x, scale, shape) {
1757
+ if (x < scale)
1758
+ return 0;
1759
+ return 1 - Math2.pow(scale / x, shape);
1760
+ },
1761
+ inv: function inv(p, scale, shape) {
1762
+ return scale / Math2.pow(1 - p, 1 / shape);
1763
+ },
1764
+ mean: function mean(scale, shape) {
1765
+ if (shape <= 1)
1766
+ return void 0;
1767
+ return shape * Math2.pow(scale, shape) / (shape - 1);
1768
+ },
1769
+ median: function median(scale, shape) {
1770
+ return scale * (shape * Math2.SQRT2);
1771
+ },
1772
+ mode: function mode(scale) {
1773
+ return scale;
1774
+ },
1775
+ variance: function(scale, shape) {
1776
+ if (shape <= 2)
1777
+ return void 0;
1778
+ return scale * scale * shape / (Math2.pow(shape - 1, 2) * (shape - 2));
1779
+ }
1780
+ });
1781
+ jStat2.extend(jStat2.studentt, {
1782
+ pdf: function pdf(x, dof) {
1783
+ dof = dof > 1e100 ? 1e100 : dof;
1784
+ return 1 / (Math2.sqrt(dof) * jStat2.betafn(0.5, dof / 2)) * Math2.pow(1 + x * x / dof, -((dof + 1) / 2));
1785
+ },
1786
+ cdf: function cdf(x, dof) {
1787
+ var dof2 = dof / 2;
1788
+ return jStat2.ibeta((x + Math2.sqrt(x * x + dof)) / (2 * Math2.sqrt(x * x + dof)), dof2, dof2);
1789
+ },
1790
+ inv: function(p, dof) {
1791
+ var x = jStat2.ibetainv(2 * Math2.min(p, 1 - p), 0.5 * dof, 0.5);
1792
+ x = Math2.sqrt(dof * (1 - x) / x);
1793
+ return p > 0.5 ? x : -x;
1794
+ },
1795
+ mean: function mean(dof) {
1796
+ return dof > 1 ? 0 : void 0;
1797
+ },
1798
+ median: function median() {
1799
+ return 0;
1800
+ },
1801
+ mode: function mode() {
1802
+ return 0;
1803
+ },
1804
+ sample: function sample(dof) {
1805
+ return jStat2.randn() * Math2.sqrt(dof / (2 * jStat2.randg(dof / 2)));
1806
+ },
1807
+ variance: function variance(dof) {
1808
+ return dof > 2 ? dof / (dof - 2) : dof > 1 ? Infinity : void 0;
1809
+ }
1810
+ });
1811
+ jStat2.extend(jStat2.weibull, {
1812
+ pdf: function pdf(x, scale, shape) {
1813
+ if (x < 0 || scale < 0 || shape < 0)
1814
+ return 0;
1815
+ return shape / scale * Math2.pow(x / scale, shape - 1) * Math2.exp(-Math2.pow(x / scale, shape));
1816
+ },
1817
+ cdf: function cdf(x, scale, shape) {
1818
+ return x < 0 ? 0 : 1 - Math2.exp(-Math2.pow(x / scale, shape));
1819
+ },
1820
+ inv: function(p, scale, shape) {
1821
+ return scale * Math2.pow(-Math2.log(1 - p), 1 / shape);
1822
+ },
1823
+ mean: function(scale, shape) {
1824
+ return scale * jStat2.gammafn(1 + 1 / shape);
1825
+ },
1826
+ median: function median(scale, shape) {
1827
+ return scale * Math2.pow(Math2.log(2), 1 / shape);
1828
+ },
1829
+ mode: function mode(scale, shape) {
1830
+ if (shape <= 1)
1831
+ return 0;
1832
+ return scale * Math2.pow((shape - 1) / shape, 1 / shape);
1833
+ },
1834
+ sample: function sample(scale, shape) {
1835
+ return scale * Math2.pow(-Math2.log(jStat2._random_fn()), 1 / shape);
1836
+ },
1837
+ variance: function variance(scale, shape) {
1838
+ return scale * scale * jStat2.gammafn(1 + 2 / shape) - Math2.pow(jStat2.weibull.mean(scale, shape), 2);
1839
+ }
1840
+ });
1841
+ jStat2.extend(jStat2.uniform, {
1842
+ pdf: function pdf(x, a, b) {
1843
+ return x < a || x > b ? 0 : 1 / (b - a);
1844
+ },
1845
+ cdf: function cdf(x, a, b) {
1846
+ if (x < a)
1847
+ return 0;
1848
+ else if (x < b)
1849
+ return (x - a) / (b - a);
1850
+ return 1;
1851
+ },
1852
+ inv: function(p, a, b) {
1853
+ return a + p * (b - a);
1854
+ },
1855
+ mean: function mean(a, b) {
1856
+ return 0.5 * (a + b);
1857
+ },
1858
+ median: function median(a, b) {
1859
+ return jStat2.mean(a, b);
1860
+ },
1861
+ mode: function mode() {
1862
+ throw new Error("mode is not yet implemented");
1863
+ },
1864
+ sample: function sample(a, b) {
1865
+ return a / 2 + b / 2 + (b / 2 - a / 2) * (2 * jStat2._random_fn() - 1);
1866
+ },
1867
+ variance: function variance(a, b) {
1868
+ return Math2.pow(b - a, 2) / 12;
1869
+ }
1870
+ });
1871
+ function betinc(x, a, b, eps) {
1872
+ var a0 = 0;
1873
+ var b0 = 1;
1874
+ var a1 = 1;
1875
+ var b1 = 1;
1876
+ var m9 = 0;
1877
+ var a2 = 0;
1878
+ var c9;
1879
+ while (Math2.abs((a1 - a2) / a1) > eps) {
1880
+ a2 = a1;
1881
+ c9 = -(a + m9) * (a + b + m9) * x / (a + 2 * m9) / (a + 2 * m9 + 1);
1882
+ a0 = a1 + c9 * a0;
1883
+ b0 = b1 + c9 * b0;
1884
+ m9 = m9 + 1;
1885
+ c9 = m9 * (b - m9) * x / (a + 2 * m9 - 1) / (a + 2 * m9);
1886
+ a1 = a0 + c9 * a1;
1887
+ b1 = b0 + c9 * b1;
1888
+ a0 = a0 / b1;
1889
+ b0 = b0 / b1;
1890
+ a1 = a1 / b1;
1891
+ b1 = 1;
1892
+ }
1893
+ return a1 / a;
1894
+ }
1895
+ jStat2.extend(jStat2.binomial, {
1896
+ pdf: function pdf(k, n, p) {
1897
+ return p === 0 || p === 1 ? n * p === k ? 1 : 0 : jStat2.combination(n, k) * Math2.pow(p, k) * Math2.pow(1 - p, n - k);
1898
+ },
1899
+ cdf: function cdf(x, n, p) {
1900
+ var betacdf;
1901
+ var eps = 1e-10;
1902
+ if (x < 0)
1903
+ return 0;
1904
+ if (x >= n)
1905
+ return 1;
1906
+ if (p < 0 || p > 1 || n <= 0)
1907
+ return NaN;
1908
+ x = Math2.floor(x);
1909
+ var z = p;
1910
+ var a = x + 1;
1911
+ var b = n - x;
1912
+ var s = a + b;
1913
+ var bt = Math2.exp(jStat2.gammaln(s) - jStat2.gammaln(b) - jStat2.gammaln(a) + a * Math2.log(z) + b * Math2.log(1 - z));
1914
+ if (z < (a + 1) / (s + 2))
1915
+ betacdf = bt * betinc(z, a, b, eps);
1916
+ else
1917
+ betacdf = 1 - bt * betinc(1 - z, b, a, eps);
1918
+ return Math2.round((1 - betacdf) * (1 / eps)) / (1 / eps);
1919
+ }
1920
+ });
1921
+ jStat2.extend(jStat2.negbin, {
1922
+ pdf: function pdf(k, r, p) {
1923
+ if (k !== k >>> 0)
1924
+ return false;
1925
+ if (k < 0)
1926
+ return 0;
1927
+ return jStat2.combination(k + r - 1, r - 1) * Math2.pow(1 - p, k) * Math2.pow(p, r);
1928
+ },
1929
+ cdf: function cdf(x, r, p) {
1930
+ var sum = 0, k = 0;
1931
+ if (x < 0) return 0;
1932
+ for (; k <= x; k++) {
1933
+ sum += jStat2.negbin.pdf(k, r, p);
1934
+ }
1935
+ return sum;
1936
+ }
1937
+ });
1938
+ jStat2.extend(jStat2.hypgeom, {
1939
+ pdf: function pdf(k, N, m, n) {
1940
+ if (k !== k | 0) {
1941
+ return false;
1942
+ } else if (k < 0 || k < m - (N - n)) {
1943
+ return 0;
1944
+ } else if (k > n || k > m) {
1945
+ return 0;
1946
+ } else if (m * 2 > N) {
1947
+ if (n * 2 > N) {
1948
+ return jStat2.hypgeom.pdf(N - m - n + k, N, N - m, N - n);
1949
+ } else {
1950
+ return jStat2.hypgeom.pdf(n - k, N, N - m, n);
1951
+ }
1952
+ } else if (n * 2 > N) {
1953
+ return jStat2.hypgeom.pdf(m - k, N, m, N - n);
1954
+ } else if (m < n) {
1955
+ return jStat2.hypgeom.pdf(k, N, n, m);
1956
+ } else {
1957
+ var scaledPDF = 1;
1958
+ var samplesDone = 0;
1959
+ for (var i = 0; i < k; i++) {
1960
+ while (scaledPDF > 1 && samplesDone < n) {
1961
+ scaledPDF *= 1 - m / (N - samplesDone);
1962
+ samplesDone++;
1963
+ }
1964
+ scaledPDF *= (n - i) * (m - i) / ((i + 1) * (N - m - n + i + 1));
1965
+ }
1966
+ for (; samplesDone < n; samplesDone++) {
1967
+ scaledPDF *= 1 - m / (N - samplesDone);
1968
+ }
1969
+ return Math2.min(1, Math2.max(0, scaledPDF));
1970
+ }
1971
+ },
1972
+ cdf: function cdf(x, N, m, n) {
1973
+ if (x < 0 || x < m - (N - n)) {
1974
+ return 0;
1975
+ } else if (x >= n || x >= m) {
1976
+ return 1;
1977
+ } else if (m * 2 > N) {
1978
+ if (n * 2 > N) {
1979
+ return jStat2.hypgeom.cdf(N - m - n + x, N, N - m, N - n);
1980
+ } else {
1981
+ return 1 - jStat2.hypgeom.cdf(n - x - 1, N, N - m, n);
1982
+ }
1983
+ } else if (n * 2 > N) {
1984
+ return 1 - jStat2.hypgeom.cdf(m - x - 1, N, m, N - n);
1985
+ } else if (m < n) {
1986
+ return jStat2.hypgeom.cdf(x, N, n, m);
1987
+ } else {
1988
+ var scaledCDF = 1;
1989
+ var scaledPDF = 1;
1990
+ var samplesDone = 0;
1991
+ for (var i = 0; i < x; i++) {
1992
+ while (scaledCDF > 1 && samplesDone < n) {
1993
+ var factor = 1 - m / (N - samplesDone);
1994
+ scaledPDF *= factor;
1995
+ scaledCDF *= factor;
1996
+ samplesDone++;
1997
+ }
1998
+ scaledPDF *= (n - i) * (m - i) / ((i + 1) * (N - m - n + i + 1));
1999
+ scaledCDF += scaledPDF;
2000
+ }
2001
+ for (; samplesDone < n; samplesDone++) {
2002
+ scaledCDF *= 1 - m / (N - samplesDone);
2003
+ }
2004
+ return Math2.min(1, Math2.max(0, scaledCDF));
2005
+ }
2006
+ }
2007
+ });
2008
+ jStat2.extend(jStat2.poisson, {
2009
+ pdf: function pdf(k, l) {
2010
+ if (l < 0 || k % 1 !== 0 || k < 0) {
2011
+ return 0;
2012
+ }
2013
+ return Math2.pow(l, k) * Math2.exp(-l) / jStat2.factorial(k);
2014
+ },
2015
+ cdf: function cdf(x, l) {
2016
+ var sumarr = [], k = 0;
2017
+ if (x < 0) return 0;
2018
+ for (; k <= x; k++) {
2019
+ sumarr.push(jStat2.poisson.pdf(k, l));
2020
+ }
2021
+ return jStat2.sum(sumarr);
2022
+ },
2023
+ mean: function(l) {
2024
+ return l;
2025
+ },
2026
+ variance: function(l) {
2027
+ return l;
2028
+ },
2029
+ sampleSmall: function sampleSmall(l) {
2030
+ var p = 1, k = 0, L = Math2.exp(-l);
2031
+ do {
2032
+ k++;
2033
+ p *= jStat2._random_fn();
2034
+ } while (p > L);
2035
+ return k - 1;
2036
+ },
2037
+ sampleLarge: function sampleLarge(l) {
2038
+ var lam = l;
2039
+ var k;
2040
+ var U, V, slam, loglam, a, b, invalpha, vr, us;
2041
+ slam = Math2.sqrt(lam);
2042
+ loglam = Math2.log(lam);
2043
+ b = 0.931 + 2.53 * slam;
2044
+ a = -0.059 + 0.02483 * b;
2045
+ invalpha = 1.1239 + 1.1328 / (b - 3.4);
2046
+ vr = 0.9277 - 3.6224 / (b - 2);
2047
+ while (1) {
2048
+ U = Math2.random() - 0.5;
2049
+ V = Math2.random();
2050
+ us = 0.5 - Math2.abs(U);
2051
+ k = Math2.floor((2 * a / us + b) * U + lam + 0.43);
2052
+ if (us >= 0.07 && V <= vr) {
2053
+ return k;
2054
+ }
2055
+ if (k < 0 || us < 0.013 && V > us) {
2056
+ continue;
2057
+ }
2058
+ if (Math2.log(V) + Math2.log(invalpha) - Math2.log(a / (us * us) + b) <= -lam + k * loglam - jStat2.loggam(k + 1)) {
2059
+ return k;
2060
+ }
2061
+ }
2062
+ },
2063
+ sample: function sample(l) {
2064
+ if (l < 10)
2065
+ return this.sampleSmall(l);
2066
+ else
2067
+ return this.sampleLarge(l);
2068
+ }
2069
+ });
2070
+ jStat2.extend(jStat2.triangular, {
2071
+ pdf: function pdf(x, a, b, c) {
2072
+ if (b <= a || c < a || c > b) {
2073
+ return NaN;
2074
+ } else {
2075
+ if (x < a || x > b) {
2076
+ return 0;
2077
+ } else if (x < c) {
2078
+ return 2 * (x - a) / ((b - a) * (c - a));
2079
+ } else if (x === c) {
2080
+ return 2 / (b - a);
2081
+ } else {
2082
+ return 2 * (b - x) / ((b - a) * (b - c));
2083
+ }
2084
+ }
2085
+ },
2086
+ cdf: function cdf(x, a, b, c) {
2087
+ if (b <= a || c < a || c > b)
2088
+ return NaN;
2089
+ if (x <= a)
2090
+ return 0;
2091
+ else if (x >= b)
2092
+ return 1;
2093
+ if (x <= c)
2094
+ return Math2.pow(x - a, 2) / ((b - a) * (c - a));
2095
+ else
2096
+ return 1 - Math2.pow(b - x, 2) / ((b - a) * (b - c));
2097
+ },
2098
+ inv: function inv(p, a, b, c) {
2099
+ if (b <= a || c < a || c > b) {
2100
+ return NaN;
2101
+ } else {
2102
+ if (p <= (c - a) / (b - a)) {
2103
+ return a + (b - a) * Math2.sqrt(p * ((c - a) / (b - a)));
2104
+ } else {
2105
+ return a + (b - a) * (1 - Math2.sqrt((1 - p) * (1 - (c - a) / (b - a))));
2106
+ }
2107
+ }
2108
+ },
2109
+ mean: function mean(a, b, c) {
2110
+ return (a + b + c) / 3;
2111
+ },
2112
+ median: function median(a, b, c) {
2113
+ if (c <= (a + b) / 2) {
2114
+ return b - Math2.sqrt((b - a) * (b - c)) / Math2.sqrt(2);
2115
+ } else if (c > (a + b) / 2) {
2116
+ return a + Math2.sqrt((b - a) * (c - a)) / Math2.sqrt(2);
2117
+ }
2118
+ },
2119
+ mode: function mode(a, b, c) {
2120
+ return c;
2121
+ },
2122
+ sample: function sample(a, b, c) {
2123
+ var u = jStat2._random_fn();
2124
+ if (u < (c - a) / (b - a))
2125
+ return a + Math2.sqrt(u * (b - a) * (c - a));
2126
+ return b - Math2.sqrt((1 - u) * (b - a) * (b - c));
2127
+ },
2128
+ variance: function variance(a, b, c) {
2129
+ return (a * a + b * b + c * c - a * b - a * c - b * c) / 18;
2130
+ }
2131
+ });
2132
+ jStat2.extend(jStat2.arcsine, {
2133
+ pdf: function pdf(x, a, b) {
2134
+ if (b <= a) return NaN;
2135
+ return x <= a || x >= b ? 0 : 2 / Math2.PI * Math2.pow(Math2.pow(b - a, 2) - Math2.pow(2 * x - a - b, 2), -0.5);
2136
+ },
2137
+ cdf: function cdf(x, a, b) {
2138
+ if (x < a)
2139
+ return 0;
2140
+ else if (x < b)
2141
+ return 2 / Math2.PI * Math2.asin(Math2.sqrt((x - a) / (b - a)));
2142
+ return 1;
2143
+ },
2144
+ inv: function(p, a, b) {
2145
+ return a + (0.5 - 0.5 * Math2.cos(Math2.PI * p)) * (b - a);
2146
+ },
2147
+ mean: function mean(a, b) {
2148
+ if (b <= a) return NaN;
2149
+ return (a + b) / 2;
2150
+ },
2151
+ median: function median(a, b) {
2152
+ if (b <= a) return NaN;
2153
+ return (a + b) / 2;
2154
+ },
2155
+ mode: function mode() {
2156
+ throw new Error("mode is not yet implemented");
2157
+ },
2158
+ sample: function sample(a, b) {
2159
+ return (a + b) / 2 + (b - a) / 2 * Math2.sin(2 * Math2.PI * jStat2.uniform.sample(0, 1));
2160
+ },
2161
+ variance: function variance(a, b) {
2162
+ if (b <= a) return NaN;
2163
+ return Math2.pow(b - a, 2) / 8;
2164
+ }
2165
+ });
2166
+ function laplaceSign(x) {
2167
+ return x / Math2.abs(x);
2168
+ }
2169
+ jStat2.extend(jStat2.laplace, {
2170
+ pdf: function pdf(x, mu, b) {
2171
+ return b <= 0 ? 0 : Math2.exp(-Math2.abs(x - mu) / b) / (2 * b);
2172
+ },
2173
+ cdf: function cdf(x, mu, b) {
2174
+ if (b <= 0) {
2175
+ return 0;
2176
+ }
2177
+ if (x < mu) {
2178
+ return 0.5 * Math2.exp((x - mu) / b);
2179
+ } else {
2180
+ return 1 - 0.5 * Math2.exp(-(x - mu) / b);
2181
+ }
2182
+ },
2183
+ mean: function(mu) {
2184
+ return mu;
2185
+ },
2186
+ median: function(mu) {
2187
+ return mu;
2188
+ },
2189
+ mode: function(mu) {
2190
+ return mu;
2191
+ },
2192
+ variance: function(mu, b) {
2193
+ return 2 * b * b;
2194
+ },
2195
+ sample: function sample(mu, b) {
2196
+ var u = jStat2._random_fn() - 0.5;
2197
+ return mu - b * laplaceSign(u) * Math2.log(1 - 2 * Math2.abs(u));
2198
+ }
2199
+ });
2200
+ function tukeyWprob(w, rr, cc) {
2201
+ var nleg = 12;
2202
+ var ihalf = 6;
2203
+ var C1 = -30;
2204
+ var C2 = -50;
2205
+ var C3 = 60;
2206
+ var bb = 8;
2207
+ var wlar = 3;
2208
+ var wincr1 = 2;
2209
+ var wincr2 = 3;
2210
+ var xleg = [
2211
+ 0.9815606342467192,
2212
+ 0.9041172563704749,
2213
+ 0.7699026741943047,
2214
+ 0.5873179542866175,
2215
+ 0.3678314989981802,
2216
+ 0.1252334085114689
2217
+ ];
2218
+ var aleg = [
2219
+ 0.04717533638651183,
2220
+ 0.10693932599531843,
2221
+ 0.16007832854334622,
2222
+ 0.20316742672306592,
2223
+ 0.2334925365383548,
2224
+ 0.24914704581340277
2225
+ ];
2226
+ var qsqz = w * 0.5;
2227
+ if (qsqz >= bb)
2228
+ return 1;
2229
+ var pr_w = 2 * jStat2.normal.cdf(qsqz, 0, 1, 1, 0) - 1;
2230
+ if (pr_w >= Math2.exp(C2 / cc))
2231
+ pr_w = Math2.pow(pr_w, cc);
2232
+ else
2233
+ pr_w = 0;
2234
+ var wincr;
2235
+ if (w > wlar)
2236
+ wincr = wincr1;
2237
+ else
2238
+ wincr = wincr2;
2239
+ var blb = qsqz;
2240
+ var binc = (bb - qsqz) / wincr;
2241
+ var bub = blb + binc;
2242
+ var einsum = 0;
2243
+ var cc1 = cc - 1;
2244
+ for (var wi = 1; wi <= wincr; wi++) {
2245
+ var elsum = 0;
2246
+ var a = 0.5 * (bub + blb);
2247
+ var b = 0.5 * (bub - blb);
2248
+ for (var jj = 1; jj <= nleg; jj++) {
2249
+ var j, xx;
2250
+ if (ihalf < jj) {
2251
+ j = nleg - jj + 1;
2252
+ xx = xleg[j - 1];
2253
+ } else {
2254
+ j = jj;
2255
+ xx = -xleg[j - 1];
2256
+ }
2257
+ var c = b * xx;
2258
+ var ac = a + c;
2259
+ var qexpo = ac * ac;
2260
+ if (qexpo > C3)
2261
+ break;
2262
+ var pplus = 2 * jStat2.normal.cdf(ac, 0, 1, 1, 0);
2263
+ var pminus = 2 * jStat2.normal.cdf(ac, w, 1, 1, 0);
2264
+ var rinsum = pplus * 0.5 - pminus * 0.5;
2265
+ if (rinsum >= Math2.exp(C1 / cc1)) {
2266
+ rinsum = aleg[j - 1] * Math2.exp(-(0.5 * qexpo)) * Math2.pow(rinsum, cc1);
2267
+ elsum += rinsum;
2268
+ }
2269
+ }
2270
+ elsum *= 2 * b * cc / Math2.sqrt(2 * Math2.PI);
2271
+ einsum += elsum;
2272
+ blb = bub;
2273
+ bub += binc;
2274
+ }
2275
+ pr_w += einsum;
2276
+ if (pr_w <= Math2.exp(C1 / rr))
2277
+ return 0;
2278
+ pr_w = Math2.pow(pr_w, rr);
2279
+ if (pr_w >= 1)
2280
+ return 1;
2281
+ return pr_w;
2282
+ }
2283
+ function tukeyQinv(p, c, v) {
2284
+ var p0 = 0.322232421088;
2285
+ var q0 = 0.099348462606;
2286
+ var p1 = -1;
2287
+ var q1 = 0.588581570495;
2288
+ var p2 = -0.342242088547;
2289
+ var q2 = 0.531103462366;
2290
+ var p3 = -0.204231210125;
2291
+ var q3 = 0.10353775285;
2292
+ var p4 = -453642210148e-16;
2293
+ var q4 = 0.0038560700634;
2294
+ var c1 = 0.8832;
2295
+ var c2 = 0.2368;
2296
+ var c4 = 1.208;
2297
+ var c5 = 1.4142;
2298
+ var vmax = 120;
2299
+ var ps = 0.5 - 0.5 * p;
2300
+ var yi = Math2.sqrt(Math2.log(1 / (ps * ps)));
2301
+ var t = yi + ((((yi * p4 + p3) * yi + p2) * yi + p1) * yi + p0) / ((((yi * q4 + q3) * yi + q2) * yi + q1) * yi + q0);
2302
+ if (v < vmax) t += (t * t * t + t) / v / 4;
2303
+ var q = c1 - c2 * t;
2304
+ if (v < vmax) q += -1.214 / v + c4 * t / v;
2305
+ return t * (q * Math2.log(c - 1) + c5);
2306
+ }
2307
+ jStat2.extend(jStat2.tukey, {
2308
+ cdf: function cdf(q, nmeans, df) {
2309
+ var rr = 1;
2310
+ var cc = nmeans;
2311
+ var nlegq = 16;
2312
+ var ihalfq = 8;
2313
+ var eps1 = -30;
2314
+ var eps2 = 1e-14;
2315
+ var dhaf = 100;
2316
+ var dquar = 800;
2317
+ var deigh = 5e3;
2318
+ var dlarg = 25e3;
2319
+ var ulen1 = 1;
2320
+ var ulen2 = 0.5;
2321
+ var ulen3 = 0.25;
2322
+ var ulen4 = 0.125;
2323
+ var xlegq = [
2324
+ 0.9894009349916499,
2325
+ 0.9445750230732326,
2326
+ 0.8656312023878318,
2327
+ 0.755404408355003,
2328
+ 0.6178762444026438,
2329
+ 0.45801677765722737,
2330
+ 0.2816035507792589,
2331
+ 0.09501250983763744
2332
+ ];
2333
+ var alegq = [
2334
+ 0.027152459411754096,
2335
+ 0.062253523938647894,
2336
+ 0.09515851168249279,
2337
+ 0.12462897125553388,
2338
+ 0.14959598881657674,
2339
+ 0.16915651939500254,
2340
+ 0.18260341504492358,
2341
+ 0.1894506104550685
2342
+ ];
2343
+ if (q <= 0)
2344
+ return 0;
2345
+ if (df < 2 || rr < 1 || cc < 2) return NaN;
2346
+ if (!Number.isFinite(q))
2347
+ return 1;
2348
+ if (df > dlarg)
2349
+ return tukeyWprob(q, rr, cc);
2350
+ var f2 = df * 0.5;
2351
+ var f2lf = f2 * Math2.log(df) - df * Math2.log(2) - jStat2.gammaln(f2);
2352
+ var f21 = f2 - 1;
2353
+ var ff4 = df * 0.25;
2354
+ var ulen;
2355
+ if (df <= dhaf) ulen = ulen1;
2356
+ else if (df <= dquar) ulen = ulen2;
2357
+ else if (df <= deigh) ulen = ulen3;
2358
+ else ulen = ulen4;
2359
+ f2lf += Math2.log(ulen);
2360
+ var ans = 0;
2361
+ for (var i = 1; i <= 50; i++) {
2362
+ var otsum = 0;
2363
+ var twa1 = (2 * i - 1) * ulen;
2364
+ for (var jj = 1; jj <= nlegq; jj++) {
2365
+ var j, t1;
2366
+ if (ihalfq < jj) {
2367
+ j = jj - ihalfq - 1;
2368
+ t1 = f2lf + f21 * Math2.log(twa1 + xlegq[j] * ulen) - (xlegq[j] * ulen + twa1) * ff4;
2369
+ } else {
2370
+ j = jj - 1;
2371
+ t1 = f2lf + f21 * Math2.log(twa1 - xlegq[j] * ulen) + (xlegq[j] * ulen - twa1) * ff4;
2372
+ }
2373
+ var qsqz;
2374
+ if (t1 >= eps1) {
2375
+ if (ihalfq < jj) {
2376
+ qsqz = q * Math2.sqrt((xlegq[j] * ulen + twa1) * 0.5);
2377
+ } else {
2378
+ qsqz = q * Math2.sqrt((-(xlegq[j] * ulen) + twa1) * 0.5);
2379
+ }
2380
+ var wprb = tukeyWprob(qsqz, rr, cc);
2381
+ var rotsum = wprb * alegq[j] * Math2.exp(t1);
2382
+ otsum += rotsum;
2383
+ }
2384
+ }
2385
+ if (i * ulen >= 1 && otsum <= eps2)
2386
+ break;
2387
+ ans += otsum;
2388
+ }
2389
+ if (otsum > eps2) {
2390
+ throw new Error("tukey.cdf failed to converge");
2391
+ }
2392
+ if (ans > 1)
2393
+ ans = 1;
2394
+ return ans;
2395
+ },
2396
+ inv: function(p, nmeans, df) {
2397
+ var rr = 1;
2398
+ var cc = nmeans;
2399
+ var eps = 1e-4;
2400
+ var maxiter = 50;
2401
+ if (df < 2 || rr < 1 || cc < 2) return NaN;
2402
+ if (p < 0 || p > 1) return NaN;
2403
+ if (p === 0) return 0;
2404
+ if (p === 1) return Infinity;
2405
+ var x0 = tukeyQinv(p, cc, df);
2406
+ var valx0 = jStat2.tukey.cdf(x0, nmeans, df) - p;
2407
+ var x1;
2408
+ if (valx0 > 0)
2409
+ x1 = Math2.max(0, x0 - 1);
2410
+ else
2411
+ x1 = x0 + 1;
2412
+ var valx1 = jStat2.tukey.cdf(x1, nmeans, df) - p;
2413
+ var ans;
2414
+ for (var iter = 1; iter < maxiter; iter++) {
2415
+ ans = x1 - valx1 * (x1 - x0) / (valx1 - valx0);
2416
+ valx0 = valx1;
2417
+ x0 = x1;
2418
+ if (ans < 0) {
2419
+ ans = 0;
2420
+ valx1 = -p;
2421
+ }
2422
+ valx1 = jStat2.tukey.cdf(ans, nmeans, df) - p;
2423
+ x1 = ans;
2424
+ var xabs = Math2.abs(x1 - x0);
2425
+ if (xabs < eps)
2426
+ return ans;
2427
+ }
2428
+ throw new Error("tukey.inv failed to converge");
2429
+ }
2430
+ });
2431
+ })(jStat, Math);
2432
+ (function(jStat2, Math2) {
2433
+ var push = Array.prototype.push;
2434
+ var isArray = jStat2.utils.isArray;
2435
+ function isUsable(arg) {
2436
+ return isArray(arg) || arg instanceof jStat2;
2437
+ }
2438
+ jStat2.extend({
2439
+ // add a vector/matrix to a vector/matrix or scalar
2440
+ add: function add(arr, arg) {
2441
+ if (isUsable(arg)) {
2442
+ if (!isUsable(arg[0])) arg = [arg];
2443
+ return jStat2.map(arr, function(value, row, col) {
2444
+ return value + arg[row][col];
2445
+ });
2446
+ }
2447
+ return jStat2.map(arr, function(value) {
2448
+ return value + arg;
2449
+ });
2450
+ },
2451
+ // subtract a vector or scalar from the vector
2452
+ subtract: function subtract(arr, arg) {
2453
+ if (isUsable(arg)) {
2454
+ if (!isUsable(arg[0])) arg = [arg];
2455
+ return jStat2.map(arr, function(value, row, col) {
2456
+ return value - arg[row][col] || 0;
2457
+ });
2458
+ }
2459
+ return jStat2.map(arr, function(value) {
2460
+ return value - arg;
2461
+ });
2462
+ },
2463
+ // matrix division
2464
+ divide: function divide(arr, arg) {
2465
+ if (isUsable(arg)) {
2466
+ if (!isUsable(arg[0])) arg = [arg];
2467
+ return jStat2.multiply(arr, jStat2.inv(arg));
2468
+ }
2469
+ return jStat2.map(arr, function(value) {
2470
+ return value / arg;
2471
+ });
2472
+ },
2473
+ // matrix multiplication
2474
+ multiply: function multiply(arr, arg) {
2475
+ var row, col, nrescols, sum, nrow, ncol, res, rescols;
2476
+ if (arr.length === void 0 && arg.length === void 0) {
2477
+ return arr * arg;
2478
+ }
2479
+ nrow = arr.length, ncol = arr[0].length, res = jStat2.zeros(nrow, nrescols = isUsable(arg) ? arg[0].length : ncol), rescols = 0;
2480
+ if (isUsable(arg)) {
2481
+ for (; rescols < nrescols; rescols++) {
2482
+ for (row = 0; row < nrow; row++) {
2483
+ sum = 0;
2484
+ for (col = 0; col < ncol; col++)
2485
+ sum += arr[row][col] * arg[col][rescols];
2486
+ res[row][rescols] = sum;
2487
+ }
2488
+ }
2489
+ return nrow === 1 && rescols === 1 ? res[0][0] : res;
2490
+ }
2491
+ return jStat2.map(arr, function(value) {
2492
+ return value * arg;
2493
+ });
2494
+ },
2495
+ // outer([1,2,3],[4,5,6])
2496
+ // ===
2497
+ // [[1],[2],[3]] times [[4,5,6]]
2498
+ // ->
2499
+ // [[4,5,6],[8,10,12],[12,15,18]]
2500
+ outer: function outer(A, B) {
2501
+ return jStat2.multiply(A.map(function(t) {
2502
+ return [t];
2503
+ }), [B]);
2504
+ },
2505
+ // Returns the dot product of two matricies
2506
+ dot: function dot(arr, arg) {
2507
+ if (!isUsable(arr[0])) arr = [arr];
2508
+ if (!isUsable(arg[0])) arg = [arg];
2509
+ var left = arr[0].length === 1 && arr.length !== 1 ? jStat2.transpose(arr) : arr, right = arg[0].length === 1 && arg.length !== 1 ? jStat2.transpose(arg) : arg, res = [], row = 0, nrow = left.length, ncol = left[0].length, sum, col;
2510
+ for (; row < nrow; row++) {
2511
+ res[row] = [];
2512
+ sum = 0;
2513
+ for (col = 0; col < ncol; col++)
2514
+ sum += left[row][col] * right[row][col];
2515
+ res[row] = sum;
2516
+ }
2517
+ return res.length === 1 ? res[0] : res;
2518
+ },
2519
+ // raise every element by a scalar
2520
+ pow: function pow(arr, arg) {
2521
+ return jStat2.map(arr, function(value) {
2522
+ return Math2.pow(value, arg);
2523
+ });
2524
+ },
2525
+ // exponentiate every element
2526
+ exp: function exp(arr) {
2527
+ return jStat2.map(arr, function(value) {
2528
+ return Math2.exp(value);
2529
+ });
2530
+ },
2531
+ // generate the natural log of every element
2532
+ log: function exp(arr) {
2533
+ return jStat2.map(arr, function(value) {
2534
+ return Math2.log(value);
2535
+ });
2536
+ },
2537
+ // generate the absolute values of the vector
2538
+ abs: function abs(arr) {
2539
+ return jStat2.map(arr, function(value) {
2540
+ return Math2.abs(value);
2541
+ });
2542
+ },
2543
+ // computes the p-norm of the vector
2544
+ // In the case that a matrix is passed, uses the first row as the vector
2545
+ norm: function norm(arr, p) {
2546
+ var nnorm = 0, i = 0;
2547
+ if (isNaN(p)) p = 2;
2548
+ if (isUsable(arr[0])) arr = arr[0];
2549
+ for (; i < arr.length; i++) {
2550
+ nnorm += Math2.pow(Math2.abs(arr[i]), p);
2551
+ }
2552
+ return Math2.pow(nnorm, 1 / p);
2553
+ },
2554
+ // computes the angle between two vectors in rads
2555
+ // In case a matrix is passed, this uses the first row as the vector
2556
+ angle: function angle(arr, arg) {
2557
+ return Math2.acos(jStat2.dot(arr, arg) / (jStat2.norm(arr) * jStat2.norm(arg)));
2558
+ },
2559
+ // augment one matrix by another
2560
+ // Note: this function returns a matrix, not a jStat object
2561
+ aug: function aug(a, b) {
2562
+ var newarr = [];
2563
+ var i;
2564
+ for (i = 0; i < a.length; i++) {
2565
+ newarr.push(a[i].slice());
2566
+ }
2567
+ for (i = 0; i < newarr.length; i++) {
2568
+ push.apply(newarr[i], b[i]);
2569
+ }
2570
+ return newarr;
2571
+ },
2572
+ // The inv() function calculates the inverse of a matrix
2573
+ // Create the inverse by augmenting the matrix by the identity matrix of the
2574
+ // appropriate size, and then use G-J elimination on the augmented matrix.
2575
+ inv: function inv(a) {
2576
+ var rows = a.length;
2577
+ var cols = a[0].length;
2578
+ var b = jStat2.identity(rows, cols);
2579
+ var c = jStat2.gauss_jordan(a, b);
2580
+ var result = [];
2581
+ var i = 0;
2582
+ var j;
2583
+ for (; i < rows; i++) {
2584
+ result[i] = [];
2585
+ for (j = cols; j < c[0].length; j++)
2586
+ result[i][j - cols] = c[i][j];
2587
+ }
2588
+ return result;
2589
+ },
2590
+ // calculate the determinant of a matrix
2591
+ det: function det(a) {
2592
+ if (a.length === 2) {
2593
+ return a[0][0] * a[1][1] - a[0][1] * a[1][0];
2594
+ }
2595
+ var determinant = 0;
2596
+ for (var i = 0; i < a.length; i++) {
2597
+ var submatrix = [];
2598
+ for (var row = 1; row < a.length; row++) {
2599
+ submatrix[row - 1] = [];
2600
+ for (var col = 0; col < a.length; col++) {
2601
+ if (col < i) {
2602
+ submatrix[row - 1][col] = a[row][col];
2603
+ } else if (col > i) {
2604
+ submatrix[row - 1][col - 1] = a[row][col];
2605
+ }
2606
+ }
2607
+ }
2608
+ var sign = i % 2 ? -1 : 1;
2609
+ determinant += det(submatrix) * a[0][i] * sign;
2610
+ }
2611
+ return determinant;
2612
+ },
2613
+ gauss_elimination: function gauss_elimination(a, b) {
2614
+ var i = 0, j = 0, n = a.length, m = a[0].length, factor = 1, sum = 0, x = [], maug, pivot, temp, k;
2615
+ a = jStat2.aug(a, b);
2616
+ maug = a[0].length;
2617
+ for (i = 0; i < n; i++) {
2618
+ pivot = a[i][i];
2619
+ j = i;
2620
+ for (k = i + 1; k < m; k++) {
2621
+ if (pivot < Math2.abs(a[k][i])) {
2622
+ pivot = a[k][i];
2623
+ j = k;
2624
+ }
2625
+ }
2626
+ if (j != i) {
2627
+ for (k = 0; k < maug; k++) {
2628
+ temp = a[i][k];
2629
+ a[i][k] = a[j][k];
2630
+ a[j][k] = temp;
2631
+ }
2632
+ }
2633
+ for (j = i + 1; j < n; j++) {
2634
+ factor = a[j][i] / a[i][i];
2635
+ for (k = i; k < maug; k++) {
2636
+ a[j][k] = a[j][k] - factor * a[i][k];
2637
+ }
2638
+ }
2639
+ }
2640
+ for (i = n - 1; i >= 0; i--) {
2641
+ sum = 0;
2642
+ for (j = i + 1; j <= n - 1; j++) {
2643
+ sum = sum + x[j] * a[i][j];
2644
+ }
2645
+ x[i] = (a[i][maug - 1] - sum) / a[i][i];
2646
+ }
2647
+ return x;
2648
+ },
2649
+ gauss_jordan: function gauss_jordan(a, b) {
2650
+ var m = jStat2.aug(a, b);
2651
+ var h = m.length;
2652
+ var w = m[0].length;
2653
+ var c = 0;
2654
+ var x, y, y2;
2655
+ for (y = 0; y < h; y++) {
2656
+ var maxrow = y;
2657
+ for (y2 = y + 1; y2 < h; y2++) {
2658
+ if (Math2.abs(m[y2][y]) > Math2.abs(m[maxrow][y]))
2659
+ maxrow = y2;
2660
+ }
2661
+ var tmp = m[y];
2662
+ m[y] = m[maxrow];
2663
+ m[maxrow] = tmp;
2664
+ for (y2 = y + 1; y2 < h; y2++) {
2665
+ c = m[y2][y] / m[y][y];
2666
+ for (x = y; x < w; x++) {
2667
+ m[y2][x] -= m[y][x] * c;
2668
+ }
2669
+ }
2670
+ }
2671
+ for (y = h - 1; y >= 0; y--) {
2672
+ c = m[y][y];
2673
+ for (y2 = 0; y2 < y; y2++) {
2674
+ for (x = w - 1; x > y - 1; x--) {
2675
+ m[y2][x] -= m[y][x] * m[y2][y] / c;
2676
+ }
2677
+ }
2678
+ m[y][y] /= c;
2679
+ for (x = h; x < w; x++) {
2680
+ m[y][x] /= c;
2681
+ }
2682
+ }
2683
+ return m;
2684
+ },
2685
+ // solve equation
2686
+ // Ax=b
2687
+ // A is upper triangular matrix
2688
+ // A=[[1,2,3],[0,4,5],[0,6,7]]
2689
+ // b=[1,2,3]
2690
+ // triaUpSolve(A,b) // -> [2.666,0.1666,1.666]
2691
+ // if you use matrix style
2692
+ // A=[[1,2,3],[0,4,5],[0,6,7]]
2693
+ // b=[[1],[2],[3]]
2694
+ // will return [[2.666],[0.1666],[1.666]]
2695
+ triaUpSolve: function triaUpSolve(A, b) {
2696
+ var size = A[0].length;
2697
+ var x = jStat2.zeros(1, size)[0];
2698
+ var parts;
2699
+ var matrix_mode = false;
2700
+ if (b[0].length != void 0) {
2701
+ b = b.map(function(i) {
2702
+ return i[0];
2703
+ });
2704
+ matrix_mode = true;
2705
+ }
2706
+ jStat2.arange(size - 1, -1, -1).forEach(function(i) {
2707
+ parts = jStat2.arange(i + 1, size).map(function(j) {
2708
+ return x[j] * A[i][j];
2709
+ });
2710
+ x[i] = (b[i] - jStat2.sum(parts)) / A[i][i];
2711
+ });
2712
+ if (matrix_mode)
2713
+ return x.map(function(i) {
2714
+ return [i];
2715
+ });
2716
+ return x;
2717
+ },
2718
+ triaLowSolve: function triaLowSolve(A, b) {
2719
+ var size = A[0].length;
2720
+ var x = jStat2.zeros(1, size)[0];
2721
+ var parts;
2722
+ var matrix_mode = false;
2723
+ if (b[0].length != void 0) {
2724
+ b = b.map(function(i) {
2725
+ return i[0];
2726
+ });
2727
+ matrix_mode = true;
2728
+ }
2729
+ jStat2.arange(size).forEach(function(i) {
2730
+ parts = jStat2.arange(i).map(function(j) {
2731
+ return A[i][j] * x[j];
2732
+ });
2733
+ x[i] = (b[i] - jStat2.sum(parts)) / A[i][i];
2734
+ });
2735
+ if (matrix_mode)
2736
+ return x.map(function(i) {
2737
+ return [i];
2738
+ });
2739
+ return x;
2740
+ },
2741
+ // A -> [L,U]
2742
+ // A=LU
2743
+ // L is lower triangular matrix
2744
+ // U is upper triangular matrix
2745
+ lu: function lu(A) {
2746
+ var size = A.length;
2747
+ var L = jStat2.identity(size);
2748
+ var R = jStat2.zeros(A.length, A[0].length);
2749
+ var parts;
2750
+ jStat2.arange(size).forEach(function(t) {
2751
+ R[0][t] = A[0][t];
2752
+ });
2753
+ jStat2.arange(1, size).forEach(function(l) {
2754
+ jStat2.arange(l).forEach(function(i) {
2755
+ parts = jStat2.arange(i).map(function(jj) {
2756
+ return L[l][jj] * R[jj][i];
2757
+ });
2758
+ L[l][i] = (A[l][i] - jStat2.sum(parts)) / R[i][i];
2759
+ });
2760
+ jStat2.arange(l, size).forEach(function(j) {
2761
+ parts = jStat2.arange(l).map(function(jj) {
2762
+ return L[l][jj] * R[jj][j];
2763
+ });
2764
+ R[l][j] = A[parts.length][j] - jStat2.sum(parts);
2765
+ });
2766
+ });
2767
+ return [L, R];
2768
+ },
2769
+ // A -> T
2770
+ // A=TT'
2771
+ // T is lower triangular matrix
2772
+ cholesky: function cholesky(A) {
2773
+ var size = A.length;
2774
+ var T = jStat2.zeros(A.length, A[0].length);
2775
+ var parts;
2776
+ jStat2.arange(size).forEach(function(i) {
2777
+ parts = jStat2.arange(i).map(function(t) {
2778
+ return Math2.pow(T[i][t], 2);
2779
+ });
2780
+ T[i][i] = Math2.sqrt(A[i][i] - jStat2.sum(parts));
2781
+ jStat2.arange(i + 1, size).forEach(function(j) {
2782
+ parts = jStat2.arange(i).map(function(t) {
2783
+ return T[i][t] * T[j][t];
2784
+ });
2785
+ T[j][i] = (A[i][j] - jStat2.sum(parts)) / T[i][i];
2786
+ });
2787
+ });
2788
+ return T;
2789
+ },
2790
+ gauss_jacobi: function gauss_jacobi(a, b, x, r) {
2791
+ var i = 0;
2792
+ var j = 0;
2793
+ var n = a.length;
2794
+ var l = [];
2795
+ var u = [];
2796
+ var d = [];
2797
+ var xv, c, h, xk;
2798
+ for (; i < n; i++) {
2799
+ l[i] = [];
2800
+ u[i] = [];
2801
+ d[i] = [];
2802
+ for (j = 0; j < n; j++) {
2803
+ if (i > j) {
2804
+ l[i][j] = a[i][j];
2805
+ u[i][j] = d[i][j] = 0;
2806
+ } else if (i < j) {
2807
+ u[i][j] = a[i][j];
2808
+ l[i][j] = d[i][j] = 0;
2809
+ } else {
2810
+ d[i][j] = a[i][j];
2811
+ l[i][j] = u[i][j] = 0;
2812
+ }
2813
+ }
2814
+ }
2815
+ h = jStat2.multiply(jStat2.multiply(jStat2.inv(d), jStat2.add(l, u)), -1);
2816
+ c = jStat2.multiply(jStat2.inv(d), b);
2817
+ xv = x;
2818
+ xk = jStat2.add(jStat2.multiply(h, x), c);
2819
+ i = 2;
2820
+ while (Math2.abs(jStat2.norm(jStat2.subtract(xk, xv))) > r) {
2821
+ xv = xk;
2822
+ xk = jStat2.add(jStat2.multiply(h, xv), c);
2823
+ i++;
2824
+ }
2825
+ return xk;
2826
+ },
2827
+ gauss_seidel: function gauss_seidel(a, b, x, r) {
2828
+ var i = 0;
2829
+ var n = a.length;
2830
+ var l = [];
2831
+ var u = [];
2832
+ var d = [];
2833
+ var j, xv, c, h, xk;
2834
+ for (; i < n; i++) {
2835
+ l[i] = [];
2836
+ u[i] = [];
2837
+ d[i] = [];
2838
+ for (j = 0; j < n; j++) {
2839
+ if (i > j) {
2840
+ l[i][j] = a[i][j];
2841
+ u[i][j] = d[i][j] = 0;
2842
+ } else if (i < j) {
2843
+ u[i][j] = a[i][j];
2844
+ l[i][j] = d[i][j] = 0;
2845
+ } else {
2846
+ d[i][j] = a[i][j];
2847
+ l[i][j] = u[i][j] = 0;
2848
+ }
2849
+ }
2850
+ }
2851
+ h = jStat2.multiply(jStat2.multiply(jStat2.inv(jStat2.add(d, l)), u), -1);
2852
+ c = jStat2.multiply(jStat2.inv(jStat2.add(d, l)), b);
2853
+ xv = x;
2854
+ xk = jStat2.add(jStat2.multiply(h, x), c);
2855
+ i = 2;
2856
+ while (Math2.abs(jStat2.norm(jStat2.subtract(xk, xv))) > r) {
2857
+ xv = xk;
2858
+ xk = jStat2.add(jStat2.multiply(h, xv), c);
2859
+ i = i + 1;
2860
+ }
2861
+ return xk;
2862
+ },
2863
+ SOR: function SOR(a, b, x, r, w) {
2864
+ var i = 0;
2865
+ var n = a.length;
2866
+ var l = [];
2867
+ var u = [];
2868
+ var d = [];
2869
+ var j, xv, c, h, xk;
2870
+ for (; i < n; i++) {
2871
+ l[i] = [];
2872
+ u[i] = [];
2873
+ d[i] = [];
2874
+ for (j = 0; j < n; j++) {
2875
+ if (i > j) {
2876
+ l[i][j] = a[i][j];
2877
+ u[i][j] = d[i][j] = 0;
2878
+ } else if (i < j) {
2879
+ u[i][j] = a[i][j];
2880
+ l[i][j] = d[i][j] = 0;
2881
+ } else {
2882
+ d[i][j] = a[i][j];
2883
+ l[i][j] = u[i][j] = 0;
2884
+ }
2885
+ }
2886
+ }
2887
+ h = jStat2.multiply(
2888
+ jStat2.inv(jStat2.add(d, jStat2.multiply(l, w))),
2889
+ jStat2.subtract(
2890
+ jStat2.multiply(d, 1 - w),
2891
+ jStat2.multiply(u, w)
2892
+ )
2893
+ );
2894
+ c = jStat2.multiply(jStat2.multiply(jStat2.inv(jStat2.add(
2895
+ d,
2896
+ jStat2.multiply(l, w)
2897
+ )), b), w);
2898
+ xv = x;
2899
+ xk = jStat2.add(jStat2.multiply(h, x), c);
2900
+ i = 2;
2901
+ while (Math2.abs(jStat2.norm(jStat2.subtract(xk, xv))) > r) {
2902
+ xv = xk;
2903
+ xk = jStat2.add(jStat2.multiply(h, xv), c);
2904
+ i++;
2905
+ }
2906
+ return xk;
2907
+ },
2908
+ householder: function householder(a) {
2909
+ var m = a.length;
2910
+ var n = a[0].length;
2911
+ var i = 0;
2912
+ var w = [];
2913
+ var p = [];
2914
+ var alpha, r, k, j, factor;
2915
+ for (; i < m - 1; i++) {
2916
+ alpha = 0;
2917
+ for (j = i + 1; j < n; j++)
2918
+ alpha += a[j][i] * a[j][i];
2919
+ factor = a[i + 1][i] > 0 ? -1 : 1;
2920
+ alpha = factor * Math2.sqrt(alpha);
2921
+ r = Math2.sqrt((alpha * alpha - a[i + 1][i] * alpha) / 2);
2922
+ w = jStat2.zeros(m, 1);
2923
+ w[i + 1][0] = (a[i + 1][i] - alpha) / (2 * r);
2924
+ for (k = i + 2; k < m; k++) w[k][0] = a[k][i] / (2 * r);
2925
+ p = jStat2.subtract(
2926
+ jStat2.identity(m, n),
2927
+ jStat2.multiply(jStat2.multiply(w, jStat2.transpose(w)), 2)
2928
+ );
2929
+ a = jStat2.multiply(p, jStat2.multiply(a, p));
2930
+ }
2931
+ return a;
2932
+ },
2933
+ // A -> [Q,R]
2934
+ // Q is orthogonal matrix
2935
+ // R is upper triangular
2936
+ QR: function() {
2937
+ var sum = jStat2.sum;
2938
+ var range = jStat2.arange;
2939
+ function qr2(x) {
2940
+ var n = x.length;
2941
+ var p = x[0].length;
2942
+ var r = jStat2.zeros(p, p);
2943
+ x = jStat2.copy(x);
2944
+ var i, j, k;
2945
+ for (j = 0; j < p; j++) {
2946
+ r[j][j] = Math2.sqrt(sum(range(n).map(function(i2) {
2947
+ return x[i2][j] * x[i2][j];
2948
+ })));
2949
+ for (i = 0; i < n; i++) {
2950
+ x[i][j] = x[i][j] / r[j][j];
2951
+ }
2952
+ for (k = j + 1; k < p; k++) {
2953
+ r[j][k] = sum(range(n).map(function(i2) {
2954
+ return x[i2][j] * x[i2][k];
2955
+ }));
2956
+ for (i = 0; i < n; i++) {
2957
+ x[i][k] = x[i][k] - x[i][j] * r[j][k];
2958
+ }
2959
+ }
2960
+ }
2961
+ return [x, r];
2962
+ }
2963
+ return qr2;
2964
+ }(),
2965
+ lstsq: /* @__PURE__ */ function() {
2966
+ function R_I(A) {
2967
+ A = jStat2.copy(A);
2968
+ var size = A.length;
2969
+ var I = jStat2.identity(size);
2970
+ jStat2.arange(size - 1, -1, -1).forEach(function(i) {
2971
+ jStat2.sliceAssign(
2972
+ I,
2973
+ { row: i },
2974
+ jStat2.divide(jStat2.slice(I, { row: i }), A[i][i])
2975
+ );
2976
+ jStat2.sliceAssign(
2977
+ A,
2978
+ { row: i },
2979
+ jStat2.divide(jStat2.slice(A, { row: i }), A[i][i])
2980
+ );
2981
+ jStat2.arange(i).forEach(function(j) {
2982
+ var c = jStat2.multiply(A[j][i], -1);
2983
+ var Aj = jStat2.slice(A, { row: j });
2984
+ var cAi = jStat2.multiply(jStat2.slice(A, { row: i }), c);
2985
+ jStat2.sliceAssign(A, { row: j }, jStat2.add(Aj, cAi));
2986
+ var Ij = jStat2.slice(I, { row: j });
2987
+ var cIi = jStat2.multiply(jStat2.slice(I, { row: i }), c);
2988
+ jStat2.sliceAssign(I, { row: j }, jStat2.add(Ij, cIi));
2989
+ });
2990
+ });
2991
+ return I;
2992
+ }
2993
+ function qr_solve(A, b) {
2994
+ var array_mode = false;
2995
+ if (b[0].length === void 0) {
2996
+ b = b.map(function(x2) {
2997
+ return [x2];
2998
+ });
2999
+ array_mode = true;
3000
+ }
3001
+ var QR = jStat2.QR(A);
3002
+ var Q = QR[0];
3003
+ var R = QR[1];
3004
+ var attrs = A[0].length;
3005
+ var Q1 = jStat2.slice(Q, { col: { end: attrs } });
3006
+ var R1 = jStat2.slice(R, { row: { end: attrs } });
3007
+ var RI = R_I(R1);
3008
+ var Q2 = jStat2.transpose(Q1);
3009
+ if (Q2[0].length === void 0) {
3010
+ Q2 = [Q2];
3011
+ }
3012
+ var x = jStat2.multiply(jStat2.multiply(RI, Q2), b);
3013
+ if (x.length === void 0) {
3014
+ x = [[x]];
3015
+ }
3016
+ if (array_mode)
3017
+ return x.map(function(i) {
3018
+ return i[0];
3019
+ });
3020
+ return x;
3021
+ }
3022
+ return qr_solve;
3023
+ }(),
3024
+ jacobi: function jacobi(a) {
3025
+ var condition = 1;
3026
+ var n = a.length;
3027
+ var e = jStat2.identity(n, n);
3028
+ var ev = [];
3029
+ var b, i, j, p, q, maxim, theta, s;
3030
+ while (condition === 1) {
3031
+ maxim = a[0][1];
3032
+ p = 0;
3033
+ q = 1;
3034
+ for (i = 0; i < n; i++) {
3035
+ for (j = 0; j < n; j++) {
3036
+ if (i != j) {
3037
+ if (maxim < Math2.abs(a[i][j])) {
3038
+ maxim = Math2.abs(a[i][j]);
3039
+ p = i;
3040
+ q = j;
3041
+ }
3042
+ }
3043
+ }
3044
+ }
3045
+ if (a[p][p] === a[q][q])
3046
+ theta = a[p][q] > 0 ? Math2.PI / 4 : -Math2.PI / 4;
3047
+ else
3048
+ theta = Math2.atan(2 * a[p][q] / (a[p][p] - a[q][q])) / 2;
3049
+ s = jStat2.identity(n, n);
3050
+ s[p][p] = Math2.cos(theta);
3051
+ s[p][q] = -Math2.sin(theta);
3052
+ s[q][p] = Math2.sin(theta);
3053
+ s[q][q] = Math2.cos(theta);
3054
+ e = jStat2.multiply(e, s);
3055
+ b = jStat2.multiply(jStat2.multiply(jStat2.inv(s), a), s);
3056
+ a = b;
3057
+ condition = 0;
3058
+ for (i = 1; i < n; i++) {
3059
+ for (j = 1; j < n; j++) {
3060
+ if (i != j && Math2.abs(a[i][j]) > 1e-3) {
3061
+ condition = 1;
3062
+ }
3063
+ }
3064
+ }
3065
+ }
3066
+ for (i = 0; i < n; i++) ev.push(a[i][i]);
3067
+ return [e, ev];
3068
+ },
3069
+ rungekutta: function rungekutta(f, h, p, t_j, u_j, order) {
3070
+ var k1, k2, u_j1, k3, k4;
3071
+ if (order === 2) {
3072
+ while (t_j <= p) {
3073
+ k1 = h * f(t_j, u_j);
3074
+ k2 = h * f(t_j + h, u_j + k1);
3075
+ u_j1 = u_j + (k1 + k2) / 2;
3076
+ u_j = u_j1;
3077
+ t_j = t_j + h;
3078
+ }
3079
+ }
3080
+ if (order === 4) {
3081
+ while (t_j <= p) {
3082
+ k1 = h * f(t_j, u_j);
3083
+ k2 = h * f(t_j + h / 2, u_j + k1 / 2);
3084
+ k3 = h * f(t_j + h / 2, u_j + k2 / 2);
3085
+ k4 = h * f(t_j + h, u_j + k3);
3086
+ u_j1 = u_j + (k1 + 2 * k2 + 2 * k3 + k4) / 6;
3087
+ u_j = u_j1;
3088
+ t_j = t_j + h;
3089
+ }
3090
+ }
3091
+ return u_j;
3092
+ },
3093
+ romberg: function romberg(f, a, b, order) {
3094
+ var i = 0;
3095
+ var h = (b - a) / 2;
3096
+ var x = [];
3097
+ var h1 = [];
3098
+ var g = [];
3099
+ var m, a1, j, k, I;
3100
+ while (i < order / 2) {
3101
+ I = f(a);
3102
+ for (j = a, k = 0; j <= b; j = j + h, k++) x[k] = j;
3103
+ m = x.length;
3104
+ for (j = 1; j < m - 1; j++) {
3105
+ I += (j % 2 !== 0 ? 4 : 2) * f(x[j]);
3106
+ }
3107
+ I = h / 3 * (I + f(b));
3108
+ g[i] = I;
3109
+ h /= 2;
3110
+ i++;
3111
+ }
3112
+ a1 = g.length;
3113
+ m = 1;
3114
+ while (a1 !== 1) {
3115
+ for (j = 0; j < a1 - 1; j++)
3116
+ h1[j] = (Math2.pow(4, m) * g[j + 1] - g[j]) / (Math2.pow(4, m) - 1);
3117
+ a1 = h1.length;
3118
+ g = h1;
3119
+ h1 = [];
3120
+ m++;
3121
+ }
3122
+ return g;
3123
+ },
3124
+ richardson: function richardson(X, f, x, h) {
3125
+ function pos(X2, x2) {
3126
+ var i2 = 0;
3127
+ var n = X2.length;
3128
+ var p;
3129
+ for (; i2 < n; i2++)
3130
+ if (X2[i2] === x2) p = i2;
3131
+ return p;
3132
+ }
3133
+ var h_min = Math2.abs(x - X[pos(X, x) + 1]);
3134
+ var i = 0;
3135
+ var g = [];
3136
+ var h1 = [];
3137
+ var y1, y2, m, a, j;
3138
+ while (h >= h_min) {
3139
+ y1 = pos(X, x + h);
3140
+ y2 = pos(X, x);
3141
+ g[i] = (f[y1] - 2 * f[y2] + f[2 * y2 - y1]) / (h * h);
3142
+ h /= 2;
3143
+ i++;
3144
+ }
3145
+ a = g.length;
3146
+ m = 1;
3147
+ while (a != 1) {
3148
+ for (j = 0; j < a - 1; j++)
3149
+ h1[j] = (Math2.pow(4, m) * g[j + 1] - g[j]) / (Math2.pow(4, m) - 1);
3150
+ a = h1.length;
3151
+ g = h1;
3152
+ h1 = [];
3153
+ m++;
3154
+ }
3155
+ return g;
3156
+ },
3157
+ simpson: function simpson(f, a, b, n) {
3158
+ var h = (b - a) / n;
3159
+ var I = f(a);
3160
+ var x = [];
3161
+ var j = a;
3162
+ var k = 0;
3163
+ var i = 1;
3164
+ var m;
3165
+ for (; j <= b; j = j + h, k++)
3166
+ x[k] = j;
3167
+ m = x.length;
3168
+ for (; i < m - 1; i++) {
3169
+ I += (i % 2 !== 0 ? 4 : 2) * f(x[i]);
3170
+ }
3171
+ return h / 3 * (I + f(b));
3172
+ },
3173
+ hermite: function hermite(X, F, dF, value) {
3174
+ var n = X.length;
3175
+ var p = 0;
3176
+ var i = 0;
3177
+ var l = [];
3178
+ var dl = [];
3179
+ var A = [];
3180
+ var B = [];
3181
+ var j;
3182
+ for (; i < n; i++) {
3183
+ l[i] = 1;
3184
+ for (j = 0; j < n; j++) {
3185
+ if (i != j) l[i] *= (value - X[j]) / (X[i] - X[j]);
3186
+ }
3187
+ dl[i] = 0;
3188
+ for (j = 0; j < n; j++) {
3189
+ if (i != j) dl[i] += 1 / (X[i] - X[j]);
3190
+ }
3191
+ A[i] = (1 - 2 * (value - X[i]) * dl[i]) * (l[i] * l[i]);
3192
+ B[i] = (value - X[i]) * (l[i] * l[i]);
3193
+ p += A[i] * F[i] + B[i] * dF[i];
3194
+ }
3195
+ return p;
3196
+ },
3197
+ lagrange: function lagrange(X, F, value) {
3198
+ var p = 0;
3199
+ var i = 0;
3200
+ var j, l;
3201
+ var n = X.length;
3202
+ for (; i < n; i++) {
3203
+ l = F[i];
3204
+ for (j = 0; j < n; j++) {
3205
+ if (i != j) l *= (value - X[j]) / (X[i] - X[j]);
3206
+ }
3207
+ p += l;
3208
+ }
3209
+ return p;
3210
+ },
3211
+ cubic_spline: function cubic_spline(X, F, value) {
3212
+ var n = X.length;
3213
+ var i = 0, j;
3214
+ var A = [];
3215
+ var B = [];
3216
+ var alpha = [];
3217
+ var c = [];
3218
+ var h = [];
3219
+ var b = [];
3220
+ var d = [];
3221
+ for (; i < n - 1; i++)
3222
+ h[i] = X[i + 1] - X[i];
3223
+ alpha[0] = 0;
3224
+ for (i = 1; i < n - 1; i++) {
3225
+ alpha[i] = 3 / h[i] * (F[i + 1] - F[i]) - 3 / h[i - 1] * (F[i] - F[i - 1]);
3226
+ }
3227
+ for (i = 1; i < n - 1; i++) {
3228
+ A[i] = [];
3229
+ B[i] = [];
3230
+ A[i][i - 1] = h[i - 1];
3231
+ A[i][i] = 2 * (h[i - 1] + h[i]);
3232
+ A[i][i + 1] = h[i];
3233
+ B[i][0] = alpha[i];
3234
+ }
3235
+ c = jStat2.multiply(jStat2.inv(A), B);
3236
+ for (j = 0; j < n - 1; j++) {
3237
+ b[j] = (F[j + 1] - F[j]) / h[j] - h[j] * (c[j + 1][0] + 2 * c[j][0]) / 3;
3238
+ d[j] = (c[j + 1][0] - c[j][0]) / (3 * h[j]);
3239
+ }
3240
+ for (j = 0; j < n; j++) {
3241
+ if (X[j] > value) break;
3242
+ }
3243
+ j -= 1;
3244
+ return F[j] + (value - X[j]) * b[j] + jStat2.sq(value - X[j]) * c[j] + (value - X[j]) * jStat2.sq(value - X[j]) * d[j];
3245
+ },
3246
+ gauss_quadrature: function gauss_quadrature() {
3247
+ throw new Error("gauss_quadrature not yet implemented");
3248
+ },
3249
+ PCA: function PCA(X) {
3250
+ var m = X.length;
3251
+ var n = X[0].length;
3252
+ var i = 0;
3253
+ var j, temp1;
3254
+ var u = [];
3255
+ var D = [];
3256
+ var result = [];
3257
+ var temp2 = [];
3258
+ var Y = [];
3259
+ var Bt = [];
3260
+ var B = [];
3261
+ var C = [];
3262
+ var V = [];
3263
+ var Vt = [];
3264
+ for (i = 0; i < m; i++) {
3265
+ u[i] = jStat2.sum(X[i]) / n;
3266
+ }
3267
+ for (i = 0; i < n; i++) {
3268
+ B[i] = [];
3269
+ for (j = 0; j < m; j++) {
3270
+ B[i][j] = X[j][i] - u[j];
3271
+ }
3272
+ }
3273
+ B = jStat2.transpose(B);
3274
+ for (i = 0; i < m; i++) {
3275
+ C[i] = [];
3276
+ for (j = 0; j < m; j++) {
3277
+ C[i][j] = jStat2.dot([B[i]], [B[j]]) / (n - 1);
3278
+ }
3279
+ }
3280
+ result = jStat2.jacobi(C);
3281
+ V = result[0];
3282
+ D = result[1];
3283
+ Vt = jStat2.transpose(V);
3284
+ for (i = 0; i < D.length; i++) {
3285
+ for (j = i; j < D.length; j++) {
3286
+ if (D[i] < D[j]) {
3287
+ temp1 = D[i];
3288
+ D[i] = D[j];
3289
+ D[j] = temp1;
3290
+ temp2 = Vt[i];
3291
+ Vt[i] = Vt[j];
3292
+ Vt[j] = temp2;
3293
+ }
3294
+ }
3295
+ }
3296
+ Bt = jStat2.transpose(B);
3297
+ for (i = 0; i < m; i++) {
3298
+ Y[i] = [];
3299
+ for (j = 0; j < Bt.length; j++) {
3300
+ Y[i][j] = jStat2.dot([Vt[i]], [Bt[j]]);
3301
+ }
3302
+ }
3303
+ return [X, D, Vt, Y];
3304
+ }
3305
+ });
3306
+ (function(funcs) {
3307
+ for (var i = 0; i < funcs.length; i++) (function(passfunc) {
3308
+ jStat2.fn[passfunc] = function(arg, func) {
3309
+ var tmpthis = this;
3310
+ if (func) {
3311
+ setTimeout(function() {
3312
+ func.call(tmpthis, jStat2.fn[passfunc].call(tmpthis, arg));
3313
+ }, 15);
3314
+ return this;
3315
+ }
3316
+ if (typeof jStat2[passfunc](this, arg) === "number")
3317
+ return jStat2[passfunc](this, arg);
3318
+ else
3319
+ return jStat2(jStat2[passfunc](this, arg));
3320
+ };
3321
+ })(funcs[i]);
3322
+ })("add divide multiply subtract dot pow exp log abs norm angle".split(" "));
3323
+ })(jStat, Math);
3324
+ (function(jStat2, Math2) {
3325
+ var slice = [].slice;
3326
+ var isNumber = jStat2.utils.isNumber;
3327
+ var isArray = jStat2.utils.isArray;
3328
+ jStat2.extend({
3329
+ // 2 different parameter lists:
3330
+ // (value, mean, sd)
3331
+ // (value, array, flag)
3332
+ zscore: function zscore() {
3333
+ var args = slice.call(arguments);
3334
+ if (isNumber(args[1])) {
3335
+ return (args[0] - args[1]) / args[2];
3336
+ }
3337
+ return (args[0] - jStat2.mean(args[1])) / jStat2.stdev(args[1], args[2]);
3338
+ },
3339
+ // 3 different paramter lists:
3340
+ // (value, mean, sd, sides)
3341
+ // (zscore, sides)
3342
+ // (value, array, sides, flag)
3343
+ ztest: function ztest() {
3344
+ var args = slice.call(arguments);
3345
+ var z;
3346
+ if (isArray(args[1])) {
3347
+ z = jStat2.zscore(args[0], args[1], args[3]);
3348
+ return args[2] === 1 ? jStat2.normal.cdf(-Math2.abs(z), 0, 1) : jStat2.normal.cdf(-Math2.abs(z), 0, 1) * 2;
3349
+ } else {
3350
+ if (args.length > 2) {
3351
+ z = jStat2.zscore(args[0], args[1], args[2]);
3352
+ return args[3] === 1 ? jStat2.normal.cdf(-Math2.abs(z), 0, 1) : jStat2.normal.cdf(-Math2.abs(z), 0, 1) * 2;
3353
+ } else {
3354
+ z = args[0];
3355
+ return args[1] === 1 ? jStat2.normal.cdf(-Math2.abs(z), 0, 1) : jStat2.normal.cdf(-Math2.abs(z), 0, 1) * 2;
3356
+ }
3357
+ }
3358
+ }
3359
+ });
3360
+ jStat2.extend(jStat2.fn, {
3361
+ zscore: function zscore(value, flag) {
3362
+ return (value - this.mean()) / this.stdev(flag);
3363
+ },
3364
+ ztest: function ztest(value, sides, flag) {
3365
+ var zscore = Math2.abs(this.zscore(value, flag));
3366
+ return sides === 1 ? jStat2.normal.cdf(-zscore, 0, 1) : jStat2.normal.cdf(-zscore, 0, 1) * 2;
3367
+ }
3368
+ });
3369
+ jStat2.extend({
3370
+ // 2 parameter lists
3371
+ // (value, mean, sd, n)
3372
+ // (value, array)
3373
+ tscore: function tscore() {
3374
+ var args = slice.call(arguments);
3375
+ return args.length === 4 ? (args[0] - args[1]) / (args[2] / Math2.sqrt(args[3])) : (args[0] - jStat2.mean(args[1])) / (jStat2.stdev(args[1], true) / Math2.sqrt(args[1].length));
3376
+ },
3377
+ // 3 different paramter lists:
3378
+ // (value, mean, sd, n, sides)
3379
+ // (tscore, n, sides)
3380
+ // (value, array, sides)
3381
+ ttest: function ttest() {
3382
+ var args = slice.call(arguments);
3383
+ var tscore;
3384
+ if (args.length === 5) {
3385
+ tscore = Math2.abs(jStat2.tscore(args[0], args[1], args[2], args[3]));
3386
+ return args[4] === 1 ? jStat2.studentt.cdf(-tscore, args[3] - 1) : jStat2.studentt.cdf(-tscore, args[3] - 1) * 2;
3387
+ }
3388
+ if (isNumber(args[1])) {
3389
+ tscore = Math2.abs(args[0]);
3390
+ return args[2] == 1 ? jStat2.studentt.cdf(-tscore, args[1] - 1) : jStat2.studentt.cdf(-tscore, args[1] - 1) * 2;
3391
+ }
3392
+ tscore = Math2.abs(jStat2.tscore(args[0], args[1]));
3393
+ return args[2] == 1 ? jStat2.studentt.cdf(-tscore, args[1].length - 1) : jStat2.studentt.cdf(-tscore, args[1].length - 1) * 2;
3394
+ }
3395
+ });
3396
+ jStat2.extend(jStat2.fn, {
3397
+ tscore: function tscore(value) {
3398
+ return (value - this.mean()) / (this.stdev(true) / Math2.sqrt(this.cols()));
3399
+ },
3400
+ ttest: function ttest(value, sides) {
3401
+ return sides === 1 ? 1 - jStat2.studentt.cdf(Math2.abs(this.tscore(value)), this.cols() - 1) : jStat2.studentt.cdf(-Math2.abs(this.tscore(value)), this.cols() - 1) * 2;
3402
+ }
3403
+ });
3404
+ jStat2.extend({
3405
+ // Paramter list is as follows:
3406
+ // (array1, array2, array3, ...)
3407
+ // or it is an array of arrays
3408
+ // array of arrays conversion
3409
+ anovafscore: function anovafscore() {
3410
+ var args = slice.call(arguments), expVar, sample, sampMean, sampSampMean, tmpargs, unexpVar, i, j;
3411
+ if (args.length === 1) {
3412
+ tmpargs = new Array(args[0].length);
3413
+ for (i = 0; i < args[0].length; i++) {
3414
+ tmpargs[i] = args[0][i];
3415
+ }
3416
+ args = tmpargs;
3417
+ }
3418
+ sample = new Array();
3419
+ for (i = 0; i < args.length; i++) {
3420
+ sample = sample.concat(args[i]);
3421
+ }
3422
+ sampMean = jStat2.mean(sample);
3423
+ expVar = 0;
3424
+ for (i = 0; i < args.length; i++) {
3425
+ expVar = expVar + args[i].length * Math2.pow(jStat2.mean(args[i]) - sampMean, 2);
3426
+ }
3427
+ expVar /= args.length - 1;
3428
+ unexpVar = 0;
3429
+ for (i = 0; i < args.length; i++) {
3430
+ sampSampMean = jStat2.mean(args[i]);
3431
+ for (j = 0; j < args[i].length; j++) {
3432
+ unexpVar += Math2.pow(args[i][j] - sampSampMean, 2);
3433
+ }
3434
+ }
3435
+ unexpVar /= sample.length - args.length;
3436
+ return expVar / unexpVar;
3437
+ },
3438
+ // 2 different paramter setups
3439
+ // (array1, array2, array3, ...)
3440
+ // (anovafscore, df1, df2)
3441
+ anovaftest: function anovaftest() {
3442
+ var args = slice.call(arguments), df1, df2, n, i;
3443
+ if (isNumber(args[0])) {
3444
+ return 1 - jStat2.centralF.cdf(args[0], args[1], args[2]);
3445
+ }
3446
+ var anovafscore = jStat2.anovafscore(args);
3447
+ df1 = args.length - 1;
3448
+ n = 0;
3449
+ for (i = 0; i < args.length; i++) {
3450
+ n = n + args[i].length;
3451
+ }
3452
+ df2 = n - df1 - 1;
3453
+ return 1 - jStat2.centralF.cdf(anovafscore, df1, df2);
3454
+ },
3455
+ ftest: function ftest(fscore, df1, df2) {
3456
+ return 1 - jStat2.centralF.cdf(fscore, df1, df2);
3457
+ }
3458
+ });
3459
+ jStat2.extend(jStat2.fn, {
3460
+ anovafscore: function anovafscore() {
3461
+ return jStat2.anovafscore(this.toArray());
3462
+ },
3463
+ anovaftes: function anovaftes() {
3464
+ var n = 0;
3465
+ var i;
3466
+ for (i = 0; i < this.length; i++) {
3467
+ n = n + this[i].length;
3468
+ }
3469
+ return jStat2.ftest(this.anovafscore(), this.length - 1, n - this.length);
3470
+ }
3471
+ });
3472
+ jStat2.extend({
3473
+ // 2 parameter lists
3474
+ // (mean1, mean2, n1, n2, sd)
3475
+ // (array1, array2, sd)
3476
+ qscore: function qscore() {
3477
+ var args = slice.call(arguments);
3478
+ var mean1, mean2, n1, n2, sd;
3479
+ if (isNumber(args[0])) {
3480
+ mean1 = args[0];
3481
+ mean2 = args[1];
3482
+ n1 = args[2];
3483
+ n2 = args[3];
3484
+ sd = args[4];
3485
+ } else {
3486
+ mean1 = jStat2.mean(args[0]);
3487
+ mean2 = jStat2.mean(args[1]);
3488
+ n1 = args[0].length;
3489
+ n2 = args[1].length;
3490
+ sd = args[2];
3491
+ }
3492
+ return Math2.abs(mean1 - mean2) / (sd * Math2.sqrt((1 / n1 + 1 / n2) / 2));
3493
+ },
3494
+ // 3 different parameter lists:
3495
+ // (qscore, n, k)
3496
+ // (mean1, mean2, n1, n2, sd, n, k)
3497
+ // (array1, array2, sd, n, k)
3498
+ qtest: function qtest() {
3499
+ var args = slice.call(arguments);
3500
+ var qscore;
3501
+ if (args.length === 3) {
3502
+ qscore = args[0];
3503
+ args = args.slice(1);
3504
+ } else if (args.length === 7) {
3505
+ qscore = jStat2.qscore(args[0], args[1], args[2], args[3], args[4]);
3506
+ args = args.slice(5);
3507
+ } else {
3508
+ qscore = jStat2.qscore(args[0], args[1], args[2]);
3509
+ args = args.slice(3);
3510
+ }
3511
+ var n = args[0];
3512
+ var k = args[1];
3513
+ return 1 - jStat2.tukey.cdf(qscore, k, n - k);
3514
+ },
3515
+ tukeyhsd: function tukeyhsd(arrays) {
3516
+ var sd = jStat2.pooledstdev(arrays);
3517
+ var means = arrays.map(function(arr) {
3518
+ return jStat2.mean(arr);
3519
+ });
3520
+ var n = arrays.reduce(function(n2, arr) {
3521
+ return n2 + arr.length;
3522
+ }, 0);
3523
+ var results = [];
3524
+ for (var i = 0; i < arrays.length; ++i) {
3525
+ for (var j = i + 1; j < arrays.length; ++j) {
3526
+ var p = jStat2.qtest(means[i], means[j], arrays[i].length, arrays[j].length, sd, n, arrays.length);
3527
+ results.push([[i, j], p]);
3528
+ }
3529
+ }
3530
+ return results;
3531
+ }
3532
+ });
3533
+ jStat2.extend({
3534
+ // 2 different parameter setups
3535
+ // (value, alpha, sd, n)
3536
+ // (value, alpha, array)
3537
+ normalci: function normalci() {
3538
+ var args = slice.call(arguments), ans = new Array(2), change;
3539
+ if (args.length === 4) {
3540
+ change = Math2.abs(jStat2.normal.inv(args[1] / 2, 0, 1) * args[2] / Math2.sqrt(args[3]));
3541
+ } else {
3542
+ change = Math2.abs(jStat2.normal.inv(args[1] / 2, 0, 1) * jStat2.stdev(args[2]) / Math2.sqrt(args[2].length));
3543
+ }
3544
+ ans[0] = args[0] - change;
3545
+ ans[1] = args[0] + change;
3546
+ return ans;
3547
+ },
3548
+ // 2 different parameter setups
3549
+ // (value, alpha, sd, n)
3550
+ // (value, alpha, array)
3551
+ tci: function tci() {
3552
+ var args = slice.call(arguments), ans = new Array(2), change;
3553
+ if (args.length === 4) {
3554
+ change = Math2.abs(jStat2.studentt.inv(args[1] / 2, args[3] - 1) * args[2] / Math2.sqrt(args[3]));
3555
+ } else {
3556
+ change = Math2.abs(jStat2.studentt.inv(args[1] / 2, args[2].length - 1) * jStat2.stdev(args[2], true) / Math2.sqrt(args[2].length));
3557
+ }
3558
+ ans[0] = args[0] - change;
3559
+ ans[1] = args[0] + change;
3560
+ return ans;
3561
+ },
3562
+ significant: function significant(pvalue, alpha) {
3563
+ return pvalue < alpha;
3564
+ }
3565
+ });
3566
+ jStat2.extend(jStat2.fn, {
3567
+ normalci: function normalci(value, alpha) {
3568
+ return jStat2.normalci(value, alpha, this.toArray());
3569
+ },
3570
+ tci: function tci(value, alpha) {
3571
+ return jStat2.tci(value, alpha, this.toArray());
3572
+ }
3573
+ });
3574
+ function differenceOfProportions(p1, n1, p2, n2) {
3575
+ if (p1 > 1 || p2 > 1 || p1 <= 0 || p2 <= 0) {
3576
+ throw new Error("Proportions should be greater than 0 and less than 1");
3577
+ }
3578
+ var pooled = (p1 * n1 + p2 * n2) / (n1 + n2);
3579
+ var se = Math2.sqrt(pooled * (1 - pooled) * (1 / n1 + 1 / n2));
3580
+ return (p1 - p2) / se;
3581
+ }
3582
+ jStat2.extend(jStat2.fn, {
3583
+ oneSidedDifferenceOfProportions: function oneSidedDifferenceOfProportions(p1, n1, p2, n2) {
3584
+ var z = differenceOfProportions(p1, n1, p2, n2);
3585
+ return jStat2.ztest(z, 1);
3586
+ },
3587
+ twoSidedDifferenceOfProportions: function twoSidedDifferenceOfProportions(p1, n1, p2, n2) {
3588
+ var z = differenceOfProportions(p1, n1, p2, n2);
3589
+ return jStat2.ztest(z, 2);
3590
+ }
3591
+ });
3592
+ })(jStat, Math);
3593
+ jStat.models = /* @__PURE__ */ function() {
3594
+ function sub_regress(exog) {
3595
+ var var_count = exog[0].length;
3596
+ var modelList = jStat.arange(var_count).map(function(endog_index) {
3597
+ var exog_index = jStat.arange(var_count).filter(function(i) {
3598
+ return i !== endog_index;
3599
+ });
3600
+ return ols(
3601
+ jStat.col(exog, endog_index).map(function(x) {
3602
+ return x[0];
3603
+ }),
3604
+ jStat.col(exog, exog_index)
3605
+ );
3606
+ });
3607
+ return modelList;
3608
+ }
3609
+ function ols(endog, exog) {
3610
+ var nobs = endog.length;
3611
+ var df_model = exog[0].length - 1;
3612
+ var df_resid = nobs - df_model - 1;
3613
+ var coef = jStat.lstsq(exog, endog);
3614
+ var predict = jStat.multiply(exog, coef.map(function(x) {
3615
+ return [x];
3616
+ })).map(function(p) {
3617
+ return p[0];
3618
+ });
3619
+ var resid = jStat.subtract(endog, predict);
3620
+ var ybar = jStat.mean(endog);
3621
+ var SSE = jStat.sum(predict.map(function(f) {
3622
+ return Math.pow(f - ybar, 2);
3623
+ }));
3624
+ var SSR = jStat.sum(endog.map(function(y, i) {
3625
+ return Math.pow(y - predict[i], 2);
3626
+ }));
3627
+ var SST = SSE + SSR;
3628
+ var R2 = SSE / SST;
3629
+ return {
3630
+ exog,
3631
+ endog,
3632
+ nobs,
3633
+ df_model,
3634
+ df_resid,
3635
+ coef,
3636
+ predict,
3637
+ resid,
3638
+ ybar,
3639
+ SST,
3640
+ SSE,
3641
+ SSR,
3642
+ R2
3643
+ };
3644
+ }
3645
+ function t_test(model) {
3646
+ var subModelList = sub_regress(model.exog);
3647
+ var sigmaHat = Math.sqrt(model.SSR / model.df_resid);
3648
+ var seBetaHat = subModelList.map(function(mod) {
3649
+ var SST = mod.SST;
3650
+ var R2 = mod.R2;
3651
+ return sigmaHat / Math.sqrt(SST * (1 - R2));
3652
+ });
3653
+ var tStatistic = model.coef.map(function(coef, i) {
3654
+ return (coef - 0) / seBetaHat[i];
3655
+ });
3656
+ var pValue = tStatistic.map(function(t) {
3657
+ var leftppf = jStat.studentt.cdf(t, model.df_resid);
3658
+ return (leftppf > 0.5 ? 1 - leftppf : leftppf) * 2;
3659
+ });
3660
+ var c = jStat.studentt.inv(0.975, model.df_resid);
3661
+ var interval95 = model.coef.map(function(coef, i) {
3662
+ var d = c * seBetaHat[i];
3663
+ return [coef - d, coef + d];
3664
+ });
3665
+ return {
3666
+ se: seBetaHat,
3667
+ t: tStatistic,
3668
+ p: pValue,
3669
+ sigmaHat,
3670
+ interval95
3671
+ };
3672
+ }
3673
+ function F_test(model) {
3674
+ var F_statistic = model.R2 / model.df_model / ((1 - model.R2) / model.df_resid);
3675
+ var fcdf = function(x, n1, n2) {
3676
+ return jStat.beta.cdf(x / (n2 / n1 + x), n1 / 2, n2 / 2);
3677
+ };
3678
+ var pvalue = 1 - fcdf(F_statistic, model.df_model, model.df_resid);
3679
+ return { F_statistic, pvalue };
3680
+ }
3681
+ function ols_wrap(endog, exog) {
3682
+ var model = ols(endog, exog);
3683
+ var ttest = t_test(model);
3684
+ var ftest = F_test(model);
3685
+ var adjust_R2 = 1 - (1 - model.R2) * ((model.nobs - 1) / model.df_resid);
3686
+ model.t = ttest;
3687
+ model.f = ftest;
3688
+ model.adjust_R2 = adjust_R2;
3689
+ return model;
3690
+ }
3691
+ return { ols: ols_wrap };
3692
+ }();
3693
+ jStat.extend({
3694
+ buildxmatrix: function buildxmatrix() {
3695
+ var matrixRows = new Array(arguments.length);
3696
+ for (var i = 0; i < arguments.length; i++) {
3697
+ var array = [1];
3698
+ matrixRows[i] = array.concat(arguments[i]);
3699
+ }
3700
+ return jStat(matrixRows);
3701
+ },
3702
+ builddxmatrix: function builddxmatrix() {
3703
+ var matrixRows = new Array(arguments[0].length);
3704
+ for (var i = 0; i < arguments[0].length; i++) {
3705
+ var array = [1];
3706
+ matrixRows[i] = array.concat(arguments[0][i]);
3707
+ }
3708
+ return jStat(matrixRows);
3709
+ },
3710
+ buildjxmatrix: function buildjxmatrix(jMat) {
3711
+ var pass = new Array(jMat.length);
3712
+ for (var i = 0; i < jMat.length; i++) {
3713
+ pass[i] = jMat[i];
3714
+ }
3715
+ return jStat.builddxmatrix(pass);
3716
+ },
3717
+ buildymatrix: function buildymatrix(array) {
3718
+ return jStat(array).transpose();
3719
+ },
3720
+ buildjymatrix: function buildjymatrix(jMat) {
3721
+ return jMat.transpose();
3722
+ },
3723
+ matrixmult: function matrixmult(A, B) {
3724
+ var i, j, k, result, sum;
3725
+ if (A.cols() == B.rows()) {
3726
+ if (B.rows() > 1) {
3727
+ result = [];
3728
+ for (i = 0; i < A.rows(); i++) {
3729
+ result[i] = [];
3730
+ for (j = 0; j < B.cols(); j++) {
3731
+ sum = 0;
3732
+ for (k = 0; k < A.cols(); k++) {
3733
+ sum += A.toArray()[i][k] * B.toArray()[k][j];
3734
+ }
3735
+ result[i][j] = sum;
3736
+ }
3737
+ }
3738
+ return jStat(result);
3739
+ }
3740
+ result = [];
3741
+ for (i = 0; i < A.rows(); i++) {
3742
+ result[i] = [];
3743
+ for (j = 0; j < B.cols(); j++) {
3744
+ sum = 0;
3745
+ for (k = 0; k < A.cols(); k++) {
3746
+ sum += A.toArray()[i][k] * B.toArray()[j];
3747
+ }
3748
+ result[i][j] = sum;
3749
+ }
3750
+ }
3751
+ return jStat(result);
3752
+ }
3753
+ },
3754
+ //regress and regresst to be fixed
3755
+ regress: function regress(jMatX, jMatY) {
3756
+ var innerinv = jStat.xtranspxinv(jMatX);
3757
+ var xtransp = jMatX.transpose();
3758
+ var next = jStat.matrixmult(jStat(innerinv), xtransp);
3759
+ return jStat.matrixmult(next, jMatY);
3760
+ },
3761
+ regresst: function regresst(jMatX, jMatY, sides) {
3762
+ var beta = jStat.regress(jMatX, jMatY);
3763
+ var compile = {};
3764
+ compile.anova = {};
3765
+ var jMatYBar = jStat.jMatYBar(jMatX, beta);
3766
+ compile.yBar = jMatYBar;
3767
+ var yAverage = jMatY.mean();
3768
+ compile.anova.residuals = jStat.residuals(jMatY, jMatYBar);
3769
+ compile.anova.ssr = jStat.ssr(jMatYBar, yAverage);
3770
+ compile.anova.msr = compile.anova.ssr / (jMatX[0].length - 1);
3771
+ compile.anova.sse = jStat.sse(jMatY, jMatYBar);
3772
+ compile.anova.mse = compile.anova.sse / (jMatY.length - (jMatX[0].length - 1) - 1);
3773
+ compile.anova.sst = jStat.sst(jMatY, yAverage);
3774
+ compile.anova.mst = compile.anova.sst / (jMatY.length - 1);
3775
+ compile.anova.r2 = 1 - compile.anova.sse / compile.anova.sst;
3776
+ if (compile.anova.r2 < 0) compile.anova.r2 = 0;
3777
+ compile.anova.fratio = compile.anova.msr / compile.anova.mse;
3778
+ compile.anova.pvalue = jStat.anovaftest(
3779
+ compile.anova.fratio,
3780
+ jMatX[0].length - 1,
3781
+ jMatY.length - (jMatX[0].length - 1) - 1
3782
+ );
3783
+ compile.anova.rmse = Math.sqrt(compile.anova.mse);
3784
+ compile.anova.r2adj = 1 - compile.anova.mse / compile.anova.mst;
3785
+ if (compile.anova.r2adj < 0) compile.anova.r2adj = 0;
3786
+ compile.stats = new Array(jMatX[0].length);
3787
+ var covar = jStat.xtranspxinv(jMatX);
3788
+ var sds, ts, ps;
3789
+ for (var i = 0; i < beta.length; i++) {
3790
+ sds = Math.sqrt(compile.anova.mse * Math.abs(covar[i][i]));
3791
+ ts = Math.abs(beta[i] / sds);
3792
+ ps = jStat.ttest(ts, jMatY.length - jMatX[0].length - 1, sides);
3793
+ compile.stats[i] = [beta[i], sds, ts, ps];
3794
+ }
3795
+ compile.regress = beta;
3796
+ return compile;
3797
+ },
3798
+ xtranspx: function xtranspx(jMatX) {
3799
+ return jStat.matrixmult(jMatX.transpose(), jMatX);
3800
+ },
3801
+ xtranspxinv: function xtranspxinv(jMatX) {
3802
+ var inner = jStat.matrixmult(jMatX.transpose(), jMatX);
3803
+ var innerinv = jStat.inv(inner);
3804
+ return innerinv;
3805
+ },
3806
+ jMatYBar: function jMatYBar(jMatX, beta) {
3807
+ var yBar = jStat.matrixmult(jMatX, beta);
3808
+ return new jStat(yBar);
3809
+ },
3810
+ residuals: function residuals(jMatY, jMatYBar) {
3811
+ return jStat.matrixsubtract(jMatY, jMatYBar);
3812
+ },
3813
+ ssr: function ssr(jMatYBar, yAverage) {
3814
+ var ssr2 = 0;
3815
+ for (var i = 0; i < jMatYBar.length; i++) {
3816
+ ssr2 += Math.pow(jMatYBar[i] - yAverage, 2);
3817
+ }
3818
+ return ssr2;
3819
+ },
3820
+ sse: function sse(jMatY, jMatYBar) {
3821
+ var sse2 = 0;
3822
+ for (var i = 0; i < jMatY.length; i++) {
3823
+ sse2 += Math.pow(jMatY[i] - jMatYBar[i], 2);
3824
+ }
3825
+ return sse2;
3826
+ },
3827
+ sst: function sst(jMatY, yAverage) {
3828
+ var sst2 = 0;
3829
+ for (var i = 0; i < jMatY.length; i++) {
3830
+ sst2 += Math.pow(jMatY[i] - yAverage, 2);
3831
+ }
3832
+ return sst2;
3833
+ },
3834
+ matrixsubtract: function matrixsubtract(A, B) {
3835
+ var ans = new Array(A.length);
3836
+ for (var i = 0; i < A.length; i++) {
3837
+ ans[i] = new Array(A[i].length);
3838
+ for (var j = 0; j < A[i].length; j++) {
3839
+ ans[i][j] = A[i][j] - B[i][j];
3840
+ }
3841
+ }
3842
+ return jStat(ans);
3843
+ }
3844
+ });
3845
+ jStat.jStat = jStat;
3846
+ return jStat;
3847
+ });
3848
+ })(jstat$1);
3849
+ return jstat$1.exports;
3850
+ }
3851
+ export {
3852
+ requireJstat as __require
3853
+ };