对1950-2009年的社会消费品零售总额的时间序列分析与预测 利用1950-2009年的社会消费品零售总额(记为:save,单位:万元)的时间序列数据进行分析,建立时间序列ARIMA模型,并预测未来10年的社会消费品零售总额。
表1 1950-2009年的社会消费品零售总额
年份 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 19 社会消费品零售总额 21920 29023 366 43198 52216 61379 714 85578 92490 110526 119059 106780 105454 100837 105406 年份 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 社会消费品零售总额 112970 121349 129530 122971 131318 132306 137958 143416 154676 158035 168486 181377 193457 218865 247796 年份 1980 1981 1982 1983 1984 1985 1986 1987 1988 19 1990 1991 1992 1993 1994 社会消费品零售总额 293590 340739 3133 413324 461439 573842 6381 723913 886986 981497 1043041 1215180 1382452 1683737 1971086 年份 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 社会消费品零售总额 25375 2953597 3104197 3275210 3473958 3744999 4063487 4428871 4211680 5636520 02000 7332000 8575000 10415000 11775300 数据来源:《统计年鉴2010》,《五十年》
模型应用
data a;
input date cost; 1950 21920 1951 29023 1952 366 1953 43198 1954 52216 1955 61379 1956 714
cards;
1957 85578 1958 92490 1959 110526 1960 119059 1961 106780 1962 105454 1963 100837 19 105406 1965 112970 1966 121349 1967 129530 1968 122971 1969 131318 1970 132306 1971 137958 1972 143416 1973 154676 1974 158035 1975 168486 1976 181377 1977 193457 1978 218865 1979 247796 1980 293590 1981 340739 1982 3133 1983 413324 1984 461439 1985 573842 1986 6381 1987 723913 1988 886986 19 981497 199****3041199****5180199****2452199****3737199****1086199****75199****3597199****4197199****5210199****39582000 3744999
2001 4063487 2002 4428871 2003 4211680 2004 5636520 2005 02000 2006 7332000 2007 8575000 2008 10415000 2009 11775300 ;
proc print data=a; Run;
程序说明:这段程序是录入1950年到2009年的社会消费品零售总额的数据。
data a; set work.a;
proc gplot data=a; plot cost*date;
symbol v=dot i=join c=black l=1 w=2; run;
程序说明:这段程序首先建立数据集a,然后调用gplot过程作图来显示社会消费品零售总额趋势图,结果如下图。
cost12000000110000001000000090000008000000700000060000005000000400000030000002000000100000001950196019701980date199020002010 社会消费品零售总额的时序图
从图中发现,随着时间的增加波动越来越大,因而此序列是非平稳的,从而有必要对原数据进行函数变换,我们这里对原数据取对数,程序如下:
data a; set work.a; lc=log(cost); proc gplot data=a; plot lc*date;
symbol v=dot i=join c=black l=1 w=2; run;
lc171615141312111091950196019701980date199020002010 社会消费品零售总额取对数后的时序图
上图取对数后的序列还是不平稳,但序列的原始数据趋势图只能大概的看出此序列的平稳性,为了进一步了解社会消费品零售总额取对数后序列(lnin)的性质,下面给出lc序列的ACF,程序如下:
proc arima data=a;
identify var=lc nlag=30 esacf p=(0:6) q=(0:6) minic p=(0:6) q=(0:6); run;
社会消费品零售总额取对数后的ACF
从这个图上可以看出,自相关函数缓慢衰减,从而表明序列lc是非平稳的,这和我们从lc的序列图上观察的结果是相同的。因此需要对变量lnin进行一阶差分操作并对差分后的序列进行平稳性识别,程序如下:
identify var=lc(1) nlag=30 esacf p=(0:8) q=(0:8) minic p=(0:6) q=(0:6); run;
识别过程结果会给出三个可能不同的模型,分别对这三个模型进行估计,已得到拟合最好模型。 模型一
差分后的对数序列的自相关函数图
差分后的对数序列的偏自相关函数图
由图可知,建议对一阶差分后的lc序列拟合ARMA(2,2)过程,接着进行模型的估计检验过程,程序如下:
estimate p=2 q=2 method=ml; run;
极大似然估计结果(显著性检验)
结果发现,系数除了常数项外其他都显著为0,此模型拟合效果差,排除这种模型的可能。 模型二
ESACF的建议模型
通过ESACF,建议对一阶差分后的lc序列拟合ARMA(5,1)过程,接着进行模型的估计检验过程,程序如下:
estimate p=5 q=1 method=ml; run;
lc序列估计模型arima(1,1,1)结果
此模型拟合效果挺好,可以考虑选择这个模型。 模型三
最小信息准则建议模型
由最小信息准则,拟合模型ARMA(2,0),程序如下:
estimate p=2 method=ml; run;
lc序列估计模型arima(2,1,0)结果
结果不仅各系数显著不为0,而且残差序列经验证也是白噪声序列,符合要求。
AIC与SBC所计算出来的值越小,则代表模型的配适度越佳,故两个模型比较,选择ARIMA(2,1,0)模型。
所以最终估计结果对应的模型为:
(10.3333B0.287B2)(1B)Lc0.114.3at
下面利用我们拟合的模型进行预测,我们预测未来10年的社会消费品零售总额,预测程序如下:
forecast lead=10 id=date out=pred1; run;
程序说明:调用arima过程中的forecast语句来进行预测,lead是指向后预测
的步数,id指定变量用来识别观测的周期,interval指定观测间隔的时间,不写明的时候默认值为1,id和interval一般一起使用,将预测结果输出到数据集pred1中,预测结果如下:
对lc未来五年的预测结果
变换预测值,以获取原度量下的预测值,程序如下:
data w; set pred1; y=exp(lc);
forecast1=exp(forecast); run;
proc print data=w; run;
程序说明:对取对数后的序列lnin再进行exp函数变换,以得到原序列,同时预测十年的值。
61 62 63 65 66 67 68 69 70 Year 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 Cost 13547018.54 15354804.13 17404932.11 194435.74 22140861.45 24911947.08 28002490.62 31450670.83 35303846.47 39612382.92 对原始序列的未来十年预测结果