@danielsimonjr/mathts-functions 0.14.0 → 0.15.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.
@@ -56,5 +56,16 @@ export declare function cov(x: Vec | number[][], y?: Vec, ddof?: number): number
56
56
  * columns = variables). Diagonal is 1; off-diagonals are Pearson r.
57
57
  */
58
58
  export declare function corrcoef(matrix: number[][]): number[][];
59
+ /**
60
+ * Kendall's τ_b rank correlation coefficient — a tie-corrected measure of
61
+ * ordinal association based on the difference between concordant and discordant
62
+ * pairs. Complements {@link spearman} (rank Pearson) and Pearson `corr`.
63
+ * Returns τ_b = (P − Q) / √((n₀ − n₁)(n₀ − n₂)), matching `scipy.stats.kendalltau`
64
+ * (`variant='b'`, its default), where n₀ = n(n−1)/2 and n₁/n₂ are the tie-pair
65
+ * counts in x and y respectively.
66
+ *
67
+ * @example kendallTau([1,2,3,4,5], [2,1,4,3,5]) // 0.6
68
+ */
69
+ export declare function kendallTau(x: Vec, y: Vec): number;
59
70
  export {};
60
71
  //# sourceMappingURL=descriptive-stats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"descriptive-stats.d.ts","sourceRoot":"","sources":["../src/descriptive-stats.ts"],"names":[],"mappings":"AAsBA,KAAK,GAAG,GAAG,SAAS,MAAM,EAAE,GAAG,YAAY,CAAC;AAiB5C;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,CAazC;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAsB/C;AAED,gFAAgF;AAChF,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAKpC;AAED,6DAA6D;AAC7D,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAKpC;AAED,qFAAqF;AACrF,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,UAAO,GAAG,MAAM,CAOhE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAatE;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAaxF;AAED,wDAAwD;AACxD,wBAAgB,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAGlC;AAED,oDAAoD;AACpD,wBAAgB,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAIlC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,CAOvC;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,SAAI,GAAG,MAAM,GAAG,MAAM,EAAE,EAAE,CAgC/E;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAOvD"}
1
+ {"version":3,"file":"descriptive-stats.d.ts","sourceRoot":"","sources":["../src/descriptive-stats.ts"],"names":[],"mappings":"AAsBA,KAAK,GAAG,GAAG,SAAS,MAAM,EAAE,GAAG,YAAY,CAAC;AAiB5C;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,CAazC;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAsB/C;AAED,gFAAgF;AAChF,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAKpC;AAED,6DAA6D;AAC7D,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAKpC;AAED,qFAAqF;AACrF,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,UAAO,GAAG,MAAM,CAOhE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAatE;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAaxF;AAED,wDAAwD;AACxD,wBAAgB,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAGlC;AAED,oDAAoD;AACpD,wBAAgB,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAIlC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,CAOvC;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,SAAI,GAAG,MAAM,GAAG,MAAM,EAAE,EAAE,CAgC/E;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAOvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CA0BjD"}
package/dist/index.d.ts CHANGED
@@ -17,7 +17,7 @@ export { evaluate, compileExpr, parse, parser, reviver, replacer } from './facto
17
17
  export { help } from './help.js';
18
18
  export { derivativeAt, valueAndDerivativeAt, gradientAt } from './grad-forward.js';
19
19
  export type { DualFn } from './grad-forward.js';
20
- export { gmean, hmean, moment, skewness, kurtosis, iqr, sem, zscore, cov, corrcoef, rankdata, spearman, } from './descriptive-stats.js';
20
+ export { gmean, hmean, moment, skewness, kurtosis, iqr, sem, zscore, cov, corrcoef, rankdata, spearman, kendallTau, } from './descriptive-stats.js';
21
21
  export { clamp, sigmoid, logsumexp, softmax, cumprod, cummax, cummin, cumtrapz, } from './numeric-extra.js';
22
22
  export { normalQuantile, studentTCDF, studentTQuantile, chiSquaredCDF, chiSquaredQuantile, fCDF, fQuantile, gammaCDF, gammaQuantile, betaCDF, betaQuantile, cauchyPDF, cauchyCDF, cauchyQuantile, laplacePDF, laplaceCDF, laplaceQuantile, logisticPDF, logisticCDF, logisticQuantile, } from './distribution-functions.js';
23
23
  export { fTest, jarqueBera, kruskalWallis, wilcoxon, fisherExact, studentizedRangeCDF, studentizedRangeQuantile, tukeyHSD, } from './hypothesis-extra.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,kBAAkB,CAAC;AAKjC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAOzC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGlG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACnF,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,GAAG,EACH,MAAM,EACN,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,KAAK,EACL,OAAO,EACP,SAAS,EACT,OAAO,EACP,OAAO,EACP,MAAM,EACN,MAAM,EACN,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,aAAa,EACb,OAAO,EACP,YAAY,EACZ,SAAS,EACT,SAAS,EACT,cAAc,EACd,UAAU,EACV,UAAU,EACV,eAAe,EACf,WAAW,EACX,WAAW,EACX,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,KAAK,EACL,UAAU,EACV,aAAa,EACb,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAS,EACT,SAAS,EACT,MAAM,EACN,eAAe,EACf,cAAc,EACd,EAAE,GACH,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAG1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGxE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGxF,OAAO,EACL,SAAS,EACT,eAAe,EACf,KAAK,EACL,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,kBAAkB,CAAC;AAKjC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAOzC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGlG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACnF,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,GAAG,EACH,MAAM,EACN,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,GACX,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,KAAK,EACL,OAAO,EACP,SAAS,EACT,OAAO,EACP,OAAO,EACP,MAAM,EACN,MAAM,EACN,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,aAAa,EACb,OAAO,EACP,YAAY,EACZ,SAAS,EACT,SAAS,EACT,cAAc,EACd,UAAU,EACV,UAAU,EACV,eAAe,EACf,WAAW,EACX,WAAW,EACX,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,KAAK,EACL,UAAU,EACV,aAAa,EACb,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAS,EACT,SAAS,EACT,MAAM,EACN,eAAe,EACf,cAAc,EACd,EAAE,GACH,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAG1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGxE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGxF,OAAO,EACL,SAAS,EACT,eAAe,EACf,KAAK,EACL,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -48,6 +48,7 @@ __export(typed_exports, {
