@rgsoft/stats 1.0.1

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Ricardo Miranda
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,18 @@
1
+ # Stats
2
+ Probability and statistics library
3
+
4
+ ## Installation
5
+
6
+ ```sh
7
+ npm install @rgsoft/stats
8
+ ```
9
+
10
+ ## Tests
11
+
12
+ ```sh
13
+ npm run test
14
+ ```
15
+
16
+ ## Usage
17
+
18
+ [Usage docs](docs/index.md)
package/dist/index.cjs ADDED
@@ -0,0 +1,486 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ Binomial: () => Binomial,
24
+ Exponential: () => Exponential,
25
+ Gaussian: () => Gaussian,
26
+ NegativeBinomial: () => NegativeBinomial,
27
+ Poisson: () => Poisson,
28
+ Stats: () => Stats,
29
+ Uniform: () => Uniform,
30
+ erf: () => erf
31
+ });
32
+ module.exports = __toCommonJS(index_exports);
33
+
34
+ // src/pdf/erf.ts
35
+ function erf(z) {
36
+ const t = 1 / (1 + 0.5 * Math.abs(z));
37
+ const tau = t * Math.exp(
38
+ -z * z - 1.26551223 + 1.00002368 * t + 0.37409196 * t ** 2 + 0.09678418 * t ** 3 - 0.18628806 * t ** 4 + 0.27886807 * t ** 5 - 1.13520398 * t ** 6 + 1.48851587 * t ** 7 - 0.82215223 * t ** 8 + 0.17087277 * t ** 9
39
+ );
40
+ return z >= 0 ? 1 - tau : tau - 1;
41
+ }
42
+
43
+ // src/pdf/exponential.ts
44
+ var Exponential = class {
45
+ constructor(mean) {
46
+ this.mean = mean;
47
+ if (mean <= 0) {
48
+ throw new Error("Mean must be greater than zero");
49
+ }
50
+ this.lambda = 1 / mean;
51
+ }
52
+ getAccumulated(x) {
53
+ if (x < 0) {
54
+ return 0;
55
+ }
56
+ return 1 - Math.exp(-this.lambda * x);
57
+ }
58
+ sample() {
59
+ const p = Math.min(Math.random(), 1 - Number.EPSILON);
60
+ return -1 * Math.log(1 - p) * this.mean;
61
+ }
62
+ getMean() {
63
+ return this.mean;
64
+ }
65
+ density(x) {
66
+ if (x < 0) {
67
+ return 0;
68
+ }
69
+ return this.lambda * Math.exp(-this.lambda * x);
70
+ }
71
+ getVariance() {
72
+ return this.mean ** 2;
73
+ }
74
+ getStdDev() {
75
+ return this.mean;
76
+ }
77
+ quantile(p) {
78
+ return -Math.log(1 - p) * this.mean;
79
+ }
80
+ };
81
+
82
+ // src/pdf/gaussian.ts
83
+ var import_math = require("@rgsoft/math");
84
+ var Gaussian = class {
85
+ constructor(mean = 0, variance = 1) {
86
+ this.mean = mean;
87
+ this.variance = variance;
88
+ if (variance <= 0) {
89
+ throw new Error("Variance must be positive");
90
+ }
91
+ this.stdDev = Math.sqrt(variance);
92
+ }
93
+ getAccumulated(x) {
94
+ const z = (x - this.mean) / Math.sqrt(2 * this.variance);
95
+ return 0.5 * (1 + erf(z));
96
+ }
97
+ quantile(p) {
98
+ if (p < 0 || p > 1) {
99
+ throw new Error("Accumulated value must be between 0 and 1");
100
+ }
101
+ if (p === 0) return -Infinity;
102
+ if (p === 1) return Infinity;
103
+ const a = [
104
+ -39.6968302866538,
105
+ 220.946098424521,
106
+ -275.928510446969,
107
+ 138.357751867269,
108
+ -30.6647980661472,
109
+ 2.50662827745924
110
+ ];
111
+ const b = [
112
+ -54.4760987982241,
113
+ 161.585836858041,
114
+ -155.698979859887,
115
+ 66.8013118877197,
116
+ -13.2806815528857
117
+ ];
118
+ const c = [
119
+ -0.00778489400243029,
120
+ -0.322396458041136,
121
+ -2.40075827716184,
122
+ -2.54973253934373,
123
+ 4.37466414146497,
124
+ 2.93816398269878
125
+ ];
126
+ const d = [
127
+ 0.00778469570904146,
128
+ 0.32246712907004,
129
+ 2.445134137143,
130
+ 3.75440866190742
131
+ ];
132
+ let q, r;
133
+ if (p < 0.02425) {
134
+ q = Math.sqrt(-2 * Math.log(p));
135
+ return (((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) / ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1);
136
+ } else if (p > 1 - 0.02425) {
137
+ q = Math.sqrt(-2 * Math.log(1 - p));
138
+ return -(((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) / ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1);
139
+ } else {
140
+ q = p - 0.5;
141
+ r = q * q;
142
+ return (((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r + a[5]) * q / (((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1);
143
+ }
144
+ }
145
+ getMean() {
146
+ return this.mean;
147
+ }
148
+ sample() {
149
+ const p = Math.random();
150
+ const z = this.quantile(p);
151
+ return this.mean + z * this.stdDev;
152
+ }
153
+ density(x) {
154
+ const coeff = 1 / (this.stdDev * Math.sqrt(import_math.TWO_PI));
155
+ const exponent = -((x - this.mean) ** 2) / (2 * this.stdDev ** 2);
156
+ return coeff * Math.exp(exponent);
157
+ }
158
+ getVariance() {
159
+ return this.variance;
160
+ }
161
+ getStdDev() {
162
+ return this.stdDev;
163
+ }
164
+ };
165
+
166
+ // src/pdf/uniform.ts
167
+ var Uniform = class {
168
+ constructor(min, max) {
169
+ this.min = min;
170
+ this.max = max;
171
+ if (min >= max) {
172
+ throw new Error("Min must be lower than max");
173
+ }
174
+ this.diff = max - min;
175
+ }
176
+ getAccumulated(x) {
177
+ if (x < this.min) {
178
+ return 0;
179
+ }
180
+ if (x > this.max) {
181
+ return 1;
182
+ }
183
+ return (x - this.min) / this.diff;
184
+ }
185
+ getMean() {
186
+ return (this.max + this.min) * 0.5;
187
+ }
188
+ sample() {
189
+ return Math.random() * this.diff + this.min;
190
+ }
191
+ density(x) {
192
+ if (x < this.min || x > this.max) {
193
+ return 0;
194
+ }
195
+ return 1 / this.diff;
196
+ }
197
+ getVariance() {
198
+ return this.diff ** 2 / 12;
199
+ }
200
+ getStdDev() {
201
+ return this.diff / Math.sqrt(12);
202
+ }
203
+ quantile(p) {
204
+ return this.min + p * (this.max - this.min);
205
+ }
206
+ };
207
+
208
+ // src/pmf/binomial.ts
209
+ var import_math2 = require("@rgsoft/math");
210
+ var Binomial = class {
211
+ constructor(n, p) {
212
+ this.n = n;
213
+ this.p = p;
214
+ if (!Number.isInteger(n) || n < 1) {
215
+ throw new Error("The number of experiments must be a positive integer");
216
+ }
217
+ if (!(p >= 0 && p <= 1)) {
218
+ throw new Error("The success probability must be between 0 and 1");
219
+ }
220
+ this.variance = n * p * (1 - p);
221
+ this.stdDev = Math.sqrt(this.variance);
222
+ this.probabilities = Array(n + 1).fill(0).map((_, i) => (0, import_math2.combination)(n, i) * p ** i * (1 - p) ** (n - i));
223
+ let acc = 0;
224
+ this.accumulative = this.probabilities.map((p2) => {
225
+ acc += p2;
226
+ return acc;
227
+ });
228
+ }
229
+ getAccumulated(x) {
230
+ x = Math.floor(x);
231
+ if (isNaN(x)) {
232
+ throw new Error("Number expected");
233
+ }
234
+ if (x < 0) {
235
+ return 0;
236
+ }
237
+ if (x > this.n) {
238
+ return 1;
239
+ }
240
+ return this.accumulative[x];
241
+ }
242
+ sample() {
243
+ const rnd = Math.random();
244
+ return this.accumulative.findIndex((acc) => rnd < acc);
245
+ }
246
+ getMean() {
247
+ return this.n * this.p;
248
+ }
249
+ getVariance() {
250
+ return this.variance;
251
+ }
252
+ getStdDev() {
253
+ return this.stdDev;
254
+ }
255
+ probability(x) {
256
+ if (!Number.isInteger(x) || x < 0) {
257
+ throw new Error("The value must be a positive integer");
258
+ }
259
+ if (x > this.n) {
260
+ throw new Error("The value cannot ve larger than the experiments number");
261
+ }
262
+ return this.probabilities[x];
263
+ }
264
+ };
265
+
266
+ // src/pmf/negative-binomial.ts
267
+ var import_math3 = require("@rgsoft/math");
268
+ var NegativeBinomial = class {
269
+ constructor(r, p) {
270
+ this.r = r;
271
+ this.p = p;
272
+ this.accumulative = [];
273
+ if (!Number.isInteger(r) || r < 1) {
274
+ throw new Error("The number of experiments must be a positive integer");
275
+ }
276
+ if (!(p > 0 && p < 1)) {
277
+ throw new Error("The success probability must be between 0 and 1");
278
+ }
279
+ this.mean = r * (1 - p) / p;
280
+ this.variance = r * (1 - p) / (p * p);
281
+ this.stdDev = Math.sqrt(r * (1 - p)) / p;
282
+ }
283
+ getAccumulated(x) {
284
+ x = Math.floor(x);
285
+ if (isNaN(x)) {
286
+ throw new Error("Number expected");
287
+ }
288
+ if (x < 0) {
289
+ return 0;
290
+ }
291
+ if (this.accumulative.length > x) {
292
+ return this.accumulative[x];
293
+ }
294
+ let i = this.accumulative.length;
295
+ let acc = i > 0 ? this.accumulative[i - 1] : 0;
296
+ do {
297
+ acc += this.probability(i);
298
+ this.accumulative.push(acc);
299
+ i++;
300
+ } while (i <= x);
301
+ return this.accumulative[x];
302
+ }
303
+ getMean() {
304
+ return this.mean;
305
+ }
306
+ getVariance() {
307
+ return this.variance;
308
+ }
309
+ getStdDev() {
310
+ return this.stdDev;
311
+ }
312
+ sample() {
313
+ const rnd = Math.random();
314
+ let i = 0;
315
+ while (i < this.accumulative.length) {
316
+ if (rnd < this.accumulative[i]) {
317
+ return i;
318
+ }
319
+ i++;
320
+ }
321
+ let acc = i > 0 ? this.accumulative[i - 1] : 0;
322
+ do {
323
+ acc += this.probability(i);
324
+ this.accumulative.push(acc);
325
+ i++;
326
+ } while (rnd > acc);
327
+ return i - 1;
328
+ }
329
+ probability(x) {
330
+ if (!Number.isInteger(x) || x < 0) {
331
+ throw new Error("The value must be a positive integer");
332
+ }
333
+ return (0, import_math3.combination)(this.r + x - 1, x) * this.p ** this.r * (1 - this.p) ** x;
334
+ }
335
+ };
336
+
337
+ // src/pmf/poisson.ts
338
+ var import_math4 = require("@rgsoft/math");
339
+ var Poisson = class {
340
+ constructor(l) {
341
+ this.l = l;
342
+ this.accumulative = [];
343
+ if (!Number.isInteger(l) || l < 0) {
344
+ throw new Error("The number of experiments must be a positive integer");
345
+ }
346
+ this.mean = l;
347
+ this.variance = l;
348
+ this.stdDev = Math.sqrt(l);
349
+ }
350
+ getAccumulated(x) {
351
+ x = Math.floor(x);
352
+ if (isNaN(x)) {
353
+ throw new Error("Number expected");
354
+ }
355
+ if (x < 0) {
356
+ return 0;
357
+ }
358
+ if (this.accumulative.length > x) {
359
+ return this.accumulative[x];
360
+ }
361
+ let i = this.accumulative.length;
362
+ let acc = i > 0 ? this.accumulative[i - 1] : 0;
363
+ do {
364
+ acc += this.probability(i);
365
+ this.accumulative.push(acc);
366
+ i++;
367
+ } while (i <= x);
368
+ return this.accumulative[x];
369
+ }
370
+ sample() {
371
+ const rnd = Math.random();
372
+ let i = 0;
373
+ while (i < this.accumulative.length) {
374
+ if (rnd < this.accumulative[i]) {
375
+ return i;
376
+ }
377
+ i++;
378
+ }
379
+ let acc = i > 0 ? this.accumulative[i - 1] : 0;
380
+ do {
381
+ acc += this.probability(i);
382
+ this.accumulative.push(acc);
383
+ i++;
384
+ } while (rnd > acc);
385
+ return i - 1;
386
+ }
387
+ getMean() {
388
+ return this.mean;
389
+ }
390
+ getVariance() {
391
+ return this.variance;
392
+ }
393
+ getStdDev() {
394
+ return this.stdDev;
395
+ }
396
+ probability(x) {
397
+ if (!Number.isInteger(x) || x < 0) {
398
+ throw new Error("The value must be a positive integer");
399
+ }
400
+ return this.l ** x * Math.exp(-this.l) / (0, import_math4.factorial)(x);
401
+ }
402
+ };
403
+
404
+ // src/stats.ts
405
+ var Stats = class {
406
+ constructor(data) {
407
+ if (!Array.isArray(data) || data.length === 0) {
408
+ throw new Error("Data must be an array of numbers");
409
+ }
410
+ this.data = [...data];
411
+ this.orderedData = [...data].sort((a, b) => a - b);
412
+ }
413
+ get mean() {
414
+ if (this._mean === void 0) {
415
+ this._mean = this.orderedData.reduce((a, b) => a + b, 0) / this.orderedData.length;
416
+ }
417
+ return this._mean;
418
+ }
419
+ get median() {
420
+ return this.q2;
421
+ }
422
+ get variance() {
423
+ if (this._variance === void 0) {
424
+ this._variance = this.orderedData.reduce((a, b) => a + (b - this.mean) ** 2, 0) / this.orderedData.length;
425
+ }
426
+ return this._variance;
427
+ }
428
+ get stdDev() {
429
+ if (this._stdDev === void 0) {
430
+ this._stdDev = Math.sqrt(this.variance);
431
+ }
432
+ return this._stdDev;
433
+ }
434
+ get q1() {
435
+ if (this._q1 === void 0) {
436
+ this._q1 = this.percentile(25);
437
+ }
438
+ return this._q1;
439
+ }
440
+ get q2() {
441
+ if (this._q2 === void 0) {
442
+ this._q2 = this.percentile(50);
443
+ }
444
+ return this._q2;
445
+ }
446
+ get q3() {
447
+ if (this._q3 === void 0) {
448
+ this._q3 = this.percentile(75);
449
+ }
450
+ return this._q3;
451
+ }
452
+ get zScores() {
453
+ if (this._zScores === void 0) {
454
+ const mean = this.mean;
455
+ const sd = this.stdDev;
456
+ this._zScores = this.data.map((x) => (x - mean) / sd);
457
+ }
458
+ return this._zScores;
459
+ }
460
+ get normalized() {
461
+ if (this._normalized === void 0) {
462
+ const min = this.orderedData[0];
463
+ const max = this.orderedData[this.orderedData.length - 1];
464
+ this._normalized = this.data.map((x) => (x - min) / (max - min));
465
+ }
466
+ return this._normalized;
467
+ }
468
+ percentile(p) {
469
+ const idx = p / 100 * (this.orderedData.length - 1);
470
+ const lo = Math.floor(idx);
471
+ const hi = Math.ceil(idx);
472
+ return lo === hi ? this.orderedData[lo] : this.orderedData[lo] + (this.orderedData[hi] - this.orderedData[lo]) * (idx - lo);
473
+ }
474
+ };
475
+ // Annotate the CommonJS export names for ESM import in node:
476
+ 0 && (module.exports = {
477
+ Binomial,
478
+ Exponential,
479
+ Gaussian,
480
+ NegativeBinomial,
481
+ Poisson,
482
+ Stats,
483
+ Uniform,
484
+ erf
485
+ });
486
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/pdf/erf.ts","../src/pdf/exponential.ts","../src/pdf/gaussian.ts","../src/pdf/uniform.ts","../src/pmf/binomial.ts","../src/pmf/negative-binomial.ts","../src/pmf/poisson.ts","../src/stats.ts"],"sourcesContent":["export { Exponential, Gaussian, Uniform, erf } from './pdf';\r\nexport { Binomial, Poisson, NegativeBinomial } from './pmf';\r\nexport { Stats } from './stats';\r\n","export function erf(z: number): number {\r\n const t = 1 / (1 + 0.5 * Math.abs(z));\r\n const tau =\r\n t *\r\n Math.exp(\r\n -z * z -\r\n 1.26551223 +\r\n 1.00002368 * t +\r\n 0.37409196 * t ** 2 +\r\n 0.09678418 * t ** 3 -\r\n 0.18628806 * t ** 4 +\r\n 0.27886807 * t ** 5 -\r\n 1.13520398 * t ** 6 +\r\n 1.48851587 * t ** 7 -\r\n 0.82215223 * t ** 8 +\r\n 0.17087277 * t ** 9\r\n );\r\n\r\n return z >= 0 ? 1 - tau : tau - 1;\r\n}\r\n","import { PDF } from \"./pdf\";\r\n\r\nexport class Exponential implements PDF {\r\n private readonly lambda: number;\r\n\r\n constructor(private readonly mean: number) {\r\n if (mean <= 0) {\r\n throw new Error(\"Mean must be greater than zero\");\r\n }\r\n this.lambda = 1 / mean;\r\n }\r\n\r\n getAccumulated(x: number): number {\r\n if (x < 0) {\r\n return 0;\r\n }\r\n return 1 - Math.exp(-this.lambda * x);\r\n }\r\n\r\n sample(): number {\r\n const p = Math.min(Math.random(), 1 - Number.EPSILON);\r\n return -1 * Math.log(1 - p) * this.mean;\r\n }\r\n\r\n getMean(): number {\r\n return this.mean;\r\n }\r\n\r\n density(x: number): number {\r\n if (x < 0) {\r\n return 0;\r\n }\r\n return this.lambda * Math.exp(-this.lambda * x);\r\n }\r\n\r\n getVariance(): number {\r\n return this.mean ** 2;\r\n }\r\n\r\n getStdDev(): number {\r\n return this.mean;\r\n }\r\n\r\n quantile(p: number): number {\r\n return -Math.log(1 - p) * this.mean;\r\n }\r\n}\r\n","import { TWO_PI } from \"@rgsoft/math\";\r\nimport { erf } from \"./erf\";\r\nimport { PDF } from \"./pdf\";\r\n\r\nexport class Gaussian implements PDF {\r\n public readonly stdDev: number;\r\n\r\n constructor(public readonly mean: number = 0, public readonly variance: number = 1) {\r\n if (variance <= 0) {\r\n throw new Error(\"Variance must be positive\");\r\n }\r\n this.stdDev = Math.sqrt(variance);\r\n }\r\n\r\n getAccumulated(x: number): number {\r\n const z = (x - this.mean) / Math.sqrt(2 * this.variance);\r\n return 0.5 * (1 + erf(z));\r\n }\r\n\r\n quantile(p: number): number {\r\n if (p < 0 || p > 1) {\r\n throw new Error(\"Accumulated value must be between 0 and 1\");\r\n }\r\n if (p === 0) return -Infinity;\r\n if (p === 1) return Infinity;\r\n\r\n const a = [\r\n -39.6968302866538, 220.946098424521, -275.928510446969, 138.357751867269,\r\n -30.6647980661472, 2.50662827745924,\r\n ];\r\n const b = [\r\n -54.4760987982241, 161.585836858041, -155.698979859887, 66.8013118877197,\r\n -13.2806815528857,\r\n ];\r\n const c = [\r\n -7.78489400243029e-3, -0.322396458041136, -2.40075827716184,\r\n -2.54973253934373, 4.37466414146497, 2.93816398269878,\r\n ];\r\n const d = [\r\n 7.78469570904146e-3, 0.32246712907004, 2.445134137143, 3.75440866190742,\r\n ];\r\n\r\n let q, r;\r\n\r\n if (p < 0.02425) {\r\n // Lower region\r\n q = Math.sqrt(-2 * Math.log(p));\r\n return (\r\n (((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) /\r\n ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1)\r\n );\r\n } else if (p > 1 - 0.02425) {\r\n // Upper region\r\n q = Math.sqrt(-2 * Math.log(1 - p));\r\n return (\r\n -(((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) /\r\n ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1)\r\n );\r\n } else {\r\n // Central region\r\n q = p - 0.5;\r\n r = q * q;\r\n return (\r\n ((((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r + a[5]) *\r\n q) /\r\n (((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1)\r\n );\r\n }\r\n }\r\n\r\n getMean(): number {\r\n return this.mean;\r\n }\r\n\r\n sample(): number {\r\n const p = Math.random();\r\n const z = this.quantile(p);\r\n return this.mean + z * this.stdDev;\r\n }\r\n\r\n density(x: number): number {\r\n const coeff = 1 / (this.stdDev * Math.sqrt(TWO_PI));\r\n const exponent = -((x - this.mean) ** 2) / (2 * this.stdDev ** 2);\r\n return coeff * Math.exp(exponent);\r\n }\r\n\r\n getVariance(): number {\r\n return this.variance;\r\n }\r\n\r\n getStdDev(): number {\r\n return this.stdDev;\r\n }\r\n}\r\n","import { PDF } from \"./pdf\";\r\n\r\nexport class Uniform implements PDF {\r\n private readonly diff: number;\r\n\r\n constructor(public readonly min: number, public readonly max: number) {\r\n if (min >= max) {\r\n throw new Error(\"Min must be lower than max\");\r\n }\r\n this.diff = max - min;\r\n }\r\n\r\n getAccumulated(x: number): number {\r\n if (x < this.min) {\r\n return 0;\r\n }\r\n\r\n if (x > this.max) {\r\n return 1;\r\n }\r\n\r\n return (x - this.min) / this.diff;\r\n }\r\n\r\n getMean(): number {\r\n return (this.max + this.min) * 0.5;\r\n }\r\n\r\n sample(): number {\r\n return Math.random() * this.diff + this.min;\r\n }\r\n\r\n density(x: number): number {\r\n if (x < this.min || x > this.max) {\r\n return 0;\r\n }\r\n return 1 / this.diff;\r\n }\r\n\r\n getVariance(): number {\r\n return this.diff ** 2 / 12;\r\n }\r\n\r\n getStdDev(): number {\r\n return this.diff / Math.sqrt(12);\r\n }\r\n\r\n quantile(p: number): number {\r\n return this.min + p * (this.max - this.min);\r\n }\r\n}\r\n","import { combination } from \"@rgsoft/math\";\r\nimport { PMF } from \"./pmf\";\r\n\r\nexport class Binomial implements PMF {\r\n private readonly probabilities: number[];\r\n private readonly accumulative: number[];\r\n private readonly variance: number;\r\n private readonly stdDev: number;\r\n\r\n constructor(private readonly n: number, private readonly p: number) {\r\n if (!Number.isInteger(n) || n < 1) {\r\n throw new Error(\"The number of experiments must be a positive integer\");\r\n }\r\n\r\n if (!(p >= 0 && p <= 1)) {\r\n throw new Error(\"The success probability must be between 0 and 1\");\r\n }\r\n\r\n this.variance = n * p * (1 - p);\r\n this.stdDev = Math.sqrt(this.variance);\r\n this.probabilities = Array(n + 1)\r\n .fill(0)\r\n .map((_, i: number) => combination(n, i) * p ** i * (1 - p) ** (n - i));\r\n let acc = 0;\r\n this.accumulative = this.probabilities.map((p) => {\r\n acc += p;\r\n return acc;\r\n });\r\n }\r\n\r\n getAccumulated(x: number): number {\r\n x = Math.floor(x);\r\n if (isNaN(x)) {\r\n throw new Error(\"Number expected\");\r\n }\r\n if (x < 0) {\r\n return 0;\r\n }\r\n if (x > this.n) {\r\n return 1;\r\n }\r\n\r\n return this.accumulative[x];\r\n }\r\n\r\n sample(): number {\r\n const rnd = Math.random();\r\n return this.accumulative.findIndex((acc) => rnd < acc);\r\n }\r\n\r\n getMean(): number {\r\n return this.n * this.p;\r\n }\r\n\r\n getVariance(): number {\r\n return this.variance;\r\n }\r\n\r\n getStdDev(): number {\r\n return this.stdDev;\r\n }\r\n\r\n probability(x: number): number {\r\n if (!Number.isInteger(x) || x < 0) {\r\n throw new Error(\"The value must be a positive integer\");\r\n }\r\n if (x > this.n) {\r\n throw new Error(\"The value cannot ve larger than the experiments number\");\r\n }\r\n return this.probabilities[x];\r\n }\r\n}\r\n","import { combination } from \"@rgsoft/math\";\r\nimport { PMF } from \"./pmf\";\r\n\r\nexport class NegativeBinomial implements PMF {\r\n private readonly accumulative: number[] = [];\r\n private readonly mean: number;\r\n private readonly variance: number;\r\n private readonly stdDev: number;\r\n\r\n constructor(private readonly r: number, private readonly p: number) {\r\n if (!Number.isInteger(r) || r < 1) {\r\n throw new Error(\"The number of experiments must be a positive integer\");\r\n }\r\n\r\n if (!(p > 0 && p < 1)) {\r\n throw new Error(\"The success probability must be between 0 and 1\");\r\n }\r\n\r\n this.mean = (r * (1 - p)) / p;\r\n this.variance = (r * (1 - p)) / (p * p);\r\n this.stdDev = Math.sqrt(r * (1 - p)) / p;\r\n }\r\n\r\n getAccumulated(x: number): number {\r\n x = Math.floor(x);\r\n if (isNaN(x)) {\r\n throw new Error(\"Number expected\");\r\n }\r\n if (x < 0) {\r\n return 0;\r\n }\r\n if (this.accumulative.length > x) {\r\n return this.accumulative[x];\r\n }\r\n let i = this.accumulative.length;\r\n let acc = i > 0 ? this.accumulative[i - 1] : 0;\r\n do {\r\n acc += this.probability(i);\r\n this.accumulative.push(acc);\r\n i++;\r\n } while (i <= x);\r\n return this.accumulative[x];\r\n }\r\n\r\n getMean(): number {\r\n return this.mean;\r\n }\r\n\r\n getVariance(): number {\r\n return this.variance;\r\n }\r\n\r\n getStdDev(): number {\r\n return this.stdDev;\r\n }\r\n\r\n sample(): number {\r\n const rnd = Math.random();\r\n let i = 0;\r\n while (i < this.accumulative.length) {\r\n if (rnd < this.accumulative[i]) {\r\n return i;\r\n }\r\n i++;\r\n }\r\n let acc = i > 0 ? this.accumulative[i - 1] : 0;\r\n do {\r\n acc += this.probability(i);\r\n this.accumulative.push(acc);\r\n i++;\r\n } while (rnd > acc);\r\n return i - 1;\r\n }\r\n\r\n probability(x: number): number {\r\n if (!Number.isInteger(x) || x < 0) {\r\n throw new Error(\"The value must be a positive integer\");\r\n }\r\n return (\r\n combination(this.r + x - 1, x) * this.p ** this.r * (1 - this.p) ** x\r\n );\r\n }\r\n}\r\n","import { factorial } from \"@rgsoft/math\";\r\nimport { PMF } from \"./pmf\";\r\n\r\nexport class Poisson implements PMF {\r\n private readonly accumulative: number[] = [];\r\n private readonly mean: number;\r\n private readonly variance: number;\r\n private readonly stdDev: number;\r\n\r\n constructor(private readonly l: number) {\r\n if (!Number.isInteger(l) || l < 0) {\r\n throw new Error(\"The number of experiments must be a positive integer\");\r\n }\r\n this.mean = l;\r\n this.variance = l;\r\n this.stdDev = Math.sqrt(l);\r\n }\r\n\r\n getAccumulated(x: number): number {\r\n x = Math.floor(x);\r\n if (isNaN(x)) {\r\n throw new Error(\"Number expected\");\r\n }\r\n if (x < 0) {\r\n return 0;\r\n }\r\n if (this.accumulative.length > x) {\r\n return this.accumulative[x];\r\n }\r\n let i = this.accumulative.length;\r\n let acc = i > 0 ? this.accumulative[i - 1] : 0;\r\n do {\r\n acc += this.probability(i);\r\n this.accumulative.push(acc);\r\n i++;\r\n } while (i <= x);\r\n return this.accumulative[x];\r\n }\r\n\r\n sample(): number {\r\n const rnd = Math.random();\r\n let i = 0;\r\n while (i < this.accumulative.length) {\r\n if (rnd < this.accumulative[i]) {\r\n return i;\r\n }\r\n i++;\r\n }\r\n let acc = i > 0 ? this.accumulative[i - 1] : 0;\r\n do {\r\n acc += this.probability(i);\r\n this.accumulative.push(acc);\r\n i++;\r\n } while (rnd > acc);\r\n return i - 1;\r\n }\r\n\r\n getMean(): number {\r\n return this.mean;\r\n }\r\n\r\n getVariance(): number {\r\n return this.variance;\r\n }\r\n\r\n getStdDev(): number {\r\n return this.stdDev;\r\n }\r\n\r\n probability(x: number): number {\r\n if (!Number.isInteger(x) || x < 0) {\r\n throw new Error(\"The value must be a positive integer\");\r\n }\r\n return (this.l ** x * Math.exp(-this.l)) / factorial(x);\r\n }\r\n}","export class Stats {\r\n private readonly orderedData: number[];\r\n private readonly data: number[];\r\n\r\n private _mean?: number;\r\n private _variance?: number;\r\n private _stdDev?: number;\r\n private _q1?: number;\r\n private _q2?: number;\r\n private _q3?: number;\r\n private _normalized?: number[];\r\n private _zScores?: number[];\r\n\r\n constructor(data: number[]) {\r\n if (!Array.isArray(data) || data.length === 0) {\r\n throw new Error('Data must be an array of numbers');\r\n }\r\n this.data = [...data];\r\n this.orderedData = [...data].sort((a, b) => a - b);\r\n }\r\n\r\n get mean(): number {\r\n if (this._mean === undefined) {\r\n this._mean = this.orderedData.reduce((a, b) => a + b, 0) / this.orderedData.length;\r\n }\r\n return this._mean;\r\n }\r\n\r\n get median(): number {\r\n return this.q2;\r\n }\r\n\r\n get variance(): number {\r\n if (this._variance === undefined) {\r\n this._variance =\r\n this.orderedData.reduce((a, b) => a + (b - this.mean) ** 2, 0) /\r\n this.orderedData.length;\r\n }\r\n return this._variance;\r\n }\r\n\r\n get stdDev(): number {\r\n if (this._stdDev === undefined) {\r\n this._stdDev = Math.sqrt(this.variance);\r\n }\r\n return this._stdDev;\r\n }\r\n\r\n get q1(): number {\r\n if (this._q1 === undefined) {\r\n this._q1 = this.percentile(25);\r\n }\r\n return this._q1;\r\n }\r\n\r\n get q2(): number {\r\n if (this._q2 === undefined) {\r\n this._q2 = this.percentile(50);\r\n }\r\n return this._q2;\r\n }\r\n\r\n get q3(): number {\r\n if (this._q3 === undefined) {\r\n this._q3 = this.percentile(75);\r\n }\r\n return this._q3;\r\n }\r\n\r\n get zScores(): number[] {\r\n if (this._zScores === undefined) {\r\n const mean = this.mean;\r\n const sd = this.stdDev;\r\n this._zScores = this.data.map(x => (x - mean) / sd);\r\n }\r\n return this._zScores;\r\n }\r\n\r\n get normalized(): number[] {\r\n if (this._normalized === undefined) {\r\n const min = this.orderedData[0];\r\n const max = this.orderedData[this.orderedData.length - 1];\r\n this._normalized = this.data.map((x) => (x - min) / (max - min));\r\n }\r\n return this._normalized;\r\n }\r\n\r\n private percentile(p: number): number {\r\n const idx = (p / 100) * (this.orderedData.length - 1);\r\n const lo = Math.floor(idx);\r\n const hi = Math.ceil(idx);\r\n return lo === hi\r\n ? this.orderedData[lo]\r\n : this.orderedData[lo] + (this.orderedData[hi] - this.orderedData[lo]) * (idx - lo);\r\n }\r\n}\r\n"],"mappings":"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","names":["import_math","p","import_math","import_math"]}