autoSarimaSmart function

SarimaFit autoSarimaSmart(
  1. List<double> series, {
  2. required int s,
  3. AutoConfig cfg = const AutoConfig(),
  4. bool useOCSB_CH_for_D = true,
  5. int? fixedD,
  6. int? fixedd,
})

Implementation

SarimaFit autoSarimaSmart(
  List<double> series, {
  required int s,
  AutoConfig cfg = const AutoConfig(),
  bool useOCSB_CH_for_D = true, // use OCSB+CH for deciding D
  int? fixedD, int? fixedd,     // istersen d/D’yi kilitle
}) {
  final D = fixedD ?? (useOCSB_CH_for_D ? nsdiffsAuto(series, s) : 0);
  final d = fixedd ?? ndiffs( differenceSeas(series, s, D) );

  SarimaFit? best; double bestScore=double.infinity;

  for (int p=0;p<=cfg.pMax;p++){
    for (int q=0;q<=cfg.qMax;q++){
      for (int P=0;P<=cfg.PMax;P++){
        for (int Q=0;Q<=cfg.QMax;Q++){
          if (p==0 && q==0 && P==0 && Q==0) continue;
          try {
            final fit = Sarima.fit(series, SarimaOrder(p,d,q,P,D,Q,s),
              includeMean: cfg.includeMean, exactMLE: cfg.exactMLE);
            // stability / invertibility: via combined polynomials
            if (!_arStationary(fit.arComb) || !_maInvertible(fit.maComb)) continue;
            final score = cfg.useBIC ? fit.bic : fit.aic;
            if (score < bestScore) { bestScore=score; best=fit; }
          } catch(_) { /* başarısız deneme */ }
        }
      }
    }
  }
  best ??= Sarima.fit(series, SarimaOrder(1,d,0, 0,D,0, s),
      includeMean: cfg.includeMean, exactMLE: cfg.exactMLE);
  return best;
}