Releases: Oremif/kstats
Kstats 0.5.0
kstats 0.5.0
Description
kstats 0.5.0 adds a Statistical Process Control (SPC) suite — control charts (X-bar, R, S, CUSUM, EWMA), process capability indices (Cp, Cpk, Pp, Ppk), Western Electric pattern detection rules, and Grubbs' test for outlier detection.
Features
- Process capability indices — Cp, Cpk, Pp, Ppk via
processCapability(data, lsl, usl)by @devcrocod in #98 - Grubbs' test for outlier detection — single-point
grubbsTestand iterativegrubbsTestIterativeby @devcrocod in #99 - X-bar, R, and S control charts with full SPC constants table (A2, A3, B3, B4, c4, D3, D4) via
spcConstants(subgroupSize)by @devcrocod in #100 - CUSUM (Cumulative Sum) control chart — sensitive detection of small process shifts via
cusum(data, target, k, h)by @devcrocod in #105 - EWMA (Exponentially Weighted Moving Average) control chart —
ewma(data, target, sigma, lambda, L)with dynamic control limits by @devcrocod in #106 - Western Electric Rules — pattern detection for control charts (4 standard rules) via
westernElectricRules(data, centerLine, sigma)by @devcrocod in #107
Fixed
regularizedBetano longer fails to converge for large parameters — switched to Lentz's modified continued fraction algorithm by @devcrocod in #97
Documentation
- A/B testing tutorial with two real-world Kaggle datasets (proportion z-test, chi-squared, Bayesian posteriors, power analysis, Wilcoxon, effect sizes) by @devcrocod in #94
- Updated sample notebooks and guides for 0.4.0, with Kotlin Notebook cards added to German pages by @devcrocod in #92
- Documented SPC methods and Grubbs' test in module overviews by @devcrocod in #113
- Added CLAUDE.md with project guidelines and conventions by @devcrocod in #101
Maintenance
- Migrated to Korro 0.2.0 by @devcrocod in #102
- Pinned Node.js to 22 LTS in CI to unblock wasmWasiNodeTest by @devcrocod in #91
- Cleaned up redundant syntax and unused code by @devcrocod in #112
- Made ControlChart toString tests JS-compatible by @devcrocod in #114
Dependencies
- Kotlin to v2.3.21 in #110
- Android Gradle Plugin to v9.2.0 in #111
- Android Gradle Plugin to v9.1.1 in #103
- Korro to v0.2.1 in #109
- actions/setup-node to v6 in #95
- actions/upload-pages-artifact to v5 in #104
- Node to v24 in #96
Full Changelog: 0.4.0...0.5.0
Kstats 0.4.0
Description
Adds A/B testing toolkit: proportion z-test, effect sizes (Cohen's d/h, Hedges' g), power analysis, multiple comparison corrections (Bonferroni, Holm, Benjamini-Hochberg), bootstrap confidence intervals, Wilson/Agresti-Coull CIs, odds ratio/relative risk, and 13 Hyndman-Fan quantile estimation methods.
Breaking Changes
TestResult.confidenceInterval changed from Pair<Double, Double>? to ConfidenceInterval by @devcrocod in #83
ConfidenceInterval is a data class with lower and upper properties. Destructuring still works identically.
- val ci: Pair<Double, Double>? = result.confidenceInterval
+ val ci: ConfidenceInterval? = result.confidenceIntervalQuantileInterpolation deprecated in favor of QuantileMethod by @devcrocod in #85
All quantile functions (percentile, quantile, quartiles, interquartileRange) now accept QuantileMethod instead of QuantileInterpolation. Old overloads remain as deprecated with ReplaceWith.
- percentile(data, 95.0, QuantileInterpolation.LINEAR)
+ percentile(data, 95.0, QuantileMethod.LINEAR)Features
- Add proportion z-test (one-sample and two-sample) with
Alternativesupport by @devcrocod in #73 - Add Cohen's d effect size for independent and paired samples by @devcrocod in #74
- Add Cohen's h effect size for comparing proportions by @devcrocod in #75
- Add Hedges' g effect size with small-sample bias correction by @devcrocod in #76
- Add odds ratio and relative risk with confidence intervals for 2x2 contingency tables by @devcrocod in #82
- Add bootstrap confidence intervals (percentile, basic, BCa) by @devcrocod in #83
- Add 13 Hyndman-Fan quantile estimation methods with
QuantileMethodenum by @devcrocod in #85 - Add power analysis for t-tests and proportion z-tests (
tTestPower,tTestRequiredN,proportionZTestPower,proportionZTestRequiredN, minimum detectable effect) by @devcrocod in #86 - Add Wilson and Agresti-Coull confidence interval methods for
binomialTestby @devcrocod in #87 - Add multiple comparison correction methods: Bonferroni, Holm-Bonferroni, Benjamini-Hochberg by @devcrocod in #88
Fixed
- Propagate NaN
confidenceLevelin proportion z-test per IEEE 754 by @devcrocod in #77
Documentation
- Add missing KDoc and fix
@paramto@propertyannotations for distribution constructors by @devcrocod in #89 - Remove "zero-dependency" branding from README and docs by @devcrocod in #59
- Add Kotlin notebook for building a statistics pipeline by @devcrocod in #16
Maintenance
- Add klib API dump files for native binary compatibility tracking by @devcrocod in #78
- Move BCV to root project and enable klib API validation by @devcrocod in #79
- Extract property-based distribution tests into abstract base classes by @devcrocod in #80
- Add context7.json configuration for project metadata by @devcrocod in #17
Dependencies
- Configure Renovate in #1
- actions/upload-artifact to v7 in #11
- Gradle Actions to v6 in #18
- Dokka Gradle plugin to v2.2.0 in #57
- actions/deploy-pages to v5 in #58
Full Changelog: 0.3.0...0.4.0
Kstats 0.3.0
kstats 0.3.0
🚀 kstats 0.3.0 is out! This release brings 28 probability distributions, 20 hypothesis tests, descriptive statistics, correlation analysis, and sampling utilities — all implemented in pure Kotlin across 20+ multiplatform targets.
Installation
// Using BOM
implementation(platform("org.oremif:kstats-bom:0.3.0"))
implementation("org.oremif:kstats-core")
implementation("org.oremif:kstats-distributions")
implementation("org.oremif:kstats-hypothesis")
implementation("org.oremif:kstats-correlation")
implementation("org.oremif:kstats-sampling")Modules
kstats-core
- Descriptive statistics: mean, geometric/harmonic/weighted/trimmed mean, median, mode, variance, standard deviation, skewness, kurtosis, quantiles, percentiles, IQR, MAD, semi-variance, coefficient of variation, central moments,
describe()summary - Online statistics: streaming single-pass computation via Welford's algorithm with Terriberry extension (mean, variance, SD, skewness, kurtosis)
- Special functions: gamma, beta, regularized incomplete beta/gamma, erf/erfInv, digamma, trigamma
- Combinatorics: lnFactorial, lnCombination, lnPermutation, generalized harmonic, GCD/LCM
- Typed exception hierarchy:
InsufficientDataException,InvalidParameterException,ConvergenceException,DegenerateDataException - Numerical stability: Neumaier compensated summation, z-normalized moment computation, introselect for order statistics
kstats-distributions — 28 probability distributions
Continuous (18): Normal, Student's t, Chi-Squared, F, Exponential, Gamma, Beta, Uniform, LogNormal, Cauchy, Laplace, Weibull, Gumbel, Pareto, Triangular, Logistic, Nakagami, Lévy
Discrete (10): Binomial, Negative Binomial, Poisson, Geometric, Discrete Uniform, Bernoulli, Hypergeometric, Beta-Binomial, Zipf, Logarithmic
All distributions implement a common interface: pdf/pmf, logPdf/logPmf, cdf, sf, quantile, sample, mean, variance, skewness, kurtosis, entropy.
kstats-hypothesis — 20 statistical tests
- Parametric: one-sample t-test, paired t-test, one-way ANOVA
- Non-parametric: Mann-Whitney U, Wilcoxon signed-rank, Friedman
- Normality: Shapiro-Wilk, Anderson-Darling, D'Agostino-Pearson, Jarque-Bera, Kolmogorov-Smirnov
- Homogeneity of variance: Bartlett, Levene, Fligner-Killeen
- Categorical: Chi-squared (GoF + independence), Fisher exact, binomial test, G-test (GoF + independence)
All tests return TestResult with statistic, p-value, degrees of freedom, confidence interval, and isSignificant(alpha).
kstats-correlation
- Pearson, Spearman, Kendall tau-b (O(n log n)), point-biserial, partial correlation
- Covariance and correlation matrices
- Simple linear regression (OLS) with R², residuals, and
predict()function
kstats-sampling
- Ranking with 5 tie-breaking methods (average, min, max, dense, ordinal)
- Z-score normalization, min-max scaling, percentile ranks
- Histogram binning (by count or bin width)
- Bootstrap sampling, random sampling without replacement, weighted dice
Platform support
JVM, Android (minSdk 24), iOS (arm64, x64, simulatorArm64), macOS (arm64), watchOS (arm32, arm64, deviceArm64, simulatorArm64), tvOS (arm64, simulatorArm64), Linux (arm64, x64), Windows (mingwX64), JS (browser, Node.js), WasmJS, WasmWASI.
Quality
- Test correctness verified against R, SciPy, and Apache Commons Math reference values
- Edge case coverage: NaN, Infinity, degenerate data, empty/single-element arrays
- JMH benchmarks comparing kstats vs Apache Commons Math included in
benchmark/module
Full Changelog: https://github.com/Oremif/kstats/commits/0.3.0