根据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矩阵的坐标原点不同,要转换一下。