pragmastat 3.1.29 → 3.1.32
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/README.md +4 -4
- package/dist/estimators.d.ts +1 -0
- package/dist/estimators.d.ts.map +1 -1
- package/dist/estimators.js +3 -7
- package/dist/estimators.js.map +1 -1
- package/dist/fastShift.d.ts +20 -0
- package/dist/fastShift.d.ts.map +1 -0
- package/dist/fastShift.js +174 -0
- package/dist/fastShift.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
This is a TypeScript implementation of 'Pragmastat: Pragmatic Statistical Toolkit', which presents a toolkit of statistical procedures that provide reliable results across diverse real-world distributions, with ready-to-use implementations and detailed explanations.
|
|
4
4
|
|
|
5
|
-
- PDF manual for this version: [pragmastat-v3.1.
|
|
6
|
-
- Markdown manual for this version: [pragmastat-v3.1.
|
|
7
|
-
- Source code for this version: [pragmastat/ts/v3.1.
|
|
5
|
+
- PDF manual for this version: [pragmastat-v3.1.32.pdf](https://github.com/AndreyAkinshin/pragmastat/releases/download/v3.1.32/pragmastat-v3.1.32.pdf)
|
|
6
|
+
- Markdown manual for this version: [pragmastat-v3.1.32.md](https://github.com/AndreyAkinshin/pragmastat/releases/download/v3.1.32/pragmastat-v3.1.32.md)
|
|
7
|
+
- Source code for this version: [pragmastat/ts/v3.1.32](https://github.com/AndreyAkinshin/pragmastat/tree/v3.1.32/ts)
|
|
8
8
|
- Latest online manual: https://pragmastat.dev
|
|
9
9
|
- Manual DOI: [10.5281/zenodo.17236778](https://doi.org/10.5281/zenodo.17236778)
|
|
10
10
|
|
|
@@ -13,7 +13,7 @@ This is a TypeScript implementation of 'Pragmastat: Pragmatic Statistical Toolki
|
|
|
13
13
|
Install from npm:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
npm i pragmastat@3.1.
|
|
16
|
+
npm i pragmastat@3.1.32
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
## Demo
|
package/dist/estimators.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export declare function spread(x: number[]): number;
|
|
|
23
23
|
export declare function relSpread(x: number[]): number;
|
|
24
24
|
/**
|
|
25
25
|
* Calculate the Shift - median of all pairwise differences (x[i] - y[j])
|
|
26
|
+
* Uses fast O((m + n) * log(precision)) algorithm.
|
|
26
27
|
* @param x First sample
|
|
27
28
|
* @param y Second sample
|
|
28
29
|
* @returns The shift estimate
|
package/dist/estimators.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimators.d.ts","sourceRoot":"","sources":["../src/estimators.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"estimators.d.ts","sourceRoot":"","sources":["../src/estimators.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAE1C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAa7C;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAStD;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBtD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAa1D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAa1D"}
|
package/dist/estimators.js
CHANGED
|
@@ -13,6 +13,7 @@ exports.disparity = disparity;
|
|
|
13
13
|
const utils_1 = require("./utils");
|
|
14
14
|
const fastCenter_1 = require("./fastCenter");
|
|
15
15
|
const fastSpread_1 = require("./fastSpread");
|
|
16
|
+
const fastShift_1 = require("./fastShift");
|
|
16
17
|
/**
|
|
17
18
|
* Calculate the Center - median of all pairwise averages (x[i] + x[j])/2
|
|
18
19
|
* Uses fast O(n log n) algorithm.
|
|
@@ -49,6 +50,7 @@ function relSpread(x) {
|
|
|
49
50
|
}
|
|
50
51
|
/**
|
|
51
52
|
* Calculate the Shift - median of all pairwise differences (x[i] - y[j])
|
|
53
|
+
* Uses fast O((m + n) * log(precision)) algorithm.
|
|
52
54
|
* @param x First sample
|
|
53
55
|
* @param y Second sample
|
|
54
56
|
* @returns The shift estimate
|
|
@@ -59,13 +61,7 @@ function shift(x, y) {
|
|
|
59
61
|
if (nx === 0 || ny === 0) {
|
|
60
62
|
throw new Error('Input arrays cannot be empty');
|
|
61
63
|
}
|
|
62
|
-
|
|
63
|
-
for (let i = 0; i < nx; i++) {
|
|
64
|
-
for (let j = 0; j < ny; j++) {
|
|
65
|
-
pairwiseDifferences.push(x[i] - y[j]);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return (0, utils_1.median)(pairwiseDifferences);
|
|
64
|
+
return (0, fastShift_1.fastShift)(x, y, [0.5], false)[0];
|
|
69
65
|
}
|
|
70
66
|
/**
|
|
71
67
|
* Calculate the Ratio - median of all pairwise ratios (x[i] / y[j])
|
package/dist/estimators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimators.js","sourceRoot":"","sources":["../src/estimators.ts"],"names":[],"mappings":";AAAA;;GAEG;;
|
|
1
|
+
{"version":3,"file":"estimators.js","sourceRoot":"","sources":["../src/estimators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fast O((m + n) * log(precision)) implementation for computing quantiles
|
|
3
|
+
* of all pairwise differences {x_i - y_j}.
|
|
4
|
+
*
|
|
5
|
+
* Based on binary search with two-pointer counting algorithm.
|
|
6
|
+
* Internal implementation - not part of public API.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Computes quantiles of all pairwise differences { x_i - y_j }.
|
|
10
|
+
* Time: O((m + n) * log(precision)) per quantile. Space: O(1).
|
|
11
|
+
*
|
|
12
|
+
* @param x First array of numeric values
|
|
13
|
+
* @param y Second array of numeric values
|
|
14
|
+
* @param p Probabilities in [0, 1]
|
|
15
|
+
* @param assumeSorted If false, arrays will be sorted
|
|
16
|
+
* @returns Array of quantile values corresponding to probabilities in p
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare function fastShift(x: number[], y: number[], p: number[], assumeSorted?: boolean): number[];
|
|
20
|
+
//# sourceMappingURL=fastShift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fastShift.d.ts","sourceRoot":"","sources":["../src/fastShift.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,CAAC,EAAE,MAAM,EAAE,EACX,CAAC,EAAE,MAAM,EAAE,EACX,CAAC,EAAE,MAAM,EAAE,EACX,YAAY,GAAE,OAAe,GAC5B,MAAM,EAAE,CAwEV"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Fast O((m + n) * log(precision)) implementation for computing quantiles
|
|
4
|
+
* of all pairwise differences {x_i - y_j}.
|
|
5
|
+
*
|
|
6
|
+
* Based on binary search with two-pointer counting algorithm.
|
|
7
|
+
* Internal implementation - not part of public API.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.fastShift = fastShift;
|
|
11
|
+
/**
|
|
12
|
+
* Computes quantiles of all pairwise differences { x_i - y_j }.
|
|
13
|
+
* Time: O((m + n) * log(precision)) per quantile. Space: O(1).
|
|
14
|
+
*
|
|
15
|
+
* @param x First array of numeric values
|
|
16
|
+
* @param y Second array of numeric values
|
|
17
|
+
* @param p Probabilities in [0, 1]
|
|
18
|
+
* @param assumeSorted If false, arrays will be sorted
|
|
19
|
+
* @returns Array of quantile values corresponding to probabilities in p
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
function fastShift(x, y, p, assumeSorted = false) {
|
|
23
|
+
if (!x || !y || !p) {
|
|
24
|
+
throw new Error('All inputs must be non-null');
|
|
25
|
+
}
|
|
26
|
+
if (x.length === 0 || y.length === 0) {
|
|
27
|
+
throw new Error('x and y must be non-empty');
|
|
28
|
+
}
|
|
29
|
+
// Validate probabilities
|
|
30
|
+
for (const pk of p) {
|
|
31
|
+
if (isNaN(pk) || pk < 0.0 || pk > 1.0) {
|
|
32
|
+
throw new Error('Probabilities must be within [0, 1]');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Sort if needed
|
|
36
|
+
const xs = assumeSorted ? x : [...x].sort((a, b) => a - b);
|
|
37
|
+
const ys = assumeSorted ? y : [...y].sort((a, b) => a - b);
|
|
38
|
+
// Check for NaN in data
|
|
39
|
+
for (const xi of xs) {
|
|
40
|
+
if (isNaN(xi)) {
|
|
41
|
+
throw new Error('NaN values found in x');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
for (const yj of ys) {
|
|
45
|
+
if (isNaN(yj)) {
|
|
46
|
+
throw new Error('NaN values found in y');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const m = xs.length;
|
|
50
|
+
const n = ys.length;
|
|
51
|
+
const total = m * n;
|
|
52
|
+
// Type-7 quantile: h = 1 + (n-1)*p, then interpolate between floor(h) and ceil(h)
|
|
53
|
+
const requiredRanks = new Set();
|
|
54
|
+
const interpolationParams = [];
|
|
55
|
+
for (let i = 0; i < p.length; i++) {
|
|
56
|
+
const h = 1.0 + (total - 1) * p[i];
|
|
57
|
+
let lowerRank = Math.floor(h);
|
|
58
|
+
let upperRank = Math.ceil(h);
|
|
59
|
+
const weight = h - lowerRank;
|
|
60
|
+
if (lowerRank < 1)
|
|
61
|
+
lowerRank = 1;
|
|
62
|
+
if (upperRank > total)
|
|
63
|
+
upperRank = total;
|
|
64
|
+
interpolationParams.push({ lowerRank, upperRank, weight });
|
|
65
|
+
requiredRanks.add(lowerRank);
|
|
66
|
+
requiredRanks.add(upperRank);
|
|
67
|
+
}
|
|
68
|
+
// Compute values for required ranks
|
|
69
|
+
const rankValues = new Map();
|
|
70
|
+
for (const rank of Array.from(requiredRanks).sort((a, b) => a - b)) {
|
|
71
|
+
rankValues.set(rank, selectKthPairwiseDiff(xs, ys, rank));
|
|
72
|
+
}
|
|
73
|
+
// Interpolate to get final quantile values
|
|
74
|
+
const result = [];
|
|
75
|
+
for (const { lowerRank, upperRank, weight } of interpolationParams) {
|
|
76
|
+
const lower = rankValues.get(lowerRank);
|
|
77
|
+
const upper = rankValues.get(upperRank);
|
|
78
|
+
result.push(weight === 0.0 ? lower : (1.0 - weight) * lower + weight * upper);
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Binary search in [min_diff, max_diff] that snaps to actual discrete values.
|
|
84
|
+
* Avoids materializing all m*n differences.
|
|
85
|
+
*/
|
|
86
|
+
function selectKthPairwiseDiff(x, y, k) {
|
|
87
|
+
const m = x.length;
|
|
88
|
+
const n = y.length;
|
|
89
|
+
const total = m * n;
|
|
90
|
+
if (k < 1 || k > total) {
|
|
91
|
+
throw new Error(`k must be between 1 and ${total}`);
|
|
92
|
+
}
|
|
93
|
+
let searchMin = x[0] - y[n - 1];
|
|
94
|
+
let searchMax = x[m - 1] - y[0];
|
|
95
|
+
if (isNaN(searchMin) || isNaN(searchMax)) {
|
|
96
|
+
throw new Error('NaN in input values');
|
|
97
|
+
}
|
|
98
|
+
const maxIterations = 128; // Sufficient for double precision convergence
|
|
99
|
+
let prevMin = -Infinity;
|
|
100
|
+
let prevMax = Infinity;
|
|
101
|
+
for (let iter = 0; iter < maxIterations && searchMin !== searchMax; iter++) {
|
|
102
|
+
const mid = midpoint(searchMin, searchMax);
|
|
103
|
+
const { countLessOrEqual, closestBelow, closestAbove } = countAndNeighbors(x, y, mid);
|
|
104
|
+
if (closestBelow === closestAbove) {
|
|
105
|
+
return closestBelow;
|
|
106
|
+
}
|
|
107
|
+
// No progress means we're stuck between two discrete values
|
|
108
|
+
if (searchMin === prevMin && searchMax === prevMax) {
|
|
109
|
+
return countLessOrEqual >= k ? closestBelow : closestAbove;
|
|
110
|
+
}
|
|
111
|
+
prevMin = searchMin;
|
|
112
|
+
prevMax = searchMax;
|
|
113
|
+
if (countLessOrEqual >= k) {
|
|
114
|
+
searchMax = closestBelow;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
searchMin = closestAbove;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (searchMin !== searchMax) {
|
|
121
|
+
throw new Error('Convergence failure (pathological input)');
|
|
122
|
+
}
|
|
123
|
+
return searchMin;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Two-pointer algorithm: counts pairs where x[i] - y[j] <= threshold, and tracks
|
|
127
|
+
* the closest actual differences on either side of threshold.
|
|
128
|
+
*/
|
|
129
|
+
function countAndNeighbors(x, y, threshold) {
|
|
130
|
+
const m = x.length;
|
|
131
|
+
const n = y.length;
|
|
132
|
+
let count = 0;
|
|
133
|
+
let maxBelow = -Infinity;
|
|
134
|
+
let minAbove = Infinity;
|
|
135
|
+
let j = 0;
|
|
136
|
+
for (let i = 0; i < m; i++) {
|
|
137
|
+
// Move j forward while x[i] - y[j] > threshold
|
|
138
|
+
while (j < n && x[i] - y[j] > threshold) {
|
|
139
|
+
j++;
|
|
140
|
+
}
|
|
141
|
+
// Count elements where x[i] - y[j] <= threshold
|
|
142
|
+
count += n - j;
|
|
143
|
+
// Track the closest differences on either side of threshold
|
|
144
|
+
if (j < n) {
|
|
145
|
+
const diff = x[i] - y[j];
|
|
146
|
+
if (diff > maxBelow)
|
|
147
|
+
maxBelow = diff;
|
|
148
|
+
}
|
|
149
|
+
if (j > 0) {
|
|
150
|
+
const diff = x[i] - y[j - 1];
|
|
151
|
+
if (diff < minAbove)
|
|
152
|
+
minAbove = diff;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Fallback to actual min/max if no boundaries found
|
|
156
|
+
if (!isFinite(maxBelow)) {
|
|
157
|
+
maxBelow = x[0] - y[n - 1];
|
|
158
|
+
}
|
|
159
|
+
if (!isFinite(minAbove)) {
|
|
160
|
+
minAbove = x[m - 1] - y[0];
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
countLessOrEqual: count,
|
|
164
|
+
closestBelow: maxBelow,
|
|
165
|
+
closestAbove: minAbove,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Compute midpoint avoiding overflow
|
|
170
|
+
*/
|
|
171
|
+
function midpoint(a, b) {
|
|
172
|
+
return a + (b - a) * 0.5;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=fastShift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fastShift.js","sourceRoot":"","sources":["../src/fastShift.ts"],"names":[],"mappings":"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"}
|