48
48
  autoCorrelation: () => autoCorrelation,
49
49
  bandpassFilter: () => bandpassFilter,
50
50
  bartlettPSD: () => bartlettPSD,
51
+ bartlettTest: () => bartlettTest,
51
52
  bernoulli: () => bernoulli,
52
53
  bernoulliPMF: () => bernoulliPMF,
53
54
  besselI: () => besselI,
@@ -67,6 +68,7 @@ __export(typed_exports, {
67
68
  bin: () => bin,
68
69
  binomialDist: () => binomialDist,
69
70
  binomialPMF: () => binomialPMF,
71
+ binomialTest: () => binomialTest,
70
72
  bitAnd: () => bitAnd,
71
73
  bitNot: () => bitNot,
72
74
  bitOr: () => bitOr,
@@ -205,6 +207,7 @@ __export(typed_exports, {
205
207
  hex: () => hex,
206
208
  highpassFilter: () => highpassFilter,
207
209
  hilbertTransform: () => hilbertTransform,
210
+ hypergeometricDist: () => hypergeometricDist,
208
211
  hypot: () => hypot,
209
212
  idct: () => idct,
210
213
  idst: () => idst,
@@ -223,6 +226,7 @@ __export(typed_exports, {
223
226
  jsDivergence: () => jsDivergence,
224
227
  kdTree: () => kdTree,
225
228
  kdTreeNearest: () => kdTreeNearest,
229
+ kolmogorovSmirnov2Test: () => kolmogorovSmirnov2Test,
226
230
  kolmogorovSmirnovTest: () => kolmogorovSmirnovTest,
227
231
  lagrangeInterp: () => lagrangeInterp,
228
232
  laguerreL: () => laguerreL,
@@ -234,6 +238,7 @@ __export(typed_exports, {
234
238
  leftShift: () => leftShift,
235
239
  legendreFit: () => legendreFit,
236
240
  legendreP: () => legendreP,
241
+ leveneTest: () => leveneTest,
237
242
  lgamma: () => lgamma,
238
243
  linearInterp: () => linearInterp,
239
244
  linprog: () => linprog,
@@ -277,6 +282,7 @@ __export(typed_exports, {
277
282
  multinomial: () => multinomial,
278
283
  multiply: () => multiply,
279
284
  nearestNeighbor: () => nearestNeighbor,
285
+ negativeBinomialDist: () => negativeBinomialDist,
280
286
  newtonInterp: () => newtonInterp,
281
287
  nextPrime: () => nextPrime,
282
288
  nintegrate: () => nintegrate,
@@ -354,6 +360,7 @@ __export(typed_exports, {
354
360
  principalComponentAnalysis: () => principalComponentAnalysis,
355
361
  print: () => print,
356
362
  projectVector: () => projectVector,
363
+ proportionZTest: () => proportionZTest,
357
364
  quadprog: () => quadprog,
358
365
  quickSelect: () => quickSelect,
359
366
  random: () => random,
@@ -410,6 +417,7 @@ __export(typed_exports, {
410
417
  stronglyConnectedComponents: () => stronglyConnectedComponents,
411
418
  studentTPDF: () => studentTPDF,
412
419
  studentTTest: () => studentTTest,
420
+ studentTTestPaired: () => studentTTestPaired,
413
421
  subfactorial: () => subfactorial,
414
422
  substitute: () => substitute,
415
423
  subtract: () => subtract,
@@ -12813,12 +12821,7 @@ function _normalQuantileStd(p) {
12813
12821
  4.374664141464968,
12814
12822
  2.938163982698783
12815
12823
  ];
12816
- const d = [
12817
- 0.007784695709041462,
12818
- 0.3224671290700398,
12819
- 2.445134137142996,
12820
- 3.754408661907416
12821
- ];
12824
+ const d = [0.007784695709041462, 0.3224671290700398, 2.445134137142996, 3.754408661907416];
12822
12825
  const pLow = 0.02425;
12823
12826
  let x;
12824
12827
  if (p < pLow) {
@@ -13489,6 +13492,109 @@ function weibullDist(k, lambda = 1) {
13489
13492
  })
13490
13493
  };
13491
13494
  }
13495
+ function _logChoose(n, r) {
13496
+ if (r < 0 || r > n) return -Infinity;
13497
+ return _logFactorial2(n) - _logFactorial2(r) - _logFactorial2(n - r);
13498
+ }
13499
+ function _choose(n, r) {
13500
+ if (r < 0 || r > n) return 0;
13501
+ const k = Math.min(r, n - r);
13502
+ let c = 1;
13503
+ for (let i = 0; i < k; i++) c = c * (n - i) / (i + 1);
13504
+ return c;
13505
+ }
13506
+ function _discreteSample(cdf, rng, cap) {
13507
+ const u = rng();
13508
+ for (let k = 0; k <= cap; k++) {
13509
+ if (cdf(k) >= u) return k;
13510
+ }
13511
+ return cap;
13512
+ }
13513
+ function hypergeometricDist(population, successes, draws) {
13514
+ if (![population, successes, draws].every((v) => Number.isInteger(v) && v >= 0)) {
13515
+ throw new Error(
13516
+ "hypergeometricDist: population, successes, draws must be non-negative integers"
13517
+ );
13518
+ }
13519
+ if (successes > population || draws > population) {
13520
+ throw new Error("hypergeometricDist: successes and draws cannot exceed population");
13521
+ }
13522
+ const M = population;
13523
+ const K = successes;
13524
+ const N = draws;
13525
+ const kMin = Math.max(0, N - (M - K));
13526
+ const kMax = Math.min(K, N);
13527
+ const useExact = M <= 1e3;
13528
+ const pmf = (k) => {
13529
+ if (!Number.isInteger(k) || k < kMin || k > kMax) return 0;
13530
+ return useExact ? _choose(K, k) * _choose(M - K, N - k) / _choose(M, N) : Math.exp(_logChoose(K, k) + _logChoose(M - K, N - k) - _logChoose(M, N));
13531
+ };
13532
+ const cdf = (k) => {
13533
+ if (k < kMin) return 0;
13534
+ const kk = Math.min(Math.floor(k), kMax);
13535
+ let sum3 = 0;
13536
+ for (let i = kMin; i <= kk; i++) sum3 += pmf(i);
13537
+ return Math.min(1, sum3);
13538
+ };
13539
+ const mean6 = N * K / M;
13540
+ const variance2 = N * (K / M) * ((M - K) / M) * ((M - N) / (M - 1));
13541
+ return {
13542
+ pdf: pmf,
13543
+ cdf,
13544
+ quantile: (p) => {
13545
+ if (p <= 0) return kMin;
13546
+ if (p >= 1) return kMax;
13547
+ for (let k = kMin; k <= kMax; k++) if (cdf(k) >= p) return k;
13548
+ return kMax;
13549
+ },
13550
+ mean: mean6,
13551
+ variance: variance2,
13552
+ sample: () => _discreteSample(cdf, Math.random, kMax),
13553
+ sampleN: (n, opts) => _sampleNDispatch(null, [], n, opts, (count2, rng) => {
13554
+ const out = new Float64Array(count2);
13555
+ for (let j = 0; j < count2; j++) out[j] = _discreteSample(cdf, rng, kMax);
13556
+ return out;
13557
+ })
13558
+ };
13559
+ }
13560
+ function negativeBinomialDist(r, p) {
13561
+ if (!Number.isInteger(r) || r < 1)
13562
+ throw new Error("negativeBinomialDist: r must be a positive integer");
13563
+ if (p <= 0 || p > 1) throw new Error("negativeBinomialDist: p must be in (0, 1]");
13564
+ const pmf = (k) => {
13565
+ if (!Number.isInteger(k) || k < 0) return 0;
13566
+ return Math.exp(_logChoose(k + r - 1, k) + r * Math.log(p) + k * Math.log(1 - p));
13567
+ };
13568
+ const cdf = (k) => {
13569
+ if (k < 0) return 0;
13570
+ return Math.min(1, _betainc(p, r, Math.floor(k) + 1));
13571
+ };
13572
+ const mean6 = r * (1 - p) / p;
13573
+ const variance2 = r * (1 - p) / (p * p);
13574
+ return {
13575
+ pdf: pmf,
13576
+ cdf,
13577
+ quantile: (prob) => {
13578
+ if (prob <= 0) return 0;
13579
+ if (prob >= 1) return Infinity;
13580
+ let cumul = 0;
13581
+ for (let k = 0; k < 1e5; k++) {
13582
+ cumul += pmf(k);
13583
+ if (cumul >= prob) return k;
13584
+ }
13585
+ return Infinity;
13586
+ },
13587
+ mean: mean6,
13588
+ variance: variance2,
13589
+ sample: () => _discreteSample(cdf, Math.random, Math.ceil(mean6 + 20 * Math.sqrt(variance2) + 20)),
13590
+ sampleN: (n, opts) => _sampleNDispatch(null, [], n, opts, (count2, rng) => {
13591
+ const out = new Float64Array(count2);
13592
+ const cap = Math.ceil(mean6 + 20 * Math.sqrt(variance2) + 20);
13593
+ for (let j = 0; j < count2; j++) out[j] = _discreteSample(cdf, rng, cap);
13594
+ return out;
13595
+ })
13596
+ };
13597
+ }
13492
13598
 
13493
13599
  // src/typed/hypothesis.ts
13494
13600
  import { computePool as computePool10 } from "@danielsimonjr/mathts-parallel";
@@ -14252,6 +14358,140 @@ function principalComponentAnalysis(data, k) {
14252
14358
  });
14253
14359
  return { components: eigenvectors, explained, scores };
14254
14360
  }
14361
+ function _kstwobignSf(x) {
14362
+ if (x <= 0) return 1;
14363
+ let sum3 = 0;
14364
+ for (let k = 1; k <= 100; k++) {
14365
+ const term = 2 * (k % 2 === 1 ? 1 : -1) * Math.exp(-2 * k * k * x * x);
14366
+ sum3 += term;
14367
+ if (Math.abs(term) < 1e-15) break;
14368
+ }
14369
+ return Math.max(0, Math.min(1, sum3));
14370
+ }
14371
+ function kolmogorovSmirnov2Test(sample1, sample2) {
14372
+ const n16 = sample1.length;
14373
+ const n26 = sample2.length;
14374
+ if (n16 < 1 || n26 < 1) {
14375
+ throw new Error("kolmogorovSmirnov2Test: both samples must be non-empty");
14376
+ }
14377
+ const a = sample1.slice().sort((x, y) => x - y);
14378
+ const b = sample2.slice().sort((x, y) => x - y);
14379
+ let i = 0;
14380
+ let j = 0;
14381
+ let d = 0;
14382
+ while (i < n16 && j < n26) {
14383
+ const x = Math.min(a[i], b[j]);
14384
+ while (i < n16 && a[i] <= x) i++;
14385
+ while (j < n26 && b[j] <= x) j++;
14386
+ d = Math.max(d, Math.abs(i / n16 - j / n26));
14387
+ }
14388
+ const en = Math.sqrt(n16 * n26 / (n16 + n26));
14389
+ return { statistic: d, pValue: _kstwobignSf(en * d) };
14390
+ }
14391
+ function _median(arr7) {
14392
+ const s = arr7.slice().sort((a, b) => a - b);
14393
+ const n = s.length;
14394
+ const m = n >> 1;
14395
+ return n % 2 === 1 ? s[m] : (s[m - 1] + s[m]) / 2;
14396
+ }
14397
+ function leveneTest(groups, center = "median") {
14398
+ const k = groups.length;
14399
+ if (k < 2) throw new Error("leveneTest: need at least 2 groups");
14400
+ let N = 0;
14401
+ for (const g of groups) {
14402
+ if (g.length < 1) throw new Error("leveneTest: every group must be non-empty");
14403
+ N += g.length;
14404
+ }
14405
+ const z = groups.map((g) => {
14406
+ const c = center === "median" ? _median(g) : _mean(g);
14407
+ return g.map((x) => Math.abs(x - c));
14408
+ });
14409
+ const allZ = [];
14410
+ for (const zi of z) for (const v of zi) allZ.push(v);
14411
+ const zBarAll = _mean(allZ);
14412
+ let num2 = 0;
14413
+ let den = 0;
14414
+ for (const zi of z) {
14415
+ const zBarI = _mean(zi);
14416
+ num2 += zi.length * (zBarI - zBarAll) * (zBarI - zBarAll);
14417
+ for (const v of zi) den += (v - zBarI) * (v - zBarI);
14418
+ }
14419
+ const W = (N - k) / (k - 1) * (num2 / den);
14420
+ return { statistic: W, pValue: _fPValue(W, k - 1, N - k), degreesOfFreedom: [k - 1, N - k] };
14421
+ }
14422
+ function bartlettTest(groups) {
14423
+ const k = groups.length;
14424
+ if (k < 2) throw new Error("bartlettTest: need at least 2 groups");
14425
+ let N = 0;
14426
+ for (const g of groups) {
14427
+ if (g.length < 2) throw new Error("bartlettTest: every group needs \u22652 observations");
14428
+ N += g.length;
14429
+ }
14430
+ let pooledNum = 0;
14431
+ let sumLnVar = 0;
14432
+ let sumInv = 0;
14433
+ for (const g of groups) {
14434
+ const ni = g.length;
14435
+ const si2 = _variance(g, 1);
14436
+ pooledNum += (ni - 1) * si2;
14437
+ sumLnVar += (ni - 1) * Math.log(si2);
14438
+ sumInv += 1 / (ni - 1);
14439
+ }
14440
+ const sp2 = pooledNum / (N - k);
14441
+ const numerator = (N - k) * Math.log(sp2) - sumLnVar;
14442
+ const C = 1 + (sumInv - 1 / (N - k)) / (3 * (k - 1));
14443
+ const T = numerator / C;
14444
+ return { statistic: T, pValue: _chiSquaredPValue(T, k - 1), degreesOfFreedom: k - 1 };
14445
+ }
14446
+ function studentTTestPaired(sample1, sample2) {
14447
+ const n = sample1.length;
14448
+ if (n < 2 || sample2.length !== n) {
14449
+ throw new Error("studentTTestPaired: samples must be the same length \u2265 2");
14450
+ }
14451
+ const d = sample1.map((x, i) => x - sample2[i]);
14452
+ const dBar = _mean(d);
14453
+ const sd = Math.sqrt(_variance(d, 1));
14454
+ const df = n - 1;
14455
+ const t = dBar / (sd / Math.sqrt(n));
14456
+ return { statistic: t, pValue: _tPValue(t, df), degreesOfFreedom: df };
14457
+ }
14458
+ function proportionZTest(count2, nobs, value) {
14459
+ let z;
14460
+ if (Array.isArray(count2) && Array.isArray(nobs)) {
14461
+ const [c1, c2] = count2;
14462
+ const [n16, n26] = nobs;
14463
+ const p1 = c1 / n16;
14464
+ const p2 = c2 / n26;
14465
+ const pPool = (c1 + c2) / (n16 + n26);
14466
+ z = (p1 - p2) / Math.sqrt(pPool * (1 - pPool) * (1 / n16 + 1 / n26));
14467
+ } else if (typeof count2 === "number" && typeof nobs === "number") {
14468
+ const p0 = value ?? 0.5;
14469
+ const pHat = count2 / nobs;
14470
+ z = (pHat - p0) / Math.sqrt(p0 * (1 - p0) / nobs);
14471
+ } else {
14472
+ throw new Error("proportionZTest: count and nobs must both be numbers or both be [a, b] pairs");
14473
+ }
14474
+ const pValue = erfcScalar(Math.abs(z) / Math.SQRT2);
14475
+ return { statistic: z, pValue };
14476
+ }
14477
+ function _binomPmf(k, n, p) {
14478
+ if (k < 0 || k > n) return 0;
14479
+ const logC = _lgamma3(n + 1) - _lgamma3(k + 1) - _lgamma3(n - k + 1);
14480
+ return Math.exp(logC + k * Math.log(p) + (n - k) * Math.log(1 - p));
14481
+ }
14482
+ function binomialTest(successes, n, p = 0.5) {
14483
+ if (!Number.isInteger(successes) || !Number.isInteger(n) || successes < 0 || successes > n) {
14484
+ throw new Error("binomialTest: successes must be an integer in [0, n]");
14485
+ }
14486
+ const dObs = _binomPmf(successes, n, p);
14487
+ const rel = 1 + 1e-7;
14488
+ let pValue = 0;
14489
+ for (let k = 0; k <= n; k++) {
14490
+ const pk = _binomPmf(k, n, p);
14491
+ if (pk <= dObs * rel) pValue += pk;
14492
+ }
14493
+ return { statistic: successes / n, pValue: Math.min(1, pValue) };
14494
+ }
14255
14495
 
14256
14496
  // src/typed/matrix-ops.ts
14257
14497
  import {
@@ -33488,7 +33728,7 @@ var createMedian = /* @__PURE__ */ factory(
33488
33728
  name219,
33489
33729
  dependencies219,
33490
33730
  ({ typed: typed3, add: add2, divide: divide2, compare: compare2, partitionSelect: partitionSelect2 }) => {
33491
- function _median(array) {
33731
+ function _median2(array) {
33492
33732
  try {
33493
33733
  const flat = flatten2(array.valueOf());
33494
33734
  const num2 = flat.length;
@@ -33525,7 +33765,7 @@ var createMedian = /* @__PURE__ */ factory(
33525
33765
  });
33526
33766
  return typed3(name219, {
33527
33767
  // median([a, b, c, d, ...])
33528
- "Array | Matrix": _median,
33768
+ "Array | Matrix": _median2,
33529
33769
  // median([a, b, c, d, ...], dim)
33530
33770
  "Array | Matrix, number | BigNumber": function(_array, _dim) {
33531
33771
  throw new Error("median(A, dim) is not yet supported");
@@ -33535,7 +33775,7 @@ var createMedian = /* @__PURE__ */ factory(
33535
33775
  if (containsCollections(args)) {
33536
33776
  throw new TypeError("Scalar values expected in function median");
33537
33777
  }
33538
- return _median(args);
33778
+ return _median2(args);
33539
33779
  }
33540
33780
  });
33541
33781
  }
@@ -42536,6 +42776,33 @@ function corrcoef(matrix2) {
42536
42776
  (_, i) => Array.from({ length: n }, (_2, j) => c[i][j] / (d[i] * d[j]))
42537
42777
  );
42538
42778
  }
42779
+ function kendallTau(x, y) {
42780
+ const n = x.length;
42781
+ if (n !== y.length) throw new Error("kendallTau: inputs must have equal length");
42782
+ if (n < 2) return NaN;
42783
+ let P2 = 0;
42784
+ let Q2 = 0;
42785
+ for (let i = 0; i < n; i++) {
42786
+ for (let j = i + 1; j < n; j++) {
42787
+ const s = Math.sign(x[j] - x[i]) * Math.sign(y[j] - y[i]);
42788
+ if (s > 0) P2++;
42789
+ else if (s < 0) Q2++;
42790
+ }
42791
+ }
42792
+ const n0 = n * (n - 1) / 2;
42793
+ const tiePairs = (arr7) => {
42794
+ const counts = /* @__PURE__ */ new Map();
42795
+ for (const v of arr7) counts.set(v, (counts.get(v) ?? 0) + 1);
42796
+ let s = 0;
42797
+ for (const c of counts.values()) s += c * (c - 1) / 2;
42798
+ return s;
42799
+ };
42800
+ const n16 = tiePairs(x);
42801
+ const n26 = tiePairs(y);
42802
+ const denom = Math.sqrt((n0 - n16) * (n0 - n26));
42803
+ if (denom === 0) return NaN;
42804
+ return (P2 - Q2) / denom;
42805
+ }
42539
42806
 
42540
42807
  // src/numeric-extra.ts
42541
42808
  var toArr = (x) => Array.isArray(x) ? x : Array.from(x);
@@ -43716,6 +43983,7 @@ export {
43716
43983
  avogadro,
43717
43984
  bandpassFilter,
43718
43985
  bartlettPSD,
43986
+ bartlettTest,
43719
43987
  bellNumbers,
43720
43988
  bernoulli,
43721
43989
  bernoulliPMF,
@@ -43740,6 +44008,7 @@ export {
43740
44008
  bin,
43741
44009
  binomialDist,
43742
44010
  binomialPMF,
44011
+ binomialTest,
43743
44012
  bitAnd,
43744
44013
  bitNot,
43745
44014
  bitOr,
@@ -44057,6 +44326,7 @@ export {
44057
44326
  highpassFilter,
44058
44327
  hilbertTransform,
44059
44328
  hmean,
44329
+ hypergeometricDist,
44060
44330
  hypot,
44061
44331
  idct,
44062
44332
  identity,
@@ -44100,9 +44370,11 @@ export {
44100
44370
  jsDivergence,
44101
44371
  kdTree,
44102
44372
  kdTreeNearest,
44373
+ kendallTau,
44103
44374
  kldivergence,
44104
44375
  klitzing,
44105
44376
  kmeans,
44377
+ kolmogorovSmirnov2Test,
44106
44378
  kolmogorovSmirnovTest,
44107
44379
  kron,
44108
44380
  kruskalWallis,
@@ -44125,6 +44397,7 @@ export {
44125
44397
  legendreFit,
44126
44398
  legendreP,
44127
44399
  levenbergMarquardt,
44400
+ leveneTest,
44128
44401
  lfilter,
44129
44402
  lfilterZi,
44130
44403
  lgamma,
@@ -44203,6 +44476,7 @@ export {
44203
44476
  multiplyScalar,
44204
44477
  multivariateTaylor,
44205
44478
  nearestNeighbor,
44479
+ negativeBinomialDist,
44206
44480
  nelderMead,
44207
44481
  neutronMass,
44208
44482
  newtonInterp,
@@ -44304,6 +44578,7 @@ export {
44304
44578
  print,
44305
44579
  prod,
44306
44580
  projectVector,
44581
+ proportionZTest,
44307
44582
  protonMass,
44308
44583
  qr,
44309
44584
  quadprog,
@@ -44416,6 +44691,7 @@ export {
44416
44691
  studentTPDF,
44417
44692
  studentTQuantile,
44418
44693
  studentTTest,
44694
+ studentTTestPaired,
44419
44695
  studentizedRangeCDF,
44420
44696
  studentizedRangeQuantile,
44421
44697
  subfactorial,
@@ -215,5 +215,22 @@ export declare function uniformDist(a?: f64, b?: f64): Distribution;
215
215
  * d.mean // sqrt(pi) / 2
216
216
  */
217
217
  export declare function weibullDist(k: f64, lambda?: f64): Distribution;
218
+ /**
219
+ * Hypergeometric distribution — the number of successes in `draws` samples drawn
220
+ * WITHOUT replacement from a `population` containing `successes` successes.
221
+ * `hypergeometricDist(population, successes, draws)` matches
222
+ * `scipy.stats.hypergeom(M=population, n=successes, N=draws)`.
223
+ *
224
+ * @example hypergeometricDist(50, 5, 10).pmf(1) // 0.4313371972
225
+ */
226
+ export declare function hypergeometricDist(population: number, successes: number, draws: number): Distribution;
227
+ /**
228
+ * Negative-binomial distribution — the number of failures before the `r`-th
229
+ * success in i.i.d. Bernoulli(`p`) trials. `negativeBinomialDist(r, p)` matches
230
+ * `scipy.stats.nbinom(r, p)` (integer `r`).
231
+ *
232
+ * @example negativeBinomialDist(5, 0.4).pmf(3) // 0.0774144
233
+ */
234
+ export declare function negativeBinomialDist(r: number, p: f64): Distribution;
218
235
  export {};
219
236
  //# sourceMappingURL=dist-objects.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dist-objects.d.ts","sourceRoot":"","sources":["../../src/typed/dist-objects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AASH,0CAA0C;AAC1C,KAAK,GAAG,GAAG,MAAM,CAAC;AAElB;;;GAGG;AACH,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IACrB,uCAAuC;IACvC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IACrB,sCAAsC;IACtC,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IAC1B,wBAAwB;IACxB,IAAI,EAAE,GAAG,CAAC;IACV,4BAA4B;IAC5B,QAAQ,EAAE,GAAG,CAAC;IACd,oDAAoD;IACpD,MAAM,EAAE,MAAM,GAAG,CAAC;IAClB;;;;;;;;;OASG;IACH,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACtE;AAsPD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EAAE,GAAE,GAAO,EAAE,KAAK,GAAE,GAAO,GAAG,YAAY,CA6BpE;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,YAAY,CAiD7D;AA6DD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,YAAY,CAsD5D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAsDtD;AAMD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,GAAE,GAAO,GAAG,YAAY,CAuB7D;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,YAAY,CAwDpD;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,GAAE,GAAO,GAAG,YAAY,CA8CjE;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,EAAE,GAAE,GAAO,EAAE,KAAK,GAAE,GAAO,GAAG,YAAY,CAiCvE;AAMD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,CAoDrD;AAMD;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,GAAG,GAAG,YAAY,CAmD3C;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAE,GAAO,EAAE,CAAC,GAAE,GAAO,GAAG,YAAY,CA2BhE;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAE,GAAO,GAAG,YAAY,CA8BjE"}
1
+ {"version":3,"file":"dist-objects.d.ts","sourceRoot":"","sources":["../../src/typed/dist-objects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AASH,0CAA0C;AAC1C,KAAK,GAAG,GAAG,MAAM,CAAC;AAElB;;;GAGG;AACH,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IACrB,uCAAuC;IACvC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IACrB,sCAAsC;IACtC,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IAC1B,wBAAwB;IACxB,IAAI,EAAE,GAAG,CAAC;IACV,4BAA4B;IAC5B,QAAQ,EAAE,GAAG,CAAC;IACd,oDAAoD;IACpD,MAAM,EAAE,MAAM,GAAG,CAAC;IAClB;;;;;;;;;OASG;IACH,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACtE;AAuPD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EAAE,GAAE,GAAO,EAAE,KAAK,GAAE,GAAO,GAAG,YAAY,CA6BpE;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,YAAY,CAiD7D;AA6DD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,YAAY,CAsD5D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAsDtD;AAMD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,GAAE,GAAO,GAAG,YAAY,CAuB7D;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,YAAY,CAwDpD;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,GAAE,GAAO,GAAG,YAAY,CA8CjE;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,EAAE,GAAE,GAAO,EAAE,KAAK,GAAE,GAAO,GAAG,YAAY,CAiCvE;AAMD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY,CAoDrD;AAMD;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,GAAG,GAAG,YAAY,CAmD3C;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,CAAC,GAAE,GAAO,EAAE,CAAC,GAAE,GAAO,GAAG,YAAY,CA2BhE;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAE,GAAO,GAAG,YAAY,CA8BjE;AAmCD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,YAAY,CAmDd;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,YAAY,CAwCpE"}
@@ -270,5 +270,83 @@ export declare function shapiroWilkTest(sample: f64[], opts?: BootstrapOptions):
270
270
  * result.explained // [1.0]
271
271
  */
272
272
  export declare function principalComponentAnalysis(data: f64[][], k?: number): PCAResult;
273
+ /**
274
+ * Two-sample Kolmogorov–Smirnov test: are two samples drawn from the same
275
+ * continuous distribution? The statistic is the maximum gap between the two
276
+ * empirical CDFs, D = maxₓ |F₁(x) − F₂(x)|; the p-value is the large-sample
277
+ * asymptotic Q(√(n₁n₂/(n₁+n₂))·D) (the `kstwobign` survival function, matching
278
+ * scipy's asymptotic method for large n). Distinct from the one-sample
279
+ * {@link kolmogorovSmirnovTest}, which compares one sample to a CDF *function*.
280
+ *
281
+ * @param sample1 - first sample (non-empty)
282
+ * @param sample2 - second sample (non-empty)
283
+ * @returns `{ statistic: D, pValue }`
284
+ *
285
+ * @example
286
+ * kolmogorovSmirnov2Test([0.1, 0.4, 0.6], [0.3, 0.5, 0.9]) // { statistic, pValue }
287
+ */
288
+ export declare function kolmogorovSmirnov2Test(sample1: f64[], sample2: f64[]): KSTestResult;
289
+ /** Variance-homogeneity test result. `degreesOfFreedom` is `[d1, d2]` for the
290
+ * F-based Levene test, a single number for the χ²-based Bartlett test. */
291
+ export interface VarianceTestResult {
292
+ statistic: f64;
293
+ pValue: f64;
294
+ degreesOfFreedom: number | [number, number];
295
+ }
296
+ /**
297
+ * Levene's test for equality of variances across ≥2 groups (the ANOVA
298
+ * prerequisite). Robust to non-normality — it runs a one-way ANOVA F-test on the
299
+ * absolute deviations from each group's center. `center` defaults to `'median'`
300
+ * (the Brown–Forsythe variant, scipy's default); `'mean'` gives the original
301
+ * Levene test. Pinned to `scipy.stats.levene`.
302
+ *
303
+ * @example leveneTest([[8.1,8.3,7.9],[9.1,9.5,8.9]]) // { statistic, pValue, degreesOfFreedom }
304
+ */
305
+ export declare function leveneTest(groups: f64[][], center?: 'median' | 'mean'): VarianceTestResult;
306
+ /**
307
+ * Bartlett's test for equality of variances across ≥2 groups. More powerful than
308
+ * Levene when the data are normal, but sensitive to departures from normality.
309
+ * Statistic is χ²-distributed with k−1 df. Pinned to `scipy.stats.bartlett`.
310
+ *
311
+ * @example bartlettTest([[8.1,8.3,7.9],[9.1,9.5,8.9]]) // { statistic, pValue, degreesOfFreedom }
312
+ */
313
+ export declare function bartlettTest(groups: f64[][]): VarianceTestResult;
314
+ /**
315
+ * Paired (dependent-samples) t-test: tests whether the mean of the paired
316
+ * differences x−y is zero. Distinct from the two-sample Welch test in
317
+ * {@link studentTTest}, which assumes independent samples. Pinned to
318
+ * `scipy.stats.ttest_rel`.
319
+ *
320
+ * @example studentTTestPaired([1.2,2.3,3.1], [1.0,2.0,3.5]) // { statistic, pValue, degreesOfFreedom }
321
+ */
322
+ export declare function studentTTestPaired(sample1: f64[], sample2: f64[]): TTestResult;
323
+ /** z-test result (statistic + two-tailed p-value). */
324
+ export interface ProportionZResult {
325
+ statistic: f64;
326
+ pValue: f64;
327
+ }
328
+ /**
329
+ * Proportion z-test (large-sample, two-tailed).
330
+ * - **One-sample**: `proportionZTest(successes, n, p0)` tests p̂ = successes/n
331
+ * against a hypothesized proportion `p0`.
332
+ * - **Two-sample**: `proportionZTest([s1, s2], [n1, n2])` tests p̂₁ = p̂₂ using
333
+ * the pooled-variance z (equivalent to `statsmodels.proportions_ztest`).
334
+ *
335
+ * @example proportionZTest(40, 100, 0.5) // one-sample: z=-2, p≈0.0455
336
+ * @example proportionZTest([40, 30], [100, 100]) // two-sample: z≈1.482, p≈0.138
337
+ */
338
+ export declare function proportionZTest(count: number | [number, number], nobs: number | [number, number], value?: number): ProportionZResult;
339
+ /**
340
+ * Exact binomial test — is the observed success count consistent with success
341
+ * probability `p`? The two-tailed p-value is the total probability of all
342
+ * outcomes no more likely than the observed one (scipy's method-of-small-p).
343
+ * Pinned to `scipy.stats.binomtest`.
344
+ *
345
+ * @example binomialTest(8, 20, 0.5) // { pValue: 0.5034446716 }
346
+ */
347
+ export declare function binomialTest(successes: number, n: number, p?: f64): {
348
+ statistic: f64;
349
+ pValue: f64;
350
+ };
273
351
  export {};
274
352
  //# sourceMappingURL=hypothesis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hypothesis.d.ts","sourceRoot":"","sources":["../../src/typed/hypothesis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hypothesis.d.ts","sourceRoot":"","sources":["../../src/typed/hypothesis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAUH,mBAAmB;AACnB,KAAK,GAAG,GAAG,MAAM,CAAC;AAElB,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,GAAG,CAAC;IACZ,gBAAgB,EAAE,GAAG,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,GAAG,CAAC;IACZ,gBAAgB,EAAE,GAAG,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,GAAG,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,GAAG,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,GAAG,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,GAAG,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,GAAG,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC;IACpB,SAAS,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;CACjB;AAMD;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,SAAS,EAAE,GAAG,CAAC;IACf,yEAAyE;IACzE,eAAe,EAAE,GAAG,CAAC;IACrB,iCAAiC;IACjC,mBAAmB,EAAE,YAAY,CAAC;IAClC,aAAa,EAAE,GAAG,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,UAAU,EAAE,GAAG,CAAC;IAChB,gEAAgE;IAChE,eAAe,EAAE,GAAG,CAAC;IACrB,iCAAiC;IACjC,mBAAmB,EAAE,YAAY,CAAC;IAClC,aAAa,EAAE,GAAG,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,SAAS,EAAE,GAAG,CAAC;IACf;;;OAGG;IACH,eAAe,EAAE,GAAG,CAAC;IACrB,iCAAiC;IACjC,mBAAmB,EAAE,YAAY,CAAC;IAClC,aAAa,EAAE,GAAG,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,8DAA8D;IAC9D,SAAS,EAAE,GAAG,CAAC;IACf,4DAA4D;IAC5D,eAAe,EAAE,GAAG,CAAC;IACrB,oCAAoC;IACpC,mBAAmB,EAAE,YAAY,CAAC;IAClC,aAAa,EAAE,GAAG,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;CACnB;AA6OD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,WAAW,CA+BzE;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EACzB,QAAQ,CAAC,EAAE,GAAG,EAAE,EAChB,IAAI,CAAC,EAAE,gBAAgB,GACtB,OAAO,CAAC,eAAe,GAAG,wBAAwB,CAAC,CA6JrD;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,WAAW,CA+ClD;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,GAAG,EAAE,EACb,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,EACvB,IAAI,CAAC,EAAE,gBAAgB,GACtB,OAAO,CAAC,YAAY,GAAG,iBAAiB,CAAC,CA8G3C;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,GAAG,EAAE,EACd,OAAO,EAAE,GAAG,EAAE,EACd,IAAI,CAAC,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,CAuJhD;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,GAAG,EAAE,EACb,IAAI,CAAC,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,CAyKhD;AAyDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAgG/E;AAsBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,YAAY,CAuBnF;AAcD;2EAC2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,GAAG,CAAC;IACZ,gBAAgB,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,GAAG,EAAE,EAAE,EACf,MAAM,GAAE,QAAQ,GAAG,MAAiB,GACnC,kBAAkB,CAyBpB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,kBAAkB,CAuBhE;AAMD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,WAAW,CAW9E;AAED,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,GAAG,CAAC;CACb;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,KAAK,CAAC,EAAE,MAAM,GACb,iBAAiB,CAoBnB;AASD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,MAAM,EACT,CAAC,GAAE,GAAS,GACX;IAAE,SAAS,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,GAAG,CAAA;CAAE,CAYjC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danielsimonjr/mathts-functions",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "description": "Mathematical functions for MathTS - arithmetic, algebra, trigonometry, statistics, and more",
5
5
  "author": "Daniel Simon Jr.",
6
6
  "license": "MIT",