SARIMA 模型Matlab代码
% 导入数据
data = readtable('data.xlsx'); % 假设数据在第一列
y = data{:, 1}; % 获取第一列数据
% 划分训练集和测试集,80% 训练,20% 测试
trainSize = floor(0.8 * length(y));
trainData = y(1:trainSize);
testData = y(trainSize+1:end);
% 创建时间序列对象
trainTS = timeseries(trainData);
testTS = timeseries(testData);
% 设置季节性周期为 4,拟合 SARIMA 模型
% 在此我们假设 SARIMA 模型参数为 (p,d,q)(P,D,Q)[S]
p = 1; d = 1; q = 1; % 非季节性部分的ARIMA参数
P = 1; D = 1; Q = 1; % 季节性部分的ARIMA参数
S = 4; % 季节性周期
% 使用arima函数创建SARIMA模型
model = arima('Constant', 0, 'D', d, 'Seasonality', S, ...
'ARLags', p, 'D', D, 'MALags', q, ...
'SARLags', P, 'SMALags', Q);
% 拟合SARIMA模型
fitModel = estimate(model, trainData);
% 进行预测
numSteps = length(testData);
[Y_Forecast, Y_ForecastMSE] = forecast(fitModel, numSteps, 'Y0', trainData);
% 计算 R²(决定系数)评价预测效果
SS_tot = sum((testData - mean(testData)).^2); % 总平方和
SS_res = sum((testData - Y_Forecast).^2); % 残差平方和
R2 = 1 - (SS_res / SS_tot); % R²计算
% 显示R²值
disp(['R²: ', num2str(R2)]);
% 绘制结果
figure;
hold on;
plot(testData, 'b', 'DisplayName', '真实数据');
plot(Y_Forecast, 'r--', 'DisplayName', '预测数据');
legend show;
title('SARIMA预测结果');
xlabel('时间');
ylabel('值');
hold off;
关键调整:
-
模型定义: 使用
arima
函数的Seasonality
和SARLags
、MALags
等参数来指定季节性部分。'Constant'
: 设置常数项为 0(如果没有常数项的话)。'Seasonality'
: 设置季节性周期为 4(周期长度)。'ARLags'
: 设置非季节性自回归滞后期。'MALags'
: 设置非季节性移动平均滞后期。'SARLags'
: 设置季节性自回归滞后期。'SMALags'
: 设置季节性移动平均滞后期。
-
模型拟合与预测:
estimate
函数用来拟合模型,forecast
用于预测测试集数据。 -
R²计算: 计算了 R²(决定系数)来评价模型的预测效果。
注意事项:
- 确保你安装了 MATLAB 中的 Econometrics Toolbox,因为
arima
和forecast
函数来自于该工具箱。 - 如果你使用的数据有缺失值,可能需要先进行数据清洗。