pacf function

List<double> pacf(
  1. List<double> x,
  2. int maxLag
)

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;
}