时间序列之MATLAB程序

根据B-J建模思想建立ARIMA模型

1.arima函数

m=arima('Constant',0,'ARLags',[1],'AR',{-1.1},'Variance',1);
x=simulate(m,1000);
plot(x);

其中arima函数应该是生成一个设定好模型参量及系数的ARIMA模型。
‘Constant’——常数项
0——常数项数值
‘ARLags’——AR部分参数阶数
【1】——AR模型中含有的阶数值,比如【1 3】表示含有1、3阶
‘AR’——AR参数的系数
{-1.1}——系数值
‘Variance’——残差项
1——残差的方差

2.simulate函数:是指按照模型随机生成一组变量
注:若ARIMA模型是不平稳的,则无法模拟。

figure(1), autocorr(x);
figure(2), parcorr(x);

3.autocorr函数:画出模型的自相关图
4.parcorr函数:画出模型的偏相关图

load data2.mat x; %x为某平稳序列
figure(1), autocorr(x);
figure(2), parcorr(x);
mdl5=arima(0,0,2);
emdl15=estimate(mdl5,x);

5.estimate函数是对于已知模型和数据样本进行参数估计
结果如下:
Value StandardError TStatistic PValue
_________ _____________ __________ ___________

Constant    -0.017827      0.025163        -0.70849         0.47864
MA{1}        -0.82061      0.025722         -31.903      2.421e-223
MA{2}         0.62068      0.024538          25.295     3.6465e-141
Variance      0.98204      0.042832          22.928     2.4654e-116

第一列分别对应的是常数 一阶 二阶 残差的系数
第四列为检验模型的准确性,一般认为小于0.05说明模型很好

maxLags=5;
AICsets=zeros(maxLags,maxLags);
for i=1:maxLags
    for j=1:maxLags
        mdl=arima('ARLags',[1:i],'MALags',[1:j]);
     [EstMdl, EstParamCov, LogL, info] = estimate(mdl, x);
      AICset(i,j)=aicbic(LogL,length(info.X));
    end
end     

遍历AR和MA的各个阶数的值,求解其AIC的值进行比较。
6.estimate的更高级函数哈哈哈(把输出分开)
EstMdl——整个的表(如上个函数)
EstParamCov——参数的相关系数矩阵
LogL——优化后的极大似然函数的函数值
info——极大似然函数优化过程中的一些值,比如初始值,最终值等等
注意:对于时间序列数据y必须是列向量

7.aicbic函数:同时实现AIC和BIC准则的计算
length(info.X)——参数的长度表示模型参数的个数

AICset(i,j)=aicbic(LogL,length(info.X));

这句表示只输出AIC的值

[aic,bic] = aicbic(LogL,length(info.X),length(x))

这句表示同时输出AIC和BIC的值。
注意:第一个是AIC,第二个是BIC

[h1,p1]=adftest(y);

8.adftest函数:利用ADF准侧判断时间序列是否平稳
h=0 表示接受原假设,即时间序列不平稳
h=1 表示不接受原假设,即时间序列平稳

diff_y=diff(y);

9.diff函数:将时间序列进行一阶差分

mdl=arima(2,1,0);
estmdl=estimate(mdl,y);
res=infer(estmdl,y);
figure(6),
subplot(2,2,1),plot(res./sqrt(estmdl.Variance));
subplot(2,2,2),qqplot(res);
subplot(2,2,3),autocorr(res);
subplot(2,2,4),parcorr(res);
[h3, p3] = lbqtest(res);

10.infer函数:求解时间序列的残差
estmdl——表示所求时间序列的模型
y——表示时间序列数据
res./sqrt(estmdl.Variance)——表示将方差标准化
11.qqplot函数:画出qq图
若点都集中在直线上,则表示残差符合白噪声。
12.lbqtest函数:利用L-BQ准则判断残差是否是白噪声
h=0表示接受假设,即是白噪声。
h=1表示不接受假设,即不是白噪声。

[yF,yMSE]=forecast(estmdl,20,'y0',y);
ub=yF+1.96*sqrt(yMSE);
lb=yF-1.96*sqrt(yMSE);
figure(7),
plot(y,'Color',[.75,.75,.75]),hold on;
plot(78:97,yF,'r');
plot(78:97,ub,'k--', 78:97,lb,'k--');
legend('CPI','预测值','95%置信区间');
title('CPI预测值');

13.forecast函数:表示对时间序列进行预测
yF——预测后得到的点估计值
yMSE——点估计值的方差
estmdl——时间序列估计的模型
20——预测的数量
y——表示预测的原数据
‘y0’——y0与y要成对出现,意思是指定原基础上继续预测,没有实际意义。注:这是固定语句,不可更改。
注意:1.96是正态分布中置信区间为95%时的值为1.96倍的标准差
2.‘Color’,[.75,.75,.75]中.75表示0.75,是RGB中各个颜色的系数

plot(y,'linewidth',3);

‘linewidth’——是设置画线的粗细

heatmap(AICSet/1000);
xlabel(‘MA Lags’);
ylabel(‘AR Lags’);

14.heatmap函数:画出热度图,更方便得出最大最小值。
注:热点图和AICSet矩阵的坐标原点不同,要转换一下。


版权声明:本文为qq_44446612原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。