时间序列:将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。
时间序列模型也成为回归模型,一方面承认事物发展的延续性,运用过去时间序列的数据进行统计就可以推测事物的发展趋势;另一方面,充分考虑到偶然因素影响的随机性,使用历史数据,进行统计分析对数据进行适当处理来消除随机波动的影响。简单易行,便于掌握并充分运用时间序列的各项数据,计算速度较快,能够比较精确的确定模型的动态参数;但是不能够反映事物的内在联系,结合因素的相互联系,只适用于短期预测。
时间序列预测技术是通过对预测目标自身时间序列的处理,来研究其变化趋势,一个时间序列的格式往往是由以下几种变化形式的叠加或耦合:
其中,
表示观测目标的观测记录,均值
方差
。
若在预测时间范围之内,无变动且随便变动方差
较小,则可以使用一些方法来检验过去和现在的演变趋势。
假设观测序列为
,取移动平均的项数
。一次移动的平均值计算公式为
则二次移动平均值计算公式为:
若预测目标的趋势实在某一水平上下波动时,可以使用一次移动平均方法建立预测模型,即
其预测标准误差为
最近N期序列值的平均值作为未来各期的预测结果。N的取值随着历史序列的基本趋势变动而变动。在有确定的机械变动周期的资料中,移动平均的项数应该取周期长度,选择最佳N值的方法:比较若干模型的预测误差,预测标准误差最小者为好。
当预测目标的基本趋势与某一线性模型相吻合时,常使用二次移动平均法,但是序列同时存在线性趋势与周期波动时,可以使用趋势移动平均法建立预测模型:
其中,
;
。
一次移动平均实际上认为最近N期数据对未来值影响相同,都加权1/N而N期以前的数据对未来值没有影响,加权为0。二次及更高次移动平均的加权却不是1/N,次数越高,全书的结构就越复杂,但是永远保持对称的权数,即两端项权数小,中间项权数大,将不符合系统的动态性。历史数据对未来值的影响都是随着时间间隔的增长而递减,素以更切合实际的方法应是对各期观测值依时间顺序进行加权平均作为预测值。指数平滑法可以满足这一要求,但是需要具有简单的递推形式。
指数平滑法根据次数的不同展示为以下形式。
假设时间序列为
,
为加权系数,
一次指数平滑公式为一次移动的平均值计算公式为
式是根据移动平均公式改进而来,则移动平均数的递推公式为
以
作为
最佳估计,则有
使
,以
代替
可得式,即
展开式,则有
式表明
是全部历史数据的加权平均,加权系数分别是
、
、
、
、则
因为加权系数符合指数规律且具有平滑数据的功能,所以称之为指数光滑。
以这种平滑值进行预测,就是一次指数光滑法,预测模型为
即
式表示以第t期指数平滑值作为t+1期预测值。
加权系数
越大,则新数据所占的比重就越来越大,原预测值所占的比重就越小,反之亦然。新预测值是根据预测误差对原预测值进行修正而得到的。加权系数
体现了修正的幅度,加权系数越大,修正幅度就越大;加权系数越小,修正幅度就越小。
加权系数
应该根据时间序列的具体性质进行选择,具体选择可以根据以下原则:一、若时间序列波动不大,则应当取小一点,以减小修正幅度,使得预测模型能够包含较长时间序列的信息;二、若时间序列波动具有迅速且明显的变动倾向,则应该取大一点,使得预测模型灵敏度更高,以迅速跟上数据的变化。
初始值是由预测者估计或者指定的,使用一次指数平滑法进行预测,除了选择合适的加权系数
外,还需要确定初始值
当时间序列的数据较多,比如数量在50个以上,初始值对以后的影响很小,就可以选择第一期数据作为初始值,若初始值数量在5个以下,初始值对以后的预测值影响很大,就必须研究如何正确确定初始值。一般来说是选取最初几期实际值的平均值作为初始值。
当使用一次指数平滑法进行预测时,若时间序列的变动出现直线趋势时,就会存在明显的滞后偏差,所以必须加以修正。再次做出二次指数平滑,利用之后偏差的规律建立直线趋势模型,这就是而辞职书平滑法。计算公式为
其中,
表示一次指数的平滑值;
表示二次指数的平滑值。
当时间序列
从某时期开始具有直线趋势时,可以使用直线趋势模型
进行预测。
当时间序列的变动表现为二次曲线趋势时,则需要使用三次指数平滑法,三次指数平滑是在二次指数平滑法的基础上,在进行一次平滑,期计算公式为
其中,
表示三次指数的平滑值。
三次指数平滑法的预测模型为:
其中,
若时间序列的变动具有直线趋势,使用一次指数光滑法会出现滞后偏差,原因在于数据不能够满足模型要求,那么可以从数据变换的角度来考虑改进措施,即在运用指数平滑法对先前的技术做出一些处理,使其能够适合于一次指数平化模型,接着在对处理完的结果作技术上的返回处理,使之恢复为原变量的形态。差分方法是改变数据变动趋势的简易方法。以下是使用差分方法改进指数平滑法的步骤。
当时间序列呈直线增加时,运用一阶差分指数模型进行预测。模型为
其中,
为差分记号。
式表现对呈现直线增加的序列作一阶差分,构建成一个平稳的序列;式表示把经过一阶差分后的新序列的指数平滑预测值与变量的实际值叠加,作为变量下一期的预测值,公式为
指数平滑值指的是一种加权平均数,把序列中逐期增加的加权平均数加上当前值得实际数进行预测,比一次指数平滑法只用变量以往取值的加权平均数作为下一期的预测更加合理,从而使得预测值始终围绕实际值上下波动,从根本上解决了在有直线增长趋势的情况下,用一次指数平滑法所得出的结果始终落后于是机制的问题。
差分方法和指数平滑法的联合运用可以克服一次指数平滑法的滞后偏差以及改进初始值的问题。在经过数据的差分处理之后,对于所产生的新序列基本上是平稳的。基于这种情况,首先,初始值取新序列的第一期数据对于未来预测值不会产生多大的影响;其次,它拓展了指数平滑发的适用范围。但是,对于指数平滑法的加权系数的选择、只能够逐期预测问题,差分指数预测模型未能将其进行改进。
标题中国提到的季节不仅指的是自然季节,还可能指的是商品销售的机械。在现实经济活动中,对于季节性时间序列的预测,需要从数学上完全拟合其变化曲线非常困难,但是从拟合曲线目的出发,预测能够找到时间序列的变化趋势,尽可能精确,可以使用季节系数法。
步骤如下:
其中,
表示第
年的年合计数;
表示第
年的权数。
再计算预测年份的季度平均值
。最后,预测年份第
季度的预测值为
。
在应用时间序列解决实际问题时,不难发现时间序列往往有三个特征:趋势性、季节性、非平稳性。
差分运算可以使一类非平稳序列平文化,若一阶差分不能够使时间序列平文化,则进行二阶差分、三阶差分,直至第
阶差分。最后平稳序列。
一阶差分:
二阶差分:
一般来说,
阶差分为
其中,
成为
阶差分算子,则
假设
是非平稳序列,若存在正整数d使得
而
是ARMA
序列,则称
是ARMA
序列。则
满足
若
为平稳序列,但是均值
,则
为平稳零均值序列,满足
那么称
是ARMA
序列,若
未知,则用
的平均值
进行估计。
若初值
已知,则
就可以复原
。
以下简单介绍ARIMA序列的预报
假设
是ARMA
序列,则基于
的情况,
则
所以
复原
,可得
在一些实际问题中,时间序列有很明显的周期规律性,如气温、用电量等。由季节性因素或者其他因素引起的周期性变化的时间序列,称为季节性时间序列,行营的模型为季节性模型。
一般地,对周期
的序列,可先进行差分运算,即
然后再进行ARIMA建模。
我国1974年——1981年布的产量如表1.1所示。
表1.1 我国1974年——1981年布的产量
年份 |
1974 |
1975 |
1976 |
1977 |
1978 |
1979 |
1980 |
1981 |
产量 |
80.8 |
94 |
88.4 |
101.5 |
110.3 |
121.5 |
134.7 |
142.7 |
预测的标准误差为
其中,
表示一次指数的平滑值;
表示二次指数的平滑值
当时间序列
从某时期开始具有直线趋势时,可以使用直线趋势模型
进行预测。
若
则预测的标准误差为
若
则预测的标准误差为
yt=[80.8 94.0 88.4 101.5 110.3 121.5 134.7 142.7];
m=length(yt);
n=3;
for i=n+1:m+1
ytt(i)=sum(yt(i-n:i-1))/n;
end
ytt
for i=m+1:m+3
yt(i)=ytt(i);
ytt(i+1)=sum(yt(i-n+1:i))/n;
end
yhat=ytt(end-3:end)
s1=sqrt(mean((yt(n+1:m)-ytt(n+1:m)).^2))
ytt =
0 0 0 87.7333 94.6333 100.0667 111.1000 122.1667 132.9667
yhat =
132.9667 136.7889 137.4852 135.7469
function xiti81
[sigma1,yhat21]=yuce(0.3)
[sigma2,yhat22]=yuce(0.6)
function [sigma,yhat2]=yuce(alpha);
yt=[80.8 94.0 88.4 101.5 110.3 121.5 134.7 142.7];
n=length(yt);st1(1)=mean(yt(1:3));st2(1)=st1(1);
for i=2:n
st1(i)=alpha*yt(i)+(1-alpha)*st1(i-1);
st2(i)=alpha*st1(i)+(1-alpha)*st2(i-1);
end
at=2*st1-st2;
bt=alpha/(1-alpha)*(st1-st2);
yhat=at+bt;
sigma=sqrt(mean((yt(2:end)-yhat(1:end-1)).^2));
m=1:4;
yhat2=at(end)+bt(end)*m;
sigma1 =
11.7966
yhat21 =
143.6959 150.0191 156.3423 162.6655
sigma2 =
7.0136
yhat22 =
152.9452 162.9176 172.8900 182.8625
本题第一问建立出布的年产量预测模型为。本体第二问建立布的直线指数预测模型为。本题第三问从标准差的角度考虑,选择
的二次指数平滑模型。本题第四问选用
的二次指数平滑模型作为最优化的模型得到1982年和1985年的产量预测值为152.9452亿米和182.825亿米
1960年—1985年全国社会商品零售额如图1.2所示。
表1.2 全国社会商品零售额数据
年份 |
1960 |
1961 |
1962 |
1963 |
1964 |
1965 |
1966 |
1967 |
零售总额 |
696.6 |
607.7 |
604 |
604.5 |
638.2 |
670.3 |
732.8 |
770.5 |
年份 |
1968 |
1969 |
1970 |
1971 |
1972 |
1973 |
1974 |
1975 |
零售总额 |
737.3 |
801.5 |
858 |
929.2 |
10233 |
1106.7 |
1163.6 |
12711 |
年份 |
1976 |
1977 |
1978 |
1979 |
1980 |
1981 |
1982 |
|
零售总额 |
1339.4 |
1432.8 |
1558.6 |
1800 |
2140 |
2350 |
2570 |
|
试用三次指数平滑法预测1983年和1958年全国社会商品零售额。
令加权系数
,则计算公式为
其中,
表示一次指数的平滑值;
表示二次指数的平滑值;
表示三次指数的平滑值。
初始值为
三次指数平滑法的预测模型为:
其中,
根据式可知,当
时,存在
则预测模型为
最后求得1983,1985年销售额的预测值分别是240.5806亿元,3431.1106亿元。
使用MATLAB软件进行编程,将表1.2中的数据保存到纯文本文件data02.txt中。代码为
clc,clear
dd=textread('data02.txt');
yt=dd([2:2:end],:);yt=yt';yt=nonzeros(yt);
n=length(yt);alpha=0.4;st0=mean(yt(1:3))
st1(1)=alpha*yt(1)+(1-alpha)*st0;
st2(1)=alpha*st1(1)+(1-alpha)*st0;
st3(1)=alpha*st2(1)+(1-alpha)*st0;
for i=2:n
st1(i)=alpha*yt(i)+(1-alpha)*st1(i-1);
st2(i)=alpha*st1(i)+(1-alpha)*st2(i-1);
st3(i)=alpha*st2(i)+(1-alpha)*st3(i-1);
end
xlswrite('lingshou.xls',[st1',st2',st3'])
at=3*st1-3*st2+st3;
bt=0.5*alpha/(1-alpha)^2*((6-5*alpha)*st1-2*(5-4*alpha)*st2+(4-3*alpha)*st3);
ct=0.5*alpha^2/(1-alpha)^2*(st1-2*st2+st3);
yhat=at+bt+ct;
xlswrite('lingshou.xls',yhat','sheet1','D2')
plot(1:n,yt,'D',2:n,yhat(1:end-1),'*')
legend('实际值','预测值',2)
xishu=[ct(end),bt(end),at(end)];
yuce=polyval(xishu,[1:3])
上述代码运算出结果为:
st0 =
636.1000
yuce =
1.0e+03 *
2.7251 3.0329 3.4101
即1983,1985年销售额的预测值分别是240.5806亿元,3431.1106亿元。
图1.1 拟合图像
1946—1970年美国各系耐用品支出资料如表1.3所示。
表1.3 1946—1970年美国各系耐用品支出资料
年度 |
一季 |
二季 |
三季 |
四季 |
年度 |
一季 |
二季 |
三季 |
四季 |
1946 |
7.5 |
8.9 |
11.1 |
13.4 |
1959 |
27 |
28.7 |
29.1 |
29 |
1947 |
15.5 |
15.7 |
15.6 |
16.7 |
1960 |
29.6 |
31.2 |
30.6 |
29.8 |
1948 |
18 |
174 |
17.9 |
18.8 |
1961 |
27.6 |
27.7 |
29 |
30.3 |
1949 |
17.6 |
17 |
16.1 |
15.7 |
1962 |
31 |
32.1 |
33.5 |
33.2 |
1950 |
159 |
17.9 |
20.3 |
20.4 |
1963 |
33.2 |
33.8 |
35.5 |
36.8 |
1951 |
20.2 |
20.5 |
20.9 |
20.9 |
1964 |
37.9 |
39 |
40 |
416 |
1952 |
21.1 |
21.4 |
18.2 |
20.1 |
1965 |
43.7 |
44.4 |
46.6 |
48.3 |
1953 |
21.4 |
21.3 |
21.9 |
21.3 |
1966 |
50.2 |
52.1 |
54 |
56 |
1954 |
20.4 |
20.4 |
20.7 |
20.7 |
1967 |
53.9 |
55.6 |
55.4 |
56.2 |
1955 |
20.9 |
23 |
24.9 |
26.5 |
1968 |
57.9 |
57.3 |
58.8 |
60.4 |
1956 |
25.6 |
26.1 |
27 |
27.2 |
1969 |
63.1 |
83.5 |
64.8 |
65.7 |
1957 |
28.1 |
28 |
29.1 |
28.3 |
1970 |
64.8 |
65.6 |
67.2 |
62.1 |
1958 |
25.7 |
24.5 |
24.4 |
25.5 |
则参数估计为
图1.2 剩余序列的相关函数图
图1.3 残差方差图
图1.4拟合整体模型后的残差自相关图
使用所给的模型从1970年第4季度开始预测,结果如下表1.4所示。
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
||
62.1 |
65.8298 |
668384 |
68.562 |
70.0083 |
71.4879 |
72.9238 |
74.3507 |
75.768 |
使用MATLAB软件进行编程,编写代码如下所示:
clc,clear
a=load('data03 .txt');
a=a';a=a(:);
n=length(a);
t0=[46:1/4:71-1/4]';
t=[1:100]';
xishu=[ones(n,1),t];
cs=xishu\log(a);
cs(1)=exp(cs(1))
ahat=cs(1)*exp(cs(2)*t);
cha=a-ahat;
res=sum(cha.^2)
subplot(121),plot(t0,a,'*-')
subplot(122),plot(t0,cha,'.-')
figure,subplot(121),autocorr(cha)
subplot(122),parcorr(cha)
figure,subplot(121),autocorr(cha)
subplot(121),parcorr(cha)
for i=1:10
cs2{i}=ar(cha,i);%拟合模型
cha2=resid(cs2{i},cha)
myvar(i) = sum(cha2.^2)/(100 - i);%计算残差方差
end
fugure,plot(myvar,’* -’)
clc,clear
xt=@(cs,x) cs(1)*(exp(cs(2)*x(:,3))-cs(3)*exp(cs(2)*(x(:,3)-1))-...
cs(4)*exp(cs(2)*(x(:,3)-2))+)+cs(3)*x(:,1)+cs(4)*x(:,2)
cs0=[12.6385,0.0162,0.5451,0.2478]';
a=load('data03.txt');
a=a',a=a(:);
x=[a(2:end-1),a(1:end-2),[3:100]'];
cs=lsqcurefit(xt,cs0,x,a(3;end))
res=a(3:end)-xt(cs,x);
Q=sum(res.^2)
autocorr(res)
xhat=a;
for j=101:108
xhat(j)=cs(1)*(exp(cs(2)*j)-cs(3)*exp(cs(2)*(j-1))-...
cs(4)*exp(cs(2)*(j-2)))+cs(3)*xhat(j-1)+cs(4)*xhat(j-2);
end
xhat101_108=xhat(101:108)
表1.4 预测出之后八个季度的结果
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
||
62.1 |
65.8298 |
668384 |
68.562 |
70.0083 |
71.4879 |
72.9238 |
74.3507 |
75.768 |
1952年—1997年我国人均国内生产总值(单位:元)数据如下所示。
表1.5 1952年—1997年我国人均国内生产总值
年代 |
人均生产 总值 |
年代 |
人均生产 总值 |
年代 |
人均生产 总值 |
1952 |
119 |
1968 |
222 |
1984 |
682 |
1953 |
142 |
1969 |
243 |
1985 |
853 |
1954 |
144 |
1970 |
275 |
1986 |
956 |
1955 |
150 |
1971 |
288 |
1987 |
1104 |
1956 |
165 |
1972 |
292 |
1988 |
1355 |
1957 |
168 |
1973 |
309 |
1989 |
1512 |
1958 |
200 |
1974 |
310 |
1990 |
1634 |
1959 |
216 |
1975 |
327 |
1991 |
1879 |
1960 |
218 |
1976 |
316 |
1992 |
2287 |
1961 |
185 |
1977 |
339 |
1993 |
2939 |
1962 |
173 |
1978 |
379 |
1994 |
3923 |
1963 |
181 |
1979 |
417 |
1995 |
4854 |
1964 |
208 |
1980 |
460 |
1996 |
5576 |
1965 |
240 |
1981 |
489 |
1997 |
6079 |
1966 |
254 |
1982 |
525 |
||
1967 |
235 |
1983 |
580 |
经过MATLAB软件处理数据,可得
未来十年的预测值分别为6419.4474,6668.7704,6861.1915,7014.4250,7198.6091,7240.2050,7323.7357,7392.7357,7449.4293,7496.3755。
通过MATLAB 编写的代码如下所示:
将表格中的数据保存到纯文本文件中data6.txt中。
clc,clear
a=textread('data6.txt');
xt=a(:,[2:2:end]);xt=nonzeros(xt);
yt=diff(xt);
m = armax(yt,[2,1])
yd = yt;
for i=1:10
tt1=predict(m,[.;0]);
tt2=tt1{:}(end);
ythat(i)=tt2;
yd=[yd;tt2];
end
ythat
xthat=xt(end)+cumsum(ythat)
经过MATLAB软件处理数据,可得
未来十年的预测值分别为6419.4474,6668.7704,6861.1915,7014.4250,7198.6091,7240.2050,7323.7357,7392.7357,7449.4293,7496.3755。
某地区山猫的数量在前连续114年的统计数据如表1.6所示。分析该数据,得出山猫的生长规律,并预测出以后两个年度山猫的数量。
表1.6 山猫数据
269 |
321 |
585 |
871 |
1475 |
2821 |
3928 |
5943 |
4950 |
2577 |
523 |
98 |
184 |
279 |
409 |
2285 |
2685 |
3409 |
1824 |
409 |
151 |
45 |
68 |
213 |
546 |
1033 |
2129 |
2536 |
957 |
361 |
377 |
225 |
360 |
731 |
1638 |
2725 |
2871 |
2119 |
684 |
299 |
236 |
245 |
552 |
1623 |
3311 |
6721 |
4254 |
687 |
255 |
473 |
358 |
784 |
1594 |
1676 |
2251 |
1426 |
756 |
299 |
201 |
229 |
469 |
736 |
2042 |
2811 |
4431 |
2511 |
389 |
73 |
39 |
49 |
59 |
188 |
377 |
1292 |
4031 |
3495 |
537 |
105 |
153 |
387 |
758 |
1307 |
3465 |
6991 |
6313 |
3794 |
1836 |
345 |
382 |
808 |
1388 |
2713 |
3800 |
309 |
2985 |
3790 |
674 |
71 |
80 |
108 |
229 |
399 |
1132 |
2432 |
3575 |
2935 |
1537 |
529 |
485 |
662 |
1000 |
1520 |
2657 |
3396 |
记原始序列为
,时序图表示该序列大致有12个周期变化,周期的长度大致为9年或者10年,那么该问题以周期
年来进行计算。
对原序列作10步差分,消除季节趋势,得到序列
,其中
即可得到时序图。
根据差分后的序列的自相关和偏自相关的性质,使用ARMA模型进行拟合,拟合的ARMA(1,10)模型较为理想,且通过白噪声检验,则该模型不适合拟合这个序列。计量经济学
编写代码如下所示:
clc,clear
a=textread('data4.txt');
a=a';c=a(:);
c=nonzeros(c);n=length(c);
plot(c,'.-')
title('山猫数量原始数据时序图')
xlabel('年份')
ylabel('山猫的数量')
for i=11:n
b(i-10)=c(i)-c(i-10);
end
b=b';
figure,plot(b,'.-')
title('消除季节趋势后的数据的时序图')
xlabel('年份')
figure,subplot(1,2,1),autocorr(b)
xlabel(‘自相关函数图’)
subplot(122),parcorr(b)
xlabel('非自相关函数图')
cs=armax(b,[1,10])
figure,myres=resid(cs,b);
[h1,p1,st1]=lbqtest(myres,'lags',6)
[h2,p2,st2]=lbqtest(myres,'lags',12)
[h2,p2,st2]=lbqtest(myres,'lags',18)
bhat1=predict(cs,[b;0]);
bhat(1)=bhat1(end);
bhat2=predict(cs,[b;bhat(1);0]);
bhat(2)=bhat2(end);
ahat(1)=a(end-9)+bhat(1);
ahat(2)=a(end-8)+bhat(2)
图1.5 消除季节趋势后数据的时序图
图1.6 自相关函数图和偏自相关函数图
经过MATLAB软件编写程序算的结果为两个年度的预测值为4296和3656。
本次章节主要介绍时间序列模型及其相关问题的解决,时间序列模型也是一种回归模型,一方面承认事物发展的延续性,运用过去时间序列的数据进行统计分析来推测事物的发展趋势;另一方面充分考虑到偶然因素而统计分析,进行趋势预测,将该模型应用到日用品消耗、流浪猫数量、国民生产总值等方面,找到其连续几年的合理性数据(基于完全统计),运用该对应的时间序列模型进行预测,以达到预测信息的目的,有效的解决问题。