vesper-memory 0.3.0
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/.env.example +28 -0
- package/CHANGELOG.md +137 -0
- package/LICENSE +21 -0
- package/README.md +665 -0
- package/config/sqlite-schema.sql +413 -0
- package/dist/benchmark/index.d.ts +18 -0
- package/dist/benchmark/index.d.ts.map +1 -0
- package/dist/benchmark/index.js +19 -0
- package/dist/benchmark/index.js.map +1 -0
- package/dist/benchmark/metrics-collector.d.ts +90 -0
- package/dist/benchmark/metrics-collector.d.ts.map +1 -0
- package/dist/benchmark/metrics-collector.js +196 -0
- package/dist/benchmark/metrics-collector.js.map +1 -0
- package/dist/benchmark/report-generator.d.ts +35 -0
- package/dist/benchmark/report-generator.d.ts.map +1 -0
- package/dist/benchmark/report-generator.js +221 -0
- package/dist/benchmark/report-generator.js.map +1 -0
- package/dist/benchmark/runner.d.ts +30 -0
- package/dist/benchmark/runner.d.ts.map +1 -0
- package/dist/benchmark/runner.js +308 -0
- package/dist/benchmark/runner.js.map +1 -0
- package/dist/benchmark/scenarios/context-recall.d.ts +65 -0
- package/dist/benchmark/scenarios/context-recall.d.ts.map +1 -0
- package/dist/benchmark/scenarios/context-recall.js +180 -0
- package/dist/benchmark/scenarios/context-recall.js.map +1 -0
- package/dist/benchmark/scenarios/index.d.ts +34 -0
- package/dist/benchmark/scenarios/index.d.ts.map +1 -0
- package/dist/benchmark/scenarios/index.js +230 -0
- package/dist/benchmark/scenarios/index.js.map +1 -0
- package/dist/benchmark/statistics.d.ts +125 -0
- package/dist/benchmark/statistics.d.ts.map +1 -0
- package/dist/benchmark/statistics.js +520 -0
- package/dist/benchmark/statistics.js.map +1 -0
- package/dist/benchmark/types.d.ts +458 -0
- package/dist/benchmark/types.d.ts.map +1 -0
- package/dist/benchmark/types.js +297 -0
- package/dist/benchmark/types.js.map +1 -0
- package/dist/cli 2.js +583 -0
- package/dist/cli.d 2.ts +8 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts 2.map +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +583 -0
- package/dist/cli.js 2.map +1 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/rate-limits.d.ts +76 -0
- package/dist/config/rate-limits.d.ts.map +1 -0
- package/dist/config/rate-limits.js +161 -0
- package/dist/config/rate-limits.js.map +1 -0
- package/dist/config 2/rate-limits.d.ts +76 -0
- package/dist/config 2/rate-limits.d.ts.map +1 -0
- package/dist/config 2/rate-limits.js +161 -0
- package/dist/config 2/rate-limits.js.map +1 -0
- package/dist/consolidation/pipeline.d.ts +52 -0
- package/dist/consolidation/pipeline.d.ts.map +1 -0
- package/dist/consolidation/pipeline.js +193 -0
- package/dist/consolidation/pipeline.js.map +1 -0
- package/dist/consolidation 2/pipeline.d.ts +52 -0
- package/dist/consolidation 2/pipeline.d.ts.map +1 -0
- package/dist/consolidation 2/pipeline.js +193 -0
- package/dist/consolidation 2/pipeline.js.map +1 -0
- package/dist/embeddings/client.d.ts +95 -0
- package/dist/embeddings/client.d.ts.map +1 -0
- package/dist/embeddings/client.js +162 -0
- package/dist/embeddings/client.js.map +1 -0
- package/dist/embeddings 2/client.d.ts +94 -0
- package/dist/embeddings 2/client.d.ts.map +1 -0
- package/dist/embeddings 2/client.js +144 -0
- package/dist/embeddings 2/client.js.map +1 -0
- package/dist/memory-layers/semantic-memory.d.ts +76 -0
- package/dist/memory-layers/semantic-memory.d.ts.map +1 -0
- package/dist/memory-layers/semantic-memory.js +231 -0
- package/dist/memory-layers/semantic-memory.js.map +1 -0
- package/dist/memory-layers/skill-library.d.ts +25 -0
- package/dist/memory-layers/skill-library.d.ts.map +1 -0
- package/dist/memory-layers/skill-library.js +54 -0
- package/dist/memory-layers/skill-library.js.map +1 -0
- package/dist/memory-layers/working-memory.d.ts +57 -0
- package/dist/memory-layers/working-memory.d.ts.map +1 -0
- package/dist/memory-layers/working-memory.js +153 -0
- package/dist/memory-layers/working-memory.js.map +1 -0
- package/dist/memory-layers 2/semantic-memory.d.ts +33 -0
- package/dist/memory-layers 2/semantic-memory.d.ts.map +1 -0
- package/dist/memory-layers 2/semantic-memory.js +114 -0
- package/dist/memory-layers 2/semantic-memory.js.map +1 -0
- package/dist/memory-layers 2/skill-library.d.ts +25 -0
- package/dist/memory-layers 2/skill-library.d.ts.map +1 -0
- package/dist/memory-layers 2/skill-library.js +54 -0
- package/dist/memory-layers 2/skill-library.js.map +1 -0
- package/dist/memory-layers 2/working-memory.d.ts +57 -0
- package/dist/memory-layers 2/working-memory.d.ts.map +1 -0
- package/dist/memory-layers 2/working-memory.js +153 -0
- package/dist/memory-layers 2/working-memory.js.map +1 -0
- package/dist/middleware/auth.d.ts +287 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +610 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware 2/auth.d.ts +287 -0
- package/dist/middleware 2/auth.d.ts.map +1 -0
- package/dist/middleware 2/auth.js +610 -0
- package/dist/middleware 2/auth.js.map +1 -0
- package/dist/monitoring/health.d.ts +241 -0
- package/dist/monitoring/health.d.ts.map +1 -0
- package/dist/monitoring/health.js +649 -0
- package/dist/monitoring/health.js.map +1 -0
- package/dist/monitoring/metrics.d.ts +153 -0
- package/dist/monitoring/metrics.d.ts.map +1 -0
- package/dist/monitoring/metrics.js +349 -0
- package/dist/monitoring/metrics.js.map +1 -0
- package/dist/monitoring 2/health.d.ts +241 -0
- package/dist/monitoring 2/health.d.ts.map +1 -0
- package/dist/monitoring 2/health.js +649 -0
- package/dist/monitoring 2/health.js.map +1 -0
- package/dist/monitoring 2/metrics.d.ts +153 -0
- package/dist/monitoring 2/metrics.d.ts.map +1 -0
- package/dist/monitoring 2/metrics.js +349 -0
- package/dist/monitoring 2/metrics.js.map +1 -0
- package/dist/retrieval/hybrid-search.d.ts +186 -0
- package/dist/retrieval/hybrid-search.d.ts.map +1 -0
- package/dist/retrieval/hybrid-search.js +330 -0
- package/dist/retrieval/hybrid-search.js.map +1 -0
- package/dist/retrieval 2/hybrid-search.d.ts +186 -0
- package/dist/retrieval 2/hybrid-search.d.ts.map +1 -0
- package/dist/retrieval 2/hybrid-search.js +327 -0
- package/dist/retrieval 2/hybrid-search.js.map +1 -0
- package/dist/router/smart-router.d.ts +157 -0
- package/dist/router/smart-router.d.ts.map +1 -0
- package/dist/router/smart-router.js +524 -0
- package/dist/router/smart-router.js.map +1 -0
- package/dist/router 2/smart-router.d.ts +111 -0
- package/dist/router 2/smart-router.d.ts.map +1 -0
- package/dist/router 2/smart-router.js +383 -0
- package/dist/router 2/smart-router.js.map +1 -0
- package/dist/security/rate-limit-middleware.d.ts +119 -0
- package/dist/security/rate-limit-middleware.d.ts.map +1 -0
- package/dist/security/rate-limit-middleware.js +193 -0
- package/dist/security/rate-limit-middleware.js.map +1 -0
- package/dist/security 2/rate-limit-middleware.d.ts +119 -0
- package/dist/security 2/rate-limit-middleware.d.ts.map +1 -0
- package/dist/security 2/rate-limit-middleware.js +193 -0
- package/dist/security 2/rate-limit-middleware.js.map +1 -0
- package/dist/server 2.js +861 -0
- package/dist/server-wrapper 2.js +170 -0
- package/dist/server-wrapper.d 2.ts +12 -0
- package/dist/server-wrapper.d.ts +12 -0
- package/dist/server-wrapper.d.ts 2.map +1 -0
- package/dist/server-wrapper.d.ts.map +1 -0
- package/dist/server-wrapper.js +170 -0
- package/dist/server-wrapper.js 2.map +1 -0
- package/dist/server-wrapper.js.map +1 -0
- package/dist/server.d 2.ts +14 -0
- package/dist/server.d.ts +14 -0
- package/dist/server.d.ts 2.map +1 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +656 -0
- package/dist/server.js 2.map +1 -0
- package/dist/server.js.map +1 -0
- package/dist/synthesis/conflict-detector.d.ts +43 -0
- package/dist/synthesis/conflict-detector.d.ts.map +1 -0
- package/dist/synthesis/conflict-detector.js +125 -0
- package/dist/synthesis/conflict-detector.js.map +1 -0
- package/dist/synthesis 2/conflict-detector.d.ts +43 -0
- package/dist/synthesis 2/conflict-detector.d.ts.map +1 -0
- package/dist/synthesis 2/conflict-detector.js +125 -0
- package/dist/synthesis 2/conflict-detector.js.map +1 -0
- package/dist/utils/monitoring.d.ts +25 -0
- package/dist/utils/monitoring.d.ts.map +1 -0
- package/dist/utils/monitoring.js +41 -0
- package/dist/utils/monitoring.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +97 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +166 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/validation.d.ts +139 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +195 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils 2/monitoring.d.ts +25 -0
- package/dist/utils 2/monitoring.d.ts.map +1 -0
- package/dist/utils 2/monitoring.js +41 -0
- package/dist/utils 2/monitoring.js.map +1 -0
- package/dist/utils 2/rate-limiter.d.ts +97 -0
- package/dist/utils 2/rate-limiter.d.ts.map +1 -0
- package/dist/utils 2/rate-limiter.js +166 -0
- package/dist/utils 2/rate-limiter.js.map +1 -0
- package/dist/utils 2/validation.d.ts +139 -0
- package/dist/utils 2/validation.d.ts.map +1 -0
- package/dist/utils 2/validation.js +195 -0
- package/dist/utils 2/validation.js.map +1 -0
- package/docker-compose.yml +65 -0
- package/embedding-service/Dockerfile +29 -0
- package/embedding-service/README.md +68 -0
- package/embedding-service/requirements.txt +6 -0
- package/embedding-service/server.py +110 -0
- package/package.json +92 -0
- package/scripts/FRESH_INSTALL.md +280 -0
- package/scripts/README.md +101 -0
- package/scripts/ensure-infrastructure.sh +38 -0
- package/scripts/fresh-install-auto.sh +96 -0
- package/scripts/fresh-install.sh +167 -0
- package/scripts/health-check.sh +72 -0
- package/scripts/init-qdrant.ts +201 -0
- package/scripts/postinstall.js +94 -0
- package/scripts/run-accuracy-benchmark.ts +1237 -0
- package/scripts/run-real-benchmark.ts +581 -0
- package/scripts/test-mcp-server.sh +38 -0
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Statistical Functions for Scientific Benchmarks
|
|
3
|
+
*
|
|
4
|
+
* Pure functions for calculating:
|
|
5
|
+
* - Descriptive statistics (mean, median, percentile)
|
|
6
|
+
* - Dispersion measures (variance, standard deviation)
|
|
7
|
+
* - Confidence intervals
|
|
8
|
+
* - Hypothesis testing (Welch's t-test)
|
|
9
|
+
* - Effect size (Cohen's d)
|
|
10
|
+
*
|
|
11
|
+
* All functions are designed to be accurate, efficient, and safe.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Custom error class for statistics-related errors
|
|
15
|
+
*/
|
|
16
|
+
export class StatisticsError extends Error {
|
|
17
|
+
constructor(message) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.name = "StatisticsError";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Validate that array contains only finite numbers
|
|
24
|
+
*/
|
|
25
|
+
function validateArray(arr, name) {
|
|
26
|
+
if (!Array.isArray(arr)) {
|
|
27
|
+
throw new StatisticsError(`${name} must be an array`);
|
|
28
|
+
}
|
|
29
|
+
for (let i = 0; i < arr.length; i++) {
|
|
30
|
+
if (!Number.isFinite(arr[i])) {
|
|
31
|
+
throw new StatisticsError(`${name} contains non-finite value at index ${i}: ${arr[i]}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Calculate arithmetic mean of an array
|
|
37
|
+
*
|
|
38
|
+
* @param values - Array of numbers
|
|
39
|
+
* @returns The arithmetic mean
|
|
40
|
+
* @throws StatisticsError if array is empty or contains non-finite values
|
|
41
|
+
*/
|
|
42
|
+
export function mean(values) {
|
|
43
|
+
validateArray(values, "Values array");
|
|
44
|
+
if (values.length === 0) {
|
|
45
|
+
throw new StatisticsError("Cannot calculate mean of empty array");
|
|
46
|
+
}
|
|
47
|
+
// Use Kahan summation for better numerical precision
|
|
48
|
+
let sum = 0;
|
|
49
|
+
let compensation = 0;
|
|
50
|
+
for (const value of values) {
|
|
51
|
+
const y = value - compensation;
|
|
52
|
+
const t = sum + y;
|
|
53
|
+
compensation = t - sum - y;
|
|
54
|
+
sum = t;
|
|
55
|
+
}
|
|
56
|
+
return sum / values.length;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Calculate median of an array
|
|
60
|
+
*
|
|
61
|
+
* @param values - Array of numbers
|
|
62
|
+
* @returns The median value
|
|
63
|
+
* @throws StatisticsError if array is empty
|
|
64
|
+
*/
|
|
65
|
+
export function median(values) {
|
|
66
|
+
validateArray(values, "Values array");
|
|
67
|
+
if (values.length === 0) {
|
|
68
|
+
throw new StatisticsError("Cannot calculate median of empty array");
|
|
69
|
+
}
|
|
70
|
+
// Sort a copy to avoid mutating original
|
|
71
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
72
|
+
const mid = Math.floor(sorted.length / 2);
|
|
73
|
+
if (sorted.length % 2 === 0) {
|
|
74
|
+
return (sorted[mid - 1] + sorted[mid]) / 2;
|
|
75
|
+
}
|
|
76
|
+
return sorted[mid];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Calculate percentile using linear interpolation
|
|
80
|
+
*
|
|
81
|
+
* @param values - Array of numbers
|
|
82
|
+
* @param p - Percentile to calculate (0-100)
|
|
83
|
+
* @returns The percentile value
|
|
84
|
+
* @throws StatisticsError if array is empty or percentile is out of range
|
|
85
|
+
*/
|
|
86
|
+
export function percentile(values, p) {
|
|
87
|
+
validateArray(values, "Values array");
|
|
88
|
+
if (values.length === 0) {
|
|
89
|
+
throw new StatisticsError("Cannot calculate percentile of empty array");
|
|
90
|
+
}
|
|
91
|
+
if (p < 0 || p > 100) {
|
|
92
|
+
throw new StatisticsError("Percentile must be between 0 and 100");
|
|
93
|
+
}
|
|
94
|
+
// Sort a copy to avoid mutating original
|
|
95
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
96
|
+
if (p === 0) {
|
|
97
|
+
return sorted[0];
|
|
98
|
+
}
|
|
99
|
+
if (p === 100) {
|
|
100
|
+
return sorted[sorted.length - 1];
|
|
101
|
+
}
|
|
102
|
+
// Linear interpolation
|
|
103
|
+
const index = (p / 100) * (sorted.length - 1);
|
|
104
|
+
const lower = Math.floor(index);
|
|
105
|
+
const upper = Math.ceil(index);
|
|
106
|
+
const fraction = index - lower;
|
|
107
|
+
if (lower === upper) {
|
|
108
|
+
return sorted[lower];
|
|
109
|
+
}
|
|
110
|
+
return sorted[lower] * (1 - fraction) + sorted[upper] * fraction;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Calculate variance of an array
|
|
114
|
+
*
|
|
115
|
+
* @param values - Array of numbers
|
|
116
|
+
* @param sample - If true, calculate sample variance (n-1 denominator); default is population variance
|
|
117
|
+
* @returns The variance
|
|
118
|
+
* @throws StatisticsError if array is empty or too small for sample variance
|
|
119
|
+
*/
|
|
120
|
+
export function variance(values, sample = false) {
|
|
121
|
+
validateArray(values, "Values array");
|
|
122
|
+
if (values.length === 0) {
|
|
123
|
+
throw new StatisticsError("Cannot calculate variance of empty array");
|
|
124
|
+
}
|
|
125
|
+
if (sample && values.length < 2) {
|
|
126
|
+
throw new StatisticsError("Sample variance requires at least 2 elements");
|
|
127
|
+
}
|
|
128
|
+
const avg = mean(values);
|
|
129
|
+
let sumSquaredDiff = 0;
|
|
130
|
+
for (const value of values) {
|
|
131
|
+
sumSquaredDiff += (value - avg) ** 2;
|
|
132
|
+
}
|
|
133
|
+
const denominator = sample ? values.length - 1 : values.length;
|
|
134
|
+
return sumSquaredDiff / denominator;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Calculate standard deviation of an array
|
|
138
|
+
*
|
|
139
|
+
* @param values - Array of numbers
|
|
140
|
+
* @param sample - If true, calculate sample standard deviation
|
|
141
|
+
* @returns The standard deviation
|
|
142
|
+
* @throws StatisticsError if array is empty or too small for sample SD
|
|
143
|
+
*/
|
|
144
|
+
export function standardDeviation(values, sample = false) {
|
|
145
|
+
return Math.sqrt(variance(values, sample));
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Calculate confidence interval using t-distribution
|
|
149
|
+
*
|
|
150
|
+
* @param values - Array of sample values
|
|
151
|
+
* @param confidenceLevel - Confidence level (0 < level < 1), e.g., 0.95 for 95% CI
|
|
152
|
+
* @returns ConfidenceIntervalResult with mean, lower, upper bounds
|
|
153
|
+
* @throws StatisticsError if array has less than 2 elements or invalid confidence level
|
|
154
|
+
*/
|
|
155
|
+
export function confidenceInterval(values, confidenceLevel) {
|
|
156
|
+
validateArray(values, "Values array");
|
|
157
|
+
if (values.length < 2) {
|
|
158
|
+
throw new StatisticsError("Confidence interval requires at least 2 elements");
|
|
159
|
+
}
|
|
160
|
+
if (confidenceLevel <= 0 || confidenceLevel >= 1) {
|
|
161
|
+
throw new StatisticsError("Confidence level must be between 0 and 1 (exclusive)");
|
|
162
|
+
}
|
|
163
|
+
const n = values.length;
|
|
164
|
+
const avg = mean(values);
|
|
165
|
+
const sd = standardDeviation(values, true); // Sample SD
|
|
166
|
+
const standardError = sd / Math.sqrt(n);
|
|
167
|
+
// Get t-critical value for given confidence level and degrees of freedom
|
|
168
|
+
const alpha = 1 - confidenceLevel;
|
|
169
|
+
const df = n - 1;
|
|
170
|
+
const tCritical = tDistributionInverse(1 - alpha / 2, df);
|
|
171
|
+
const marginOfError = tCritical * standardError;
|
|
172
|
+
return {
|
|
173
|
+
mean: avg,
|
|
174
|
+
lower: avg - marginOfError,
|
|
175
|
+
upper: avg + marginOfError,
|
|
176
|
+
confidenceLevel,
|
|
177
|
+
marginOfError,
|
|
178
|
+
standardError,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Perform Welch's t-test for two independent samples
|
|
183
|
+
*
|
|
184
|
+
* Welch's t-test is more robust than Student's t-test when
|
|
185
|
+
* variances are unequal between groups.
|
|
186
|
+
*
|
|
187
|
+
* @param groupA - First sample
|
|
188
|
+
* @param groupB - Second sample
|
|
189
|
+
* @param alpha - Significance level (default 0.05)
|
|
190
|
+
* @returns WelchTTestResult with test statistics and significance
|
|
191
|
+
* @throws StatisticsError if either group has less than 2 elements
|
|
192
|
+
*/
|
|
193
|
+
export function welchTTest(groupA, groupB, alpha = 0.05) {
|
|
194
|
+
validateArray(groupA, "Group A");
|
|
195
|
+
validateArray(groupB, "Group B");
|
|
196
|
+
if (groupA.length < 2) {
|
|
197
|
+
throw new StatisticsError("Group A must have at least 2 elements");
|
|
198
|
+
}
|
|
199
|
+
if (groupB.length < 2) {
|
|
200
|
+
throw new StatisticsError("Group B must have at least 2 elements");
|
|
201
|
+
}
|
|
202
|
+
const n1 = groupA.length;
|
|
203
|
+
const n2 = groupB.length;
|
|
204
|
+
const mean1 = mean(groupA);
|
|
205
|
+
const mean2 = mean(groupB);
|
|
206
|
+
const var1 = variance(groupA, true);
|
|
207
|
+
const var2 = variance(groupB, true);
|
|
208
|
+
// Handle identical groups (zero variance)
|
|
209
|
+
if (var1 === 0 && var2 === 0) {
|
|
210
|
+
return {
|
|
211
|
+
tStatistic: mean1 === mean2 ? 0 : mean1 < mean2 ? -Infinity : Infinity,
|
|
212
|
+
pValue: mean1 === mean2 ? 1 : 0,
|
|
213
|
+
degreesOfFreedom: n1 + n2 - 2,
|
|
214
|
+
significant: mean1 !== mean2,
|
|
215
|
+
alpha,
|
|
216
|
+
meanDifference: mean1 - mean2,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
// Calculate t-statistic
|
|
220
|
+
const se1 = var1 / n1;
|
|
221
|
+
const se2 = var2 / n2;
|
|
222
|
+
const tStatistic = (mean1 - mean2) / Math.sqrt(se1 + se2);
|
|
223
|
+
// Welch-Satterthwaite degrees of freedom
|
|
224
|
+
const df = (se1 + se2) ** 2 / (se1 ** 2 / (n1 - 1) + se2 ** 2 / (n2 - 1));
|
|
225
|
+
// Calculate p-value (two-tailed)
|
|
226
|
+
const pValue = 2 * (1 - tDistributionCDF(Math.abs(tStatistic), df));
|
|
227
|
+
return {
|
|
228
|
+
tStatistic,
|
|
229
|
+
pValue,
|
|
230
|
+
degreesOfFreedom: df,
|
|
231
|
+
significant: pValue < alpha,
|
|
232
|
+
alpha,
|
|
233
|
+
meanDifference: mean1 - mean2,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Calculate Cohen's d effect size
|
|
238
|
+
*
|
|
239
|
+
* Cohen's d measures the standardized difference between two means.
|
|
240
|
+
* Guidelines: |d| < 0.2 negligible, 0.2-0.5 small, 0.5-0.8 medium, > 0.8 large
|
|
241
|
+
*
|
|
242
|
+
* @param groupA - First sample
|
|
243
|
+
* @param groupB - Second sample
|
|
244
|
+
* @returns Cohen's d (positive if A > B, negative if A < B)
|
|
245
|
+
* @throws StatisticsError if either group has less than 2 elements
|
|
246
|
+
*/
|
|
247
|
+
export function cohensD(groupA, groupB) {
|
|
248
|
+
validateArray(groupA, "Group A");
|
|
249
|
+
validateArray(groupB, "Group B");
|
|
250
|
+
if (groupA.length < 2) {
|
|
251
|
+
throw new StatisticsError("Group A must have at least 2 elements");
|
|
252
|
+
}
|
|
253
|
+
if (groupB.length < 2) {
|
|
254
|
+
throw new StatisticsError("Group B must have at least 2 elements");
|
|
255
|
+
}
|
|
256
|
+
const mean1 = mean(groupA);
|
|
257
|
+
const mean2 = mean(groupB);
|
|
258
|
+
const n1 = groupA.length;
|
|
259
|
+
const n2 = groupB.length;
|
|
260
|
+
const var1 = variance(groupA, true);
|
|
261
|
+
const var2 = variance(groupB, true);
|
|
262
|
+
// Pooled standard deviation
|
|
263
|
+
const pooledVar = ((n1 - 1) * var1 + (n2 - 1) * var2) / (n1 + n2 - 2);
|
|
264
|
+
const pooledSD = Math.sqrt(pooledVar);
|
|
265
|
+
if (pooledSD === 0) {
|
|
266
|
+
return 0; // Identical groups
|
|
267
|
+
}
|
|
268
|
+
return (mean1 - mean2) / pooledSD;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Interpret Cohen's d effect size
|
|
272
|
+
*
|
|
273
|
+
* @param d - Cohen's d value
|
|
274
|
+
* @returns String interpretation
|
|
275
|
+
*/
|
|
276
|
+
export function interpretEffectSize(d) {
|
|
277
|
+
const absD = Math.abs(d);
|
|
278
|
+
if (absD < 0.2) {
|
|
279
|
+
return "negligible";
|
|
280
|
+
}
|
|
281
|
+
else if (absD < 0.5) {
|
|
282
|
+
return "small";
|
|
283
|
+
}
|
|
284
|
+
else if (absD < 0.8) {
|
|
285
|
+
return "medium";
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
return "large";
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// =============================================================================
|
|
292
|
+
// Internal helper functions for t-distribution
|
|
293
|
+
// =============================================================================
|
|
294
|
+
/**
|
|
295
|
+
* Approximate the inverse of the t-distribution CDF
|
|
296
|
+
* Used for calculating t-critical values for confidence intervals
|
|
297
|
+
*
|
|
298
|
+
* Uses the approximation from Abramowitz and Stegun (1964)
|
|
299
|
+
*/
|
|
300
|
+
function tDistributionInverse(p, df) {
|
|
301
|
+
// For large df, use normal approximation
|
|
302
|
+
if (df > 100) {
|
|
303
|
+
return normalInverse(p);
|
|
304
|
+
}
|
|
305
|
+
// Use iterative refinement
|
|
306
|
+
let x = normalInverse(p);
|
|
307
|
+
for (let i = 0; i < 10; i++) {
|
|
308
|
+
const cdf = tDistributionCDF(x, df);
|
|
309
|
+
const pdf = tDistributionPDF(x, df);
|
|
310
|
+
x = x - (cdf - p) / pdf;
|
|
311
|
+
}
|
|
312
|
+
return x;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Approximate the CDF of the t-distribution
|
|
316
|
+
* Used for calculating p-values
|
|
317
|
+
*/
|
|
318
|
+
function tDistributionCDF(t, df) {
|
|
319
|
+
// For large df, use normal approximation
|
|
320
|
+
if (df > 100) {
|
|
321
|
+
return normalCDF(t);
|
|
322
|
+
}
|
|
323
|
+
// Use the regularized incomplete beta function
|
|
324
|
+
const x = df / (df + t * t);
|
|
325
|
+
const a = df / 2;
|
|
326
|
+
const b = 0.5;
|
|
327
|
+
if (t >= 0) {
|
|
328
|
+
return 1 - 0.5 * incompleteBeta(x, a, b);
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
return 0.5 * incompleteBeta(x, a, b);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* PDF of the t-distribution
|
|
336
|
+
*/
|
|
337
|
+
function tDistributionPDF(t, df) {
|
|
338
|
+
const numerator = gamma((df + 1) / 2);
|
|
339
|
+
const denominator = Math.sqrt(df * Math.PI) * gamma(df / 2);
|
|
340
|
+
const base = 1 + (t * t) / df;
|
|
341
|
+
return (numerator / denominator) * Math.pow(base, -(df + 1) / 2);
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Approximate the inverse of the standard normal CDF
|
|
345
|
+
* Uses the Abramowitz and Stegun approximation
|
|
346
|
+
*/
|
|
347
|
+
function normalInverse(p) {
|
|
348
|
+
if (p <= 0)
|
|
349
|
+
return -Infinity;
|
|
350
|
+
if (p >= 1)
|
|
351
|
+
return Infinity;
|
|
352
|
+
if (p === 0.5)
|
|
353
|
+
return 0;
|
|
354
|
+
const a = [
|
|
355
|
+
-3.969683028665376e1,
|
|
356
|
+
2.209460984245205e2,
|
|
357
|
+
-2.759285104469687e2,
|
|
358
|
+
1.383577518672690e2,
|
|
359
|
+
-3.066479806614716e1,
|
|
360
|
+
2.506628277459239e0,
|
|
361
|
+
];
|
|
362
|
+
const b = [
|
|
363
|
+
-5.447609879822406e1,
|
|
364
|
+
1.615858368580409e2,
|
|
365
|
+
-1.556989798598866e2,
|
|
366
|
+
6.680131188771972e1,
|
|
367
|
+
-1.328068155288572e1,
|
|
368
|
+
];
|
|
369
|
+
const c = [
|
|
370
|
+
-7.784894002430293e-3,
|
|
371
|
+
-3.223964580411365e-1,
|
|
372
|
+
-2.400758277161838e0,
|
|
373
|
+
-2.549732539343734e0,
|
|
374
|
+
4.374664141464968e0,
|
|
375
|
+
2.938163982698783e0,
|
|
376
|
+
];
|
|
377
|
+
const d = [
|
|
378
|
+
7.784695709041462e-3,
|
|
379
|
+
3.224671290700398e-1,
|
|
380
|
+
2.445134137142996e0,
|
|
381
|
+
3.754408661907416e0,
|
|
382
|
+
];
|
|
383
|
+
const pLow = 0.02425;
|
|
384
|
+
const pHigh = 1 - pLow;
|
|
385
|
+
let q, r;
|
|
386
|
+
if (p < pLow) {
|
|
387
|
+
q = Math.sqrt(-2 * Math.log(p));
|
|
388
|
+
return ((((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) /
|
|
389
|
+
((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1));
|
|
390
|
+
}
|
|
391
|
+
else if (p <= pHigh) {
|
|
392
|
+
q = p - 0.5;
|
|
393
|
+
r = q * q;
|
|
394
|
+
return (((((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r + a[5]) *
|
|
395
|
+
q) /
|
|
396
|
+
(((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1));
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
q = Math.sqrt(-2 * Math.log(1 - p));
|
|
400
|
+
return (-((((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) /
|
|
401
|
+
((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1)));
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Standard normal CDF approximation
|
|
406
|
+
*/
|
|
407
|
+
function normalCDF(x) {
|
|
408
|
+
const a1 = 0.254829592;
|
|
409
|
+
const a2 = -0.284496736;
|
|
410
|
+
const a3 = 1.421413741;
|
|
411
|
+
const a4 = -1.453152027;
|
|
412
|
+
const a5 = 1.061405429;
|
|
413
|
+
const p = 0.3275911;
|
|
414
|
+
const sign = x < 0 ? -1 : 1;
|
|
415
|
+
x = Math.abs(x) / Math.sqrt(2);
|
|
416
|
+
const t = 1 / (1 + p * x);
|
|
417
|
+
const y = 1 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);
|
|
418
|
+
return 0.5 * (1 + sign * y);
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Gamma function approximation using Stirling's formula with corrections
|
|
422
|
+
*/
|
|
423
|
+
function gamma(z) {
|
|
424
|
+
if (z <= 0 && Number.isInteger(z)) {
|
|
425
|
+
return Infinity;
|
|
426
|
+
}
|
|
427
|
+
// Use reflection formula for z < 0.5
|
|
428
|
+
if (z < 0.5) {
|
|
429
|
+
return Math.PI / (Math.sin(Math.PI * z) * gamma(1 - z));
|
|
430
|
+
}
|
|
431
|
+
// Lanczos approximation
|
|
432
|
+
const g = 7;
|
|
433
|
+
const c = [
|
|
434
|
+
0.99999999999980993,
|
|
435
|
+
676.5203681218851,
|
|
436
|
+
-1259.1392167224028,
|
|
437
|
+
771.32342877765313,
|
|
438
|
+
-176.61502916214059,
|
|
439
|
+
12.507343278686905,
|
|
440
|
+
-0.13857109526572012,
|
|
441
|
+
9.9843695780195716e-6,
|
|
442
|
+
1.5056327351493116e-7,
|
|
443
|
+
];
|
|
444
|
+
z -= 1;
|
|
445
|
+
let x = c[0];
|
|
446
|
+
for (let i = 1; i < g + 2; i++) {
|
|
447
|
+
x += c[i] / (z + i);
|
|
448
|
+
}
|
|
449
|
+
const t = z + g + 0.5;
|
|
450
|
+
return Math.sqrt(2 * Math.PI) * Math.pow(t, z + 0.5) * Math.exp(-t) * x;
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Regularized incomplete beta function approximation
|
|
454
|
+
*/
|
|
455
|
+
function incompleteBeta(x, a, b) {
|
|
456
|
+
if (x === 0)
|
|
457
|
+
return 0;
|
|
458
|
+
if (x === 1)
|
|
459
|
+
return 1;
|
|
460
|
+
// Use continued fraction expansion
|
|
461
|
+
const maxIterations = 200;
|
|
462
|
+
const epsilon = 1e-10;
|
|
463
|
+
const lnBeta = logGamma(a) + logGamma(b) - logGamma(a + b);
|
|
464
|
+
const front = Math.exp(Math.log(x) * a + Math.log(1 - x) * b - lnBeta) / a;
|
|
465
|
+
// Lentz's algorithm for continued fraction
|
|
466
|
+
let f = 1;
|
|
467
|
+
let c = 1;
|
|
468
|
+
let d = 0;
|
|
469
|
+
for (let i = 0; i <= maxIterations; i++) {
|
|
470
|
+
const m = Math.floor(i / 2);
|
|
471
|
+
let numerator;
|
|
472
|
+
if (i === 0) {
|
|
473
|
+
numerator = 1;
|
|
474
|
+
}
|
|
475
|
+
else if (i % 2 === 0) {
|
|
476
|
+
numerator = (m * (b - m) * x) / ((a + 2 * m - 1) * (a + 2 * m));
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
numerator =
|
|
480
|
+
-((a + m) * (a + b + m) * x) / ((a + 2 * m) * (a + 2 * m + 1));
|
|
481
|
+
}
|
|
482
|
+
d = 1 + numerator * d;
|
|
483
|
+
if (Math.abs(d) < 1e-30)
|
|
484
|
+
d = 1e-30;
|
|
485
|
+
d = 1 / d;
|
|
486
|
+
c = 1 + numerator / c;
|
|
487
|
+
if (Math.abs(c) < 1e-30)
|
|
488
|
+
c = 1e-30;
|
|
489
|
+
const delta = c * d;
|
|
490
|
+
f *= delta;
|
|
491
|
+
if (Math.abs(delta - 1) < epsilon) {
|
|
492
|
+
return front * (f - 1);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
return front * (f - 1);
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Log gamma function
|
|
499
|
+
*/
|
|
500
|
+
function logGamma(z) {
|
|
501
|
+
const c = [
|
|
502
|
+
76.18009172947146,
|
|
503
|
+
-86.50532032941677,
|
|
504
|
+
24.01409824083091,
|
|
505
|
+
-1.231739572450155,
|
|
506
|
+
0.1208650973866179e-2,
|
|
507
|
+
-0.5395239384953e-5,
|
|
508
|
+
];
|
|
509
|
+
let x = z;
|
|
510
|
+
let y = z;
|
|
511
|
+
let tmp = x + 5.5;
|
|
512
|
+
tmp -= (x + 0.5) * Math.log(tmp);
|
|
513
|
+
let ser = 1.000000000190015;
|
|
514
|
+
for (let j = 0; j < 6; j++) {
|
|
515
|
+
y += 1;
|
|
516
|
+
ser += c[j] / y;
|
|
517
|
+
}
|
|
518
|
+
return -tmp + Math.log((2.5066282746310005 * ser) / x);
|
|
519
|
+
}
|
|
520
|
+
//# sourceMappingURL=statistics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statistics.js","sourceRoot":"","sources":["../../src/benchmark/statistics.ts"],"names":[],"mappings":"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"}
|