#pragma once #include namespace fn::ds { // Autocorrelacion lag k de la serie x[0..n). r(k) = cov(x_t, x_{t+k}) / var(x). // Definicion clasica con normalizacion sobre la varianza global. Devuelve // 1.0 para k=0 si la serie tiene varianza > 0; si var = 0 devuelve 0 para // todos los k. // // Si k >= n o n <= 1 devuelve 0. double autocorr_lag(const double* x, std::size_t n, std::size_t k); // Llena out[max_lag] con r(0), r(1), ..., r(max_lag-1). Util para ACF plots. void autocorr_acf(const double* x, std::size_t n, std::size_t max_lag, double* out); // Integrated Autocorrelation Time (tau_int) — definicion de Sokal con // truncado automatico cuando r(k) cae bajo el umbral. tau_int = 1 + 2 * sum // de r(k) hasta k_cutoff. Util para estimar Effective Sample Size: // ESS = n / tau_int. // // max_lag actua como cota dura. Si la ACF nunca cae bajo cutoff dentro de // max_lag, devuelve 1 + 2*sum hasta max_lag-1 (estimacion conservadora). double autocorr_tau(const double* x, std::size_t n, std::size_t max_lag = 200, double cutoff = 0.05); } // namespace fn::ds