@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 +21 -0
- package/README.md +18 -0
- package/dist/index.cjs +486 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +179 -0
- package/dist/index.d.ts +179 -0
- package/dist/index.mjs +452 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +45 -0
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
// src/pdf/erf.ts
|
|
2
|
+
function erf(z) {
|
|
3
|
+
const t = 1 / (1 + 0.5 * Math.abs(z));
|
|
4
|
+
const tau = t * Math.exp(
|
|
5
|
+
-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
|
|
6
|
+
);
|
|
7
|
+
return z >= 0 ? 1 - tau : tau - 1;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// src/pdf/exponential.ts
|
|
11
|
+
var Exponential = class {
|
|
12
|
+
constructor(mean) {
|
|
13
|
+
this.mean = mean;
|
|
14
|
+
if (mean <= 0) {
|
|
15
|
+
throw new Error("Mean must be greater than zero");
|
|
16
|
+
}
|
|
17
|
+
this.lambda = 1 / mean;
|
|
18
|
+
}
|
|
19
|
+
getAccumulated(x) {
|
|
20
|
+
if (x < 0) {
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
return 1 - Math.exp(-this.lambda * x);
|
|
24
|
+
}
|
|
25
|
+
sample() {
|
|
26
|
+
const p = Math.min(Math.random(), 1 - Number.EPSILON);
|
|
27
|
+
return -1 * Math.log(1 - p) * this.mean;
|
|
28
|
+
}
|
|
29
|
+
getMean() {
|
|
30
|
+
return this.mean;
|
|
31
|
+
}
|
|
32
|
+
density(x) {
|
|
33
|
+
if (x < 0) {
|
|
34
|
+
return 0;
|
|
35
|
+
}
|
|
36
|
+
return this.lambda * Math.exp(-this.lambda * x);
|
|
37
|
+
}
|
|
38
|
+
getVariance() {
|
|
39
|
+
return this.mean ** 2;
|
|
40
|
+
}
|
|
41
|
+
getStdDev() {
|
|
42
|
+
return this.mean;
|
|
43
|
+
}
|
|
44
|
+
quantile(p) {
|
|
45
|
+
return -Math.log(1 - p) * this.mean;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// src/pdf/gaussian.ts
|
|
50
|
+
import { TWO_PI } from "@rgsoft/math";
|
|
51
|
+
var Gaussian = class {
|
|
52
|
+
constructor(mean = 0, variance = 1) {
|
|
53
|
+
this.mean = mean;
|
|
54
|
+
this.variance = variance;
|
|
55
|
+
if (variance <= 0) {
|
|
56
|
+
throw new Error("Variance must be positive");
|
|
57
|
+
}
|
|
58
|
+
this.stdDev = Math.sqrt(variance);
|
|
59
|
+
}
|
|
60
|
+
getAccumulated(x) {
|
|
61
|
+
const z = (x - this.mean) / Math.sqrt(2 * this.variance);
|
|
62
|
+
return 0.5 * (1 + erf(z));
|
|
63
|
+
}
|
|
64
|
+
quantile(p) {
|
|
65
|
+
if (p < 0 || p > 1) {
|
|
66
|
+
throw new Error("Accumulated value must be between 0 and 1");
|
|
67
|
+
}
|
|
68
|
+
if (p === 0) return -Infinity;
|
|
69
|
+
if (p === 1) return Infinity;
|
|
70
|
+
const a = [
|
|
71
|
+
-39.6968302866538,
|
|
72
|
+
220.946098424521,
|
|
73
|
+
-275.928510446969,
|
|
74
|
+
138.357751867269,
|
|
75
|
+
-30.6647980661472,
|
|
76
|
+
2.50662827745924
|
|
77
|
+
];
|
|
78
|
+
const b = [
|
|
79
|
+
-54.4760987982241,
|
|
80
|
+
161.585836858041,
|
|
81
|
+
-155.698979859887,
|
|
82
|
+
66.8013118877197,
|
|
83
|
+
-13.2806815528857
|
|
84
|
+
];
|
|
85
|
+
const c = [
|
|
86
|
+
-0.00778489400243029,
|
|
87
|
+
-0.322396458041136,
|
|
88
|
+
-2.40075827716184,
|
|
89
|
+
-2.54973253934373,
|
|
90
|
+
4.37466414146497,
|
|
91
|
+
2.93816398269878
|
|
92
|
+
];
|
|
93
|
+
const d = [
|
|
94
|
+
0.00778469570904146,
|
|
95
|
+
0.32246712907004,
|
|
96
|
+
2.445134137143,
|
|
97
|
+
3.75440866190742
|
|
98
|
+
];
|
|
99
|
+
let q, r;
|
|
100
|
+
if (p < 0.02425) {
|
|
101
|
+
q = Math.sqrt(-2 * Math.log(p));
|
|
102
|
+
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);
|
|
103
|
+
} else if (p > 1 - 0.02425) {
|
|
104
|
+
q = Math.sqrt(-2 * Math.log(1 - p));
|
|
105
|
+
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);
|
|
106
|
+
} else {
|
|
107
|
+
q = p - 0.5;
|
|
108
|
+
r = q * q;
|
|
109
|
+
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);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
getMean() {
|
|
113
|
+
return this.mean;
|
|
114
|
+
}
|
|
115
|
+
sample() {
|
|
116
|
+
const p = Math.random();
|
|
117
|
+
const z = this.quantile(p);
|
|
118
|
+
return this.mean + z * this.stdDev;
|
|
119
|
+
}
|
|
120
|
+
density(x) {
|
|
121
|
+
const coeff = 1 / (this.stdDev * Math.sqrt(TWO_PI));
|
|
122
|
+
const exponent = -((x - this.mean) ** 2) / (2 * this.stdDev ** 2);
|
|
123
|
+
return coeff * Math.exp(exponent);
|
|
124
|
+
}
|
|
125
|
+
getVariance() {
|
|
126
|
+
return this.variance;
|
|
127
|
+
}
|
|
128
|
+
getStdDev() {
|
|
129
|
+
return this.stdDev;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
// src/pdf/uniform.ts
|
|
134
|
+
var Uniform = class {
|
|
135
|
+
constructor(min, max) {
|
|
136
|
+
this.min = min;
|
|
137
|
+
this.max = max;
|
|
138
|
+
if (min >= max) {
|
|
139
|
+
throw new Error("Min must be lower than max");
|
|
140
|
+
}
|
|
141
|
+
this.diff = max - min;
|
|
142
|
+
}
|
|
143
|
+
getAccumulated(x) {
|
|
144
|
+
if (x < this.min) {
|
|
145
|
+
return 0;
|
|
146
|
+
}
|
|
147
|
+
if (x > this.max) {
|
|
148
|
+
return 1;
|
|
149
|
+
}
|
|
150
|
+
return (x - this.min) / this.diff;
|
|
151
|
+
}
|
|
152
|
+
getMean() {
|
|
153
|
+
return (this.max + this.min) * 0.5;
|
|
154
|
+
}
|
|
155
|
+
sample() {
|
|
156
|
+
return Math.random() * this.diff + this.min;
|
|
157
|
+
}
|
|
158
|
+
density(x) {
|
|
159
|
+
if (x < this.min || x > this.max) {
|
|
160
|
+
return 0;
|
|
161
|
+
}
|
|
162
|
+
return 1 / this.diff;
|
|
163
|
+
}
|
|
164
|
+
getVariance() {
|
|
165
|
+
return this.diff ** 2 / 12;
|
|
166
|
+
}
|
|
167
|
+
getStdDev() {
|
|
168
|
+
return this.diff / Math.sqrt(12);
|
|
169
|
+
}
|
|
170
|
+
quantile(p) {
|
|
171
|
+
return this.min + p * (this.max - this.min);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
// src/pmf/binomial.ts
|
|
176
|
+
import { combination } from "@rgsoft/math";
|
|
177
|
+
var Binomial = class {
|
|
178
|
+
constructor(n, p) {
|
|
179
|
+
this.n = n;
|
|
180
|
+
this.p = p;
|
|
181
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
182
|
+
throw new Error("The number of experiments must be a positive integer");
|
|
183
|
+
}
|
|
184
|
+
if (!(p >= 0 && p <= 1)) {
|
|
185
|
+
throw new Error("The success probability must be between 0 and 1");
|
|
186
|
+
}
|
|
187
|
+
this.variance = n * p * (1 - p);
|
|
188
|
+
this.stdDev = Math.sqrt(this.variance);
|
|
189
|
+
this.probabilities = Array(n + 1).fill(0).map((_, i) => combination(n, i) * p ** i * (1 - p) ** (n - i));
|
|
190
|
+
let acc = 0;
|
|
191
|
+
this.accumulative = this.probabilities.map((p2) => {
|
|
192
|
+
acc += p2;
|
|
193
|
+
return acc;
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
getAccumulated(x) {
|
|
197
|
+
x = Math.floor(x);
|
|
198
|
+
if (isNaN(x)) {
|
|
199
|
+
throw new Error("Number expected");
|
|
200
|
+
}
|
|
201
|
+
if (x < 0) {
|
|
202
|
+
return 0;
|
|
203
|
+
}
|
|
204
|
+
if (x > this.n) {
|
|
205
|
+
return 1;
|
|
206
|
+
}
|
|
207
|
+
return this.accumulative[x];
|
|
208
|
+
}
|
|
209
|
+
sample() {
|
|
210
|
+
const rnd = Math.random();
|
|
211
|
+
return this.accumulative.findIndex((acc) => rnd < acc);
|
|
212
|
+
}
|
|
213
|
+
getMean() {
|
|
214
|
+
return this.n * this.p;
|
|
215
|
+
}
|
|
216
|
+
getVariance() {
|
|
217
|
+
return this.variance;
|
|
218
|
+
}
|
|
219
|
+
getStdDev() {
|
|
220
|
+
return this.stdDev;
|
|
221
|
+
}
|
|
222
|
+
probability(x) {
|
|
223
|
+
if (!Number.isInteger(x) || x < 0) {
|
|
224
|
+
throw new Error("The value must be a positive integer");
|
|
225
|
+
}
|
|
226
|
+
if (x > this.n) {
|
|
227
|
+
throw new Error("The value cannot ve larger than the experiments number");
|
|
228
|
+
}
|
|
229
|
+
return this.probabilities[x];
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
// src/pmf/negative-binomial.ts
|
|
234
|
+
import { combination as combination2 } from "@rgsoft/math";
|
|
235
|
+
var NegativeBinomial = class {
|
|
236
|
+
constructor(r, p) {
|
|
237
|
+
this.r = r;
|
|
238
|
+
this.p = p;
|
|
239
|
+
this.accumulative = [];
|
|
240
|
+
if (!Number.isInteger(r) || r < 1) {
|
|
241
|
+
throw new Error("The number of experiments must be a positive integer");
|
|
242
|
+
}
|
|
243
|
+
if (!(p > 0 && p < 1)) {
|
|
244
|
+
throw new Error("The success probability must be between 0 and 1");
|
|
245
|
+
}
|
|
246
|
+
this.mean = r * (1 - p) / p;
|
|
247
|
+
this.variance = r * (1 - p) / (p * p);
|
|
248
|
+
this.stdDev = Math.sqrt(r * (1 - p)) / p;
|
|
249
|
+
}
|
|
250
|
+
getAccumulated(x) {
|
|
251
|
+
x = Math.floor(x);
|
|
252
|
+
if (isNaN(x)) {
|
|
253
|
+
throw new Error("Number expected");
|
|
254
|
+
}
|
|
255
|
+
if (x < 0) {
|
|
256
|
+
return 0;
|
|
257
|
+
}
|
|
258
|
+
if (this.accumulative.length > x) {
|
|
259
|
+
return this.accumulative[x];
|
|
260
|
+
}
|
|
261
|
+
let i = this.accumulative.length;
|
|
262
|
+
let acc = i > 0 ? this.accumulative[i - 1] : 0;
|
|
263
|
+
do {
|
|
264
|
+
acc += this.probability(i);
|
|
265
|
+
this.accumulative.push(acc);
|
|
266
|
+
i++;
|
|
267
|
+
} while (i <= x);
|
|
268
|
+
return this.accumulative[x];
|
|
269
|
+
}
|
|
270
|
+
getMean() {
|
|
271
|
+
return this.mean;
|
|
272
|
+
}
|
|
273
|
+
getVariance() {
|
|
274
|
+
return this.variance;
|
|
275
|
+
}
|
|
276
|
+
getStdDev() {
|
|
277
|
+
return this.stdDev;
|
|
278
|
+
}
|
|
279
|
+
sample() {
|
|
280
|
+
const rnd = Math.random();
|
|
281
|
+
let i = 0;
|
|
282
|
+
while (i < this.accumulative.length) {
|
|
283
|
+
if (rnd < this.accumulative[i]) {
|
|
284
|
+
return i;
|
|
285
|
+
}
|
|
286
|
+
i++;
|
|
287
|
+
}
|
|
288
|
+
let acc = i > 0 ? this.accumulative[i - 1] : 0;
|
|
289
|
+
do {
|
|
290
|
+
acc += this.probability(i);
|
|
291
|
+
this.accumulative.push(acc);
|
|
292
|
+
i++;
|
|
293
|
+
} while (rnd > acc);
|
|
294
|
+
return i - 1;
|
|
295
|
+
}
|
|
296
|
+
probability(x) {
|
|
297
|
+
if (!Number.isInteger(x) || x < 0) {
|
|
298
|
+
throw new Error("The value must be a positive integer");
|
|
299
|
+
}
|
|
300
|
+
return combination2(this.r + x - 1, x) * this.p ** this.r * (1 - this.p) ** x;
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
// src/pmf/poisson.ts
|
|
305
|
+
import { factorial } from "@rgsoft/math";
|
|
306
|
+
var Poisson = class {
|
|
307
|
+
constructor(l) {
|
|
308
|
+
this.l = l;
|
|
309
|
+
this.accumulative = [];
|
|
310
|
+
if (!Number.isInteger(l) || l < 0) {
|
|
311
|
+
throw new Error("The number of experiments must be a positive integer");
|
|
312
|
+
}
|
|
313
|
+
this.mean = l;
|
|
314
|
+
this.variance = l;
|
|
315
|
+
this.stdDev = Math.sqrt(l);
|
|
316
|
+
}
|
|
317
|
+
getAccumulated(x) {
|
|
318
|
+
x = Math.floor(x);
|
|
319
|
+
if (isNaN(x)) {
|
|
320
|
+
throw new Error("Number expected");
|
|
321
|
+
}
|
|
322
|
+
if (x < 0) {
|
|
323
|
+
return 0;
|
|
324
|
+
}
|
|
325
|
+
if (this.accumulative.length > x) {
|
|
326
|
+
return this.accumulative[x];
|
|
327
|
+
}
|
|
328
|
+
let i = this.accumulative.length;
|
|
329
|
+
let acc = i > 0 ? this.accumulative[i - 1] : 0;
|
|
330
|
+
do {
|
|
331
|
+
acc += this.probability(i);
|
|
332
|
+
this.accumulative.push(acc);
|
|
333
|
+
i++;
|
|
334
|
+
} while (i <= x);
|
|
335
|
+
return this.accumulative[x];
|
|
336
|
+
}
|
|
337
|
+
sample() {
|
|
338
|
+
const rnd = Math.random();
|
|
339
|
+
let i = 0;
|
|
340
|
+
while (i < this.accumulative.length) {
|
|
341
|
+
if (rnd < this.accumulative[i]) {
|
|
342
|
+
return i;
|
|
343
|
+
}
|
|
344
|
+
i++;
|
|
345
|
+
}
|
|
346
|
+
let acc = i > 0 ? this.accumulative[i - 1] : 0;
|
|
347
|
+
do {
|
|
348
|
+
acc += this.probability(i);
|
|
349
|
+
this.accumulative.push(acc);
|
|
350
|
+
i++;
|
|
351
|
+
} while (rnd > acc);
|
|
352
|
+
return i - 1;
|
|
353
|
+
}
|
|
354
|
+
getMean() {
|
|
355
|
+
return this.mean;
|
|
356
|
+
}
|
|
357
|
+
getVariance() {
|
|
358
|
+
return this.variance;
|
|
359
|
+
}
|
|
360
|
+
getStdDev() {
|
|
361
|
+
return this.stdDev;
|
|
362
|
+
}
|
|
363
|
+
probability(x) {
|
|
364
|
+
if (!Number.isInteger(x) || x < 0) {
|
|
365
|
+
throw new Error("The value must be a positive integer");
|
|
366
|
+
}
|
|
367
|
+
return this.l ** x * Math.exp(-this.l) / factorial(x);
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
// src/stats.ts
|
|
372
|
+
var Stats = class {
|
|
373
|
+
constructor(data) {
|
|
374
|
+
if (!Array.isArray(data) || data.length === 0) {
|
|
375
|
+
throw new Error("Data must be an array of numbers");
|
|
376
|
+
}
|
|
377
|
+
this.data = [...data];
|
|
378
|
+
this.orderedData = [...data].sort((a, b) => a - b);
|
|
379
|
+
}
|
|
380
|
+
get mean() {
|
|
381
|
+
if (this._mean === void 0) {
|
|
382
|
+
this._mean = this.orderedData.reduce((a, b) => a + b, 0) / this.orderedData.length;
|
|
383
|
+
}
|
|
384
|
+
return this._mean;
|
|
385
|
+
}
|
|
386
|
+
get median() {
|
|
387
|
+
return this.q2;
|
|
388
|
+
}
|
|
389
|
+
get variance() {
|
|
390
|
+
if (this._variance === void 0) {
|
|
391
|
+
this._variance = this.orderedData.reduce((a, b) => a + (b - this.mean) ** 2, 0) / this.orderedData.length;
|
|
392
|
+
}
|
|
393
|
+
return this._variance;
|
|
394
|
+
}
|
|
395
|
+
get stdDev() {
|
|
396
|
+
if (this._stdDev === void 0) {
|
|
397
|
+
this._stdDev = Math.sqrt(this.variance);
|
|
398
|
+
}
|
|
399
|
+
return this._stdDev;
|
|
400
|
+
}
|
|
401
|
+
get q1() {
|
|
402
|
+
if (this._q1 === void 0) {
|
|
403
|
+
this._q1 = this.percentile(25);
|
|
404
|
+
}
|
|
405
|
+
return this._q1;
|
|
406
|
+
}
|
|
407
|
+
get q2() {
|
|
408
|
+
if (this._q2 === void 0) {
|
|
409
|
+
this._q2 = this.percentile(50);
|
|
410
|
+
}
|
|
411
|
+
return this._q2;
|
|
412
|
+
}
|
|
413
|
+
get q3() {
|
|
414
|
+
if (this._q3 === void 0) {
|
|
415
|
+
this._q3 = this.percentile(75);
|
|
416
|
+
}
|
|
417
|
+
return this._q3;
|
|
418
|
+
}
|
|
419
|
+
get zScores() {
|
|
420
|
+
if (this._zScores === void 0) {
|
|
421
|
+
const mean = this.mean;
|
|
422
|
+
const sd = this.stdDev;
|
|
423
|
+
this._zScores = this.data.map((x) => (x - mean) / sd);
|
|
424
|
+
}
|
|
425
|
+
return this._zScores;
|
|
426
|
+
}
|
|
427
|
+
get normalized() {
|
|
428
|
+
if (this._normalized === void 0) {
|
|
429
|
+
const min = this.orderedData[0];
|
|
430
|
+
const max = this.orderedData[this.orderedData.length - 1];
|
|
431
|
+
this._normalized = this.data.map((x) => (x - min) / (max - min));
|
|
432
|
+
}
|
|
433
|
+
return this._normalized;
|
|
434
|
+
}
|
|
435
|
+
percentile(p) {
|
|
436
|
+
const idx = p / 100 * (this.orderedData.length - 1);
|
|
437
|
+
const lo = Math.floor(idx);
|
|
438
|
+
const hi = Math.ceil(idx);
|
|
439
|
+
return lo === hi ? this.orderedData[lo] : this.orderedData[lo] + (this.orderedData[hi] - this.orderedData[lo]) * (idx - lo);
|
|
440
|
+
}
|
|
441
|
+
};
|
|
442
|
+
export {
|
|
443
|
+
Binomial,
|
|
444
|
+
Exponential,
|
|
445
|
+
Gaussian,
|
|
446
|
+
NegativeBinomial,
|
|
447
|
+
Poisson,
|
|
448
|
+
Stats,
|
|
449
|
+
Uniform,
|
|
450
|
+
erf
|
|
451
|
+
};
|
|
452
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../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 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":["p","combination"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rgsoft/stats",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Yet another JS math library",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.mjs",
|
|
15
|
+
"require": "./dist/index.cjs"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/rgmiranda/rgsoft.git"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"probability",
|
|
24
|
+
"statistics"
|
|
25
|
+
],
|
|
26
|
+
"author": "Ricardo Miranda <rgmiranda@live.com.ar>",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/rgmiranda/rgsoft/issues"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/rgmiranda/rgsoft#readme",
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@rgsoft/math": "^2.0.2"
|
|
34
|
+
},
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
},
|
|
38
|
+
"type": "module",
|
|
39
|
+
"sideEffects": false,
|
|
40
|
+
"scripts": {
|
|
41
|
+
"test": "vitest",
|
|
42
|
+
"coverage": "vitest run --coverage",
|
|
43
|
+
"build": "tsup"
|
|
44
|
+
}
|
|
45
|
+
}
|