【MATLAB第115期】基于MATLAB的多元時間序列的ARIMAX的預測模型
?一、簡介
ARIMAX?(Autoregressive Integrated Moving Average with eXogenous inputs)模型是一種結合自回歸(AR)、差分(I)、移動平均(MA)和外生變量的時間序列預測方法。其核心公式為:
?AR§?:利用歷史值的線性組合
?I(d)?:差分處理非平穩序列
?MA(q)?:建模誤差項的移動平均
?X?:外生變量(如X1~X7等外部因素)
二、數據準備與預處理
1. 數據導入
數據格式:最后一列為目標變量,其他列為外生變量
data = xlsread('數據集.xlsx'); % 讀取Excel數據
2. 數據預處理
?目標變量處理?:
y = data(:, end);
y(1) = []; % 刪除首項以對齊差分后的外生變量
?外生變量處理?:
IX = data(:, 1:end-1);
X = diff(IX, 1); % 一階差分使序列平穩
數據常具趨勢性,差分可消除非平穩性,使模型更準確。
三、滾動時間窗口創建
1. 參數設置
P = 2; % AR階數
D = 1; % 差分次數
WindowSize = 31; % 訓練窗口大小
ForecastPeriod = numel(y) - WindowSize - P - D; % 預測期數
2. 初始化存儲矩陣
?目標變量?:
yyT = zeros(ForecastPeriod, WindowSize + P + D + 1);
?外生變量?:
for i = 1:size(X, 2)eval(['XX', num2str(i), ' = zeros(ForecastPeriod, WindowSize+1);']);
end
3. 窗口數據填充
for nYear = 1:ForecastPeriod% 目標變量窗口yyT(nYear, :) = transpose(y(m:m + WindowSize + P + D));% 外生變量窗口for i = 1:size(X, 2)eval(['XX', num2str(i), '(nYear,:) = ...']);endm = m + 1; % 窗口滑動
end
四、ARIMAX模型訓練與預測
1. 模型參數設置
Mdl = arima(P, D, 2); % 創建ARIMAX(2,1,2)模型
2. 遞歸預測流程
% 模型估計
Mdl = estimate(Mdl, sY(1:end-1), 'Y0', yy0(t+1,:)', 'X', sX(1:end-1, :));
?關鍵參數解析?:
Y0:模型初始條件(差分后的初始值)
X0:外生變量初始條件
XF:預測期的外生變量值
五、預測結果可視化
figure;
axH = axes;
plot(axH, 1:ForecastPeriod, y(end-ForecastPeriod+1:end), 'Color', [0.9290 0.6940 0.1250], 'LineWidth', 1.2);
hold on;
plot(axH, 1:ForecastPeriod, eGNPR, 'Color', [0 0.4470 0.7410], 'LineWidth', 1.2);
legend(["Actual", "Forecasted"]);
title('ARIMAX(2,1,2)模型預測效果對比');
六、代碼獲取
1.閱讀首頁置頂文章
2.關注CSDN
3.根據自動回復消息,私信回復“115期”以及相應指令,即可獲取對應下載方式。