pacf function
PACF (Durbin-Levinson’den köşegen): pratik ve hızlı tahmin
Implementation
List<double> pacf(List<double> x, int maxLag) {
if (x.length < 3) return List.filled(maxLag + 1, double.nan);
final r = autocov(x, maxLag);
final pac = List<double>.filled(maxLag + 1, 0.0);
pac[0] = 1.0;
if (r[0].abs() < 1e-12) return pac;
final a = <List<double>>[];
final e = List<double>.filled(maxLag + 1, 0.0);
e[0] = r[0];
for (int k = 1; k <= maxLag; k++) {
double acc = r[k];
for (int j = 1; j < k; j++) acc -= a[k - 1][j] * r[k - j];
final kk = acc / (e[k - 1].abs() < 1e-18 ? 1e-18 : e[k - 1]);
final ak = List<double>.filled(k + 1, 0.0);
ak[k] = kk;
for (int j = 1; j < k; j++) ak[j] = a[k - 1][j] - kk * a[k - 1][k - j];
a.add(ak);
e[k] = e[k - 1] * (1 - kk * kk);
pac[k] = kk;
}
return pac;
}