Description
Add autocorrelation and partial autocorrelation functions for time-series analysis, plus the Ljung-Box formal test for serial correlation.
- ACF(k) —
Cov(xₜ, xₜ₊ₖ) / Var(xₜ), measures correlation at lag k
- PACF — partial autocorrelation via Durbin-Levinson recursion, isolates the direct correlation at lag k after removing shorter-lag effects
- Ljung-Box test — formal test for autocorrelation at multiple lags, using chi-squared distribution (already available in
kstats-distributions)
Useful for detecting periodicity (daily/weekly patterns) in latency data, SRE monitoring, and general time-series diagnostics. ACF/PACF would live in kstats-correlation alongside existing correlation functions; Ljung-Box in kstats-hypothesis alongside existing statistical tests.
Example usage
val latencies = doubleArrayOf(/* hourly latency measurements */)
// Autocorrelation at lags 1..20
val acf = autocorrelation(latencies, maxLag = 20)
acf[1] // lag-1 autocorrelation
acf[24] // lag-24 (daily cycle if hourly data)
val pacf = partialAutocorrelation(latencies, maxLag = 20)
// Formal test: is there significant autocorrelation?
val result = ljungBoxTest(latencies, lags = 10)
result.statistic // Q statistic
result.pValue // significance
Related to #64
Description
Add autocorrelation and partial autocorrelation functions for time-series analysis, plus the Ljung-Box formal test for serial correlation.
Cov(xₜ, xₜ₊ₖ) / Var(xₜ), measures correlation at lag kkstats-distributions)Useful for detecting periodicity (daily/weekly patterns) in latency data, SRE monitoring, and general time-series diagnostics. ACF/PACF would live in
kstats-correlationalongside existing correlation functions; Ljung-Box inkstats-hypothesisalongside existing statistical tests.Example usage
Related to #64