%% 进行预测的程序
% 知乎专栏中的单步预测代码。为脚本文件,可以直接运行。
% Copyright (c) 2019 Mr.括号 All rights reserved.
% 原文链接 https://zhuanlan.zhihu.com/p/69630638
% 代码地址:https://github.com/KuoHaoJun/ARMA
%% 1.导入数据
close all
clear all
data=csvread('132.txt'); %纳斯达克综合指数
len = 1200;
data = DataTable.NASDAQ(1:len);
plot(data)
%% 2.平稳性检验
% 原数据
y_h_adf = adftest(data)
y_h_kpss = kpsstest(data)% 一阶差分,结果平稳。如果依旧不平稳的话,再次求差分,直至通过检验
Yd1 = diff(data);
yd1_h_adf = adftest(Yd1)
yd1_h_kpss = kpsstest(Yd1)
Y = diff(data);
%% 3.确定ARMA模型阶数
% ACF和PACF法,确定阶数
figure
autocorr(Y)
figure
parcorr(Y)
% 通过AIC,BIC等准则暴力选定阶数
max_ar = 3;
max_ma = 3;
% [AR_Order,MA_Order] = ARMA_Order_Select(Y,max_ar,max_ma,1);
%% 4.残差检验
Mdl = arima(AR_Order, 1, MA_Order); %第二个变量值为1,即一阶差分
EstMdl = estimate(Mdl,data);
[res,~,logL] = infer(EstMdl,data); %res即残差
stdr = res/sqrt(EstMdl.Variance);
figure('Name','残差检验')
subplot(2,3,1)
plot(stdr)
title('Standardized Residuals')
subplot(2,3,2)
histogram(stdr,10)
title('Standardized Residuals')
subplot(2,3,3)
autocorr(stdr)
subplot(2,3,4)
parcorr(stdr)
subplot(2,3,5)
qqplot(stdr)
% Durbin-Watson 统计是计量经济学分析中最常用的自相关度量
diffRes0 = diff(res);
SSE0 = res'*res;
DW0 = (diffRes0'*diffRes0)/SSE0 % Durbin-Watson statistic,该值接近2,则可以认为序列不存在一阶相关性。
%% 5.预测
step = 300;
[forData,YMSE] = forecast(EstMdl,step,'Y0',data); %matlab2019写为[forData,YMSE] = forecast(EstMdl,step,data);
lower = forData - 1.96*sqrt(YMSE); %95置信区间下限
upper = forData + 1.96*sqrt(YMSE); %95置信区间上限
figure()
plot(data,'Color',[.7,.7,.7]);
hold on
h1 = plot(length(data):length(data)+step,[data(end);lower],'r:','LineWidth',2);
plot(length(data):length(data)+step,[data(end);upper],'r:','LineWidth',2)
h2 = plot(length(data):length(data)+step,[data(end);forData],'k','LineWidth',2);
legend([h1 h2],'95% 置信区间','预测值',...
'Location','NorthWest')
title('Forecast')
hold off
% 上述从2~5步程序可以使用一行封装好的函数程序实现:
% Fun_ARIMA_Forecast(data,300,3,3,'on')
% -该函数程序可以快速实现你想要完成的预测
% -可以通过输入原始数据、预测步数等直接获得预测结果
% -将使用ARIMA进行预测的过程中的大部分工作都固化下来
% -有实现多步预测、单步预测、剩余寿命预测的demos。
% -可以得到更高阶的模型
% -简易式调用,适合小白入手
% -持续更新
% 获需取该封装好的的代码及相关程序可以看这里:https://item.taobao.com/item.htm?spm=a2126o.11854294.0.0.49ab4831rm8DbS&id=612059653145
% 关于该工具更多的描述在这里:http://www.khscience.cn/docs/index.php/2020/04/19/123/