ts-arima-forecast
Version:
TypeScript library for ARIMA, SARIMA (soon), and SARIMAX (soon) forecasting
48 lines (42 loc) • 1.2 kB
text/typescript
import { ARIMA } from '../models/arima';
export interface ModelSelection {
bestParams: any;
bestScore: number;
allResults: Array<{ params: any; score: number }>;
}
export class AutoARIMA {
static findBestARIMA(
data: number[],
maxP: number = 5,
maxD: number = 2,
maxQ: number = 5,
criterion: 'aic' | 'bic' = 'aic'
): ModelSelection {
const results: Array<{ params: any; score: number }> = [];
let bestScore = Infinity;
let bestParams: any = null;
for (let p = 0; p <= maxP; p++) {
for (let d = 0; d <= maxD; d++) {
for (let q = 0; q <= maxQ; q++) {
try {
const model = new ARIMA({ p, d, q });
const fitResult = model.fit(data);
const score = criterion === 'aic' ? fitResult.aic : fitResult.bic;
results.push({ params: { p, d, q }, score });
if (score < bestScore) {
bestScore = score;
bestParams = { p, d, q };
}
} catch (error) {
continue;
}
}
}
}
return {
bestParams,
bestScore,
allResults: results.sort((a, b) => a.score - b.score)
};
}
}