|
时间序列数据灰色模型的拟合与预测预报中的应用 1. 灰色模型简介 一般的数学模型是对原始数列建模,且要求有足够的样本量和特定的分布。(grey model)不受这些条件的约束,适用性较强。灰色模型的建模过程是将无规律的原始数列,经过累加及求均值等生成过程,使其成为较有规律的生成数列后再建模。本节介绍的灰色模型是为1个变量的1个阶微分方程GM(1,1)。以灰色模型拟合进行预测预报,由于简便易行,在管理工作中有很广泛的应用。 灰色模型的一阶线性微分方程为: dx(t) ─── + ax (t) = u dt 其中a 和 u 为灰色模型的待定参数。 程序中以下列一个语句计算预测值(ext): COMPUTE ext=((x1-u/a)*EXP(0-(a*t))+u/a) -((x1-u/a) * EXP(0-(a*(t-1)))+u/a). 2. 灰色模型 GM(1,1) 预测实例 以下是某单位“保健开支”占事业经费的比重(xt, %)增长情况的数据(刘作浚:中国卫生统计,8 (2):25, 1991),请预测该数列往前预测一年(1989 年)的比重(ext)。 所用的程序文件名为 GM11-Model.sps。 在程序文件的 BEGIN DATA 与 END DATA 间,录入表中第 (2) 列、第 (3) 列的数据。 表 7-2 某单位“保健开支”占事业经费的比重的增长情况 ------------------------------------------------------------------------------ 年份 过几年(t) 比重(xt) 预测值(ext) 误差(d) (1) (2) (3) (4) (5) ------------------------------------------------------------------------------ 1979 0 19.36 19.36 .00 1980 1 22.77 26.23 -3.46 1981 2 33.51 29.19 4.32 1982 3 37.96 32.49 5.47 1983 4 38.16 36.16 2.00 1984 5 38.33 40.24 -1.91 1985 6 38.09 44.79 -6.70 1986 7 45.45 49.85 -4.40 1987 8 58.64 55.48 3.16 1988 9 64.99 61.74 3.25 ------------------------------------------------------------------------------ 1989 10 68.72 ------------------------------------------------------------------------------ 3.灰色模型预测程序文件的使用方法 打开程序文件后,请注意按如下计算步骤: ① “第一个年份”意为“当年”即“t”为“0”年;“第二个年份”意为“过1年”即“t”为“1”年,余类推。程序文件中有“Note”一句予以说明。 ② 利用此程序文件拟合新的时间序列数据时,“COMPUTE First”一句要录入用户时间序列的第一年的年份值(本例为 1979 年)。 ③ 先从头运行至 “LIST VARIABLES=D a u” 一句为止, 得到拟合灰色模型所需参数 D、 a、 和 u 值(实际上仅“a”值与“u”值为灰色模型公式所需的参数)。可见 D = 915175.92875, a = -.10702, u = 22.77710。 ④ 将所得的 D值、 a值、 和u 值对其下的三句赋值(“COMPUTE D”、“COMPUTE a”和“COMPUTE u”),用于灰色模型预测公式的计算。 x(t)的估计值 ext 算式是: ext=((x1-u/a)*EXP(0-(a*t))+u/a)-((x1-u/a) * EXP(0-(a*(t-1)))+u/a) 要预测该数列往前一年(1989 年)的比重(ext),只要代入 x1 = 19.36 (数列的第一个数值),u = 22.77710, a = -.10702,t = 10(即 1989 年),即可算得 ext = 68.72 %。 ⑤ 由此再往下计算到最后一句,即可得到表中第 (4) 列的预测值(ext)与第 (5) 列的误差值(d),可见误差合计仅 1.75 %。随后还可得到“向前一步”(one step ahead)的预测值,即 “1989” 年的预测值(68.72%)的输出结果。 TITLE 'A example of GM(1,1) Model; Filename: GM11-Model.sps'. *----------------------------------------------------------------------. *1. From CHN J. of Health Statistics. 1991; 8(2):25. *Note: The following value t begins at 0, please!. DATA LIST FREE /t xt. BEGIN DATA. 0 19.36 1 22.77 2 33.51 3 37.96 4 38.16 5 38.33 6 38.09 7 45.45 8 58.64 9 64.99 END DATA. COMPUTE First=1979. COMPUTE x1=19.36. COMPUTE n=10. CREATE yk=CSUM(xt). CREATE yk1=LAG(yk,1). COMPUTE Year=t+First. COMPUTE zt=(yk+yk1)/2. COMPUTE z2t=zt**2. COMPUTE xtzt=xt*zt. VARIABLE LABELS xt 'value, %' /yk1 'lag value of yk' /zt 'zt' /z2t 'z2t' /xtzt 'xt*zt'. FORMATS t(F3.0) Year(F5.0) xt yk yk1 zt z2t xtzt(F8.3). LIST VARIABLES=t Year xt yk yk1 zt z2t xtzt /CASES=FROM 1 TO 10. CREATE sxt=CSUM(xt). CREATE szt=CSUM(zt). CREATE sz2t=CSUM(z2t). CREATE sxtzt=CSUM(xtzt). COMPUTE sxt=sxt-x1. COMPUTE szt2=(szt)**2. VARIABLE LABELS sxt 'sum of x(t)' /szt 'sum of z(t)' /sz2t 'sum of sz(t)**2' /sxtzt 'sum of x(t)*z(t)'. COMPUTE D=((n-1)*(sz2t)-(szt2)). COMPUTE a=((n-1)*(0-(sxtzt))+(szt)*(sxt))/D. COMPUTE u=((szt)*(0-(sxtzt))+(sxt)*(sz2t))/D. VARIABLE LABELS D 'value D' /a 'value a in th model' /u 'value u in the model'. FORMATS D a u(F12.5). LIST VARIABLES=D a u /FORMAT=NUMBERED /CASES=FROM 10 TO 10. COMPUTE D = 915175.92875. COMPUTE a = -.10702. COMPUTE u = 22.77710. COMPUTE ceyt=(x1-u/a)*EXP(0-(a*t))+u/a. VARIABLE LABELS ceyt 'cumulated value of y(t)'. FORMATS xt yk zt ceyt(F9.3). LIST VARIABLES=t Year xt yk zt ceyt /CASES=FROM 1 TO 10. COMPUTE ext=((x1-u/a)*EXP(0-(a*t))+u/a) -((x1-u/a)*EXP(0-(a*(t-1)))+u/a). IF (t=0) ext=x1. COMPUTE d=xt-ext. VARIABLE LABELS ext 'estim. value' /d 'x(t)-ex(t)'. DESCRIPTIVES VARIABLES=d /STATISTICS=SUM. FORMATS xt yk zt ceyt ext d(F8.2). LIST VARIABLES=t Year xt ext d /CASES=FROM 1 TO 10. TSPLOT /VARIABLES=xt ext. GRAPH /LINE(MULTIPLE)=VALUE(xt) VALUE(ext) BY Year. COMPUTE t=n-1. COMPUTE Year=Year+n-1. *For getting the forecasting values of forward s-steps, You must run the following 5 commands s times repeatedly:. COMPUTE t=t+1. COMPUTE ceyt=(x1-u/a)*EXP(0-(a*t))+u/a. COMPUTE ext=((x1-u/a)*EXP(0-(a*t))+u/a) -((x1-u/a)*EXP(0-(a*(t-1)))+u/a). COMPUTE Year=Year+1. LIST VARIABLES=t Year ext /FORMAT=NUMBERED /CASES=FROM 1 TO 1. |
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-6-16 21:53
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社