数学建模社区-数学中国

标题: 时间序列模型 (二):移动平均法 [打印本页]

作者: 浅夏110    时间: 2020-5-30 15:04
标题: 时间序列模型 (二):移动平均法
移动平均法 可以作为一种数据平滑的方式 ,以每天的气温数据为例,今天的天气可能与过去的十天的气温有线性关系;或者有的人对食物有一种节俭的美德,他们做的饭菜能看出有些是上一顿的,当然也有一部分是今天的做的,再假设隔两顿的都被倒掉了,并且每天都是这样的,那么这碗饭菜可能就是一部分上一顿的再加上一部分今天现做的,这就是一个一阶的移动平均。
+ l) G' b2 [& S6 d
) y. a% z- f  k移动平均法4 N( x0 {+ P' G' C
移动平均法是根据时间序列资料逐渐推移,依次计算包含一定项数的时序平均数, 以反映长期趋势的方法。当时间序列的数值由于受周期变动和不规则变动的影响,起伏 较大,不易显示出发展趋势时,可用移动平均法,消除这些因素的影响,分析、预测序列的长期趋势。  移动平均法有简单移动平均法,加权移动平均法,趋势移动平均法等。 - e7 L) o4 H  m, S$ w6 A- D
! O# B( A, o1 u& W: Q/ w
简单移动平均法8 H0 R$ _: M- l0 S, W

4 O$ \8 Y) |. O* Z4 C/ Z: Y% f# P  {8 j% i) b. |

# U, r: p/ d9 X- }3 X近N 期序列值的平均值作为未来各期的预测结果。一般 N 的取值范围: 5≤N≤ 200。当历史序列的基本趋势变化不大且序列中随机变动成分较多时,N 的 取值应较大一些。否则 N 的取值应小一些。在有确定的季节变动周期的资料中,移动平均的项数应取周期长度。选择佳 N 值的一个有效方法是,比较若干模型的预测误 差。预测标准误差小者为好。 * L" U0 ~& y* t5 Q+ S# C
5 I% |0 k# L9 [  R+ X: u
简单移动平均法只适合做近期预测,而且是预测目标的发展趋势变化不大的情况。 如果目标的发展趋势存在其它的变化,采用简单移动平均法就会产生较大的预测偏差和滞后。 ( K8 P; ~8 q- r1 j( T  f

8 v; e0 Z! n8 i! V9 A( L! [例 1  某企业 1 月~11 月份的销售收入时间序列如表 1 示。试用一次简单滑动平 均法预测第 12 月份的销售收入。 % i3 t( w& ~% t9 u
" a- L, T- w( h  Q" @- ]; F
. F7 t: j5 K0 G

- Q1 ?5 @0 p$ M
' A) N+ g6 z) Q$ s* B& J" j% H( G1 P7 k: a
计算的 Matlab 程序如下: " Y2 w- s+ e- T

- x; K: `7 H& I0 S- d$ d5 L# Eclc,clear
8 J7 N. C# ]& G! ~4 h2 J# ay=[533.8  574.6  606.9  649.8   705.1  772.0  816.4  892.7  963.9  1015.1  1102.7]; m=length(y);   " P9 U7 U1 {' F2 h3 ?
n=[4,5];   %n 为移动平均的项数 " q- T8 Z6 q) |; r7 o& J
for i=1:length(n)   
! D# R, h7 n% N! \, p. k %由于 n 的取值不同,yhat 的长度不一致,下面使用了细胞数组   
7 R7 b; N4 J  H  b/ u2 ^+ {( d    for j=1:m-n(i)+1         / J6 I6 J. E2 w9 u0 U, l3 i
        yhat{i}(j)=sum(y(j:j+n(i)-1))/n(i);     3 Y( Z. b# R# ^; W' g6 z
    end   
2 U6 U$ m' m" G2 h" e6 f    y12(i)=yhat{i}(end);     
. H% O/ R1 L: C; t' Y" b8 A- G! S- t    s(i)=sqrt(mean((y(n(i)+1:m)-yhat{i}(1:end-1)).^2));
4 {: N7 C! q! a0 Z1 xend 4 F5 C* O+ w- C2 v" e! l% a* g
y12,s
1 f/ h0 L! ]; e+ s) l9 B+ a% k, B3 L7 e/ b2 G2 I/ c) V
加权移动平均法1 y3 k* w2 r! e5 r
在简单移动平均公式中,每期数据在求平均时的作用是等同的。但是,每期数据所包含的信息量不一样,近期数据包含着更多关于未来情况的信心。因此,把各期数据等同看待是不尽合理的,应考虑各期数据的重要性,对近期数据给予较大的权重,这就 是加权移动平均法的基本思想。 ' d. T5 b* A$ N( H
2 `2 E9 O, l$ z, H9 T$ L
- G8 r/ t1 ~2 H1 F9 m/ ?

4 l6 n* [; `+ P例 2  我国 1979~1988 年原煤产量如表 2 所示,试用加权移动平均法预测 1989 年 的产量
" m# `& K" K. V. x) L) v
( Q9 U& z5 M' c. E$ a0 Y' g, t7 s9 w3 q& t; I" ~6 v% T+ X# Y- x# L. B  i
9 E' H: ~' z( e) c- y& B
* Q9 o1 d* o) J$ ?

  K& J7 `# O! g$ s0 G! t5 A/ Y; [' @
, I: S7 k" Y& W# [! A7 C2 U) k: w8 h% ~* ^5 a

3 J  X8 M  Z3 D3 I计算的 MATLAB 程序如下:
2 x% f9 D2 F. a3 I* Y2 k
4 R+ K6 |: h# v; N5 k3 V% D  wy=[6.35 6.20    6.22    6.66    7.15    7.89    8.72    8.94    9.28    9.8]; 7 ?& x0 t8 n7 ?% F# s
w=[1/6;2/6;3/6];
8 N. b9 X6 G$ em=length(y);n=3; + {. i& o! H5 }5 O3 ]; f, H1 g
for i=1:m-n+1     
5 ~: }+ |% H0 @    yhat(i)=y(i:i+n-1)*w;
: i% p3 t6 m  u8 [8 Z/ W+ Eend
3 r' H: S" x4 j& e' [/ L  u: N% ^* uyhat
3 o! p$ w% G8 E" c3 D3 aerr=abs(y(n+1:m)-yhat(1:end-1))./y(n+1:m)
, m' A# M0 J8 LT_err=1-sum(yhat(1:end-1))/sum(y(n+1:m)) : h: U& z# d* I! C; r2 @) M
y1989=yhat(end)/(1-T_err)- O9 @8 s8 g1 u; R% _& E

$ ^: _& S& P  J1 N! Z9 C, i% q" t 在加权移动平均法中,   的选择,同样具有一定的经验性。一般的原则是:近期 数据的权数大,远期数据的权数小。至于大到什么程度和小到什么程度,则需要按照预 测者对序列的了解和分析来确定。
, M0 \! z' y6 ?4 h- \% t( T& r' M3 d: x  H5 ]' l
趋势移动平均法
/ Q. p  B4 d: q* `8 w8 s简单移动平均法和加权移动平均法,在时间序列没有明显的趋势变动时,能够准确 反映实际情况。但当时间序列出现直线增加或减少的变动趋势时,用简单移动平均法和 加权移动平均法来预测就会出现滞后偏差。因此,需要进行修正,修正的方法是作二次 移动平均,利用移动平均滞后偏差的规律来建立直线趋势的预测模型。这就是趋势移动平均法。  一次移动的平均数为
% A" i7 N$ F; T" B7 s. x2 I7 a% ]! B& X9 |2 d9 w6 D1 ]
9 ^4 R! M7 h" I

( e& M, r4 z; J" e2 }3 G; e8 v7 Y6 x- |& o  Y$ A
, ~- L* R: F" a4 {. z/ ~$ ^' v" ]& S

: S8 K, j8 Z# J: t! b+ b' ~# a  `/ g6 p! w6 d2 C: P" y0 J% F
例 3  我国 1965~1985 年的发电总量如表 3 所示,试预测 1986 年和 1987 年的发 电总量。
3 i9 [2 h, G' O5 Q  R3 [
- I' y: G- N8 L; B
2 j2 N" ^5 Y3 D& @' @' j- [9 w0 f# T+ N# y
解  由散点图 1 可以看出,发电总量基本呈直线上升趋势,可用趋势移动平均法 来预测。 1 p( n# [* C  u) `
1 N. p& T3 ?0 r; k

4 t8 |/ j+ @& d3 T5 \: F
# ~& c/ [+ l9 T8 \# `% ~+ K计算的 MATLAB 程序如下: % u* C! b, h0 u7 ~% z2 S# X
1 s& {0 [" l9 W; H4 S% k
clc,clear * \8 x( }6 K8 Z% M( U9 H
load y.txt   %把原始数据保存在纯文本文件 y.txt 中 : f8 `8 O5 B# o! K8 L: B8 Y9 q3 t
m1=length(y);    & l6 M9 e2 m# v8 I$ v
n=6;   %n 为移动平均的项数 . u/ w1 g9 |/ G0 |8 E
for i=1:m1-n+1     . b8 {( d9 b2 u8 @5 v
    yhat1(i)=sum(y(i:i+n-1))/n;
% ~9 [$ N, F4 {# Q0 v& T3 B5 Gend * s' ^& s7 g0 t  N
yhat1
3 ?: s; L! c. [$ {, y% _6 `; p) Im2=length(yhat1);
$ w% H3 z# ^4 R2 F3 E" Ofor i=1:m2-n+1    : z! Y7 L) T+ l, T3 i; [
    yhat2(i)=sum(yhat1(i:i+n-1))/n; 7 B3 S# {% \3 c: `
end 8 j) A, Z# Y3 Z' f8 g- e7 }
yhat2   : `! ?+ ~, p2 s2 K
plot(1:21,y,'*') 5 H1 K: a4 S/ v( G- b! p
a21=2*yhat1(end)-yhat2(end) ' G# _6 {; y+ }2 I
b21=2*(yhat1(end)-yhat2(end))/(n-1)
+ v' A  `+ f) Z* Ey1986=a21+b21 5 c& U; y; n; z; N
y1987=a21+2*b21 . c3 h' c, h% G; M5 `9 ~9 y

" |- }( T( B( K6 P
# _4 i2 V- a- Z% p7 a! x
5 F% I! C; `. Y# y$ w& V$ R* |趋势移动平均法对于同时存在直线趋势与周期波动的序列,是一种既能反映趋势变 化,又可以有效地分离出来周期变动的方法。; Z; i: z# Q7 M" y

) w( ~# I* q: K
6 P5 t. p6 I" d2 n4 b7 x
2 ~: `4 z4 d) R0 z2 ]8 j) }3 B————————————————1 j6 |3 i, b, R# V% ^( [- @0 V
版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。6 x& V5 H' [5 k
原文链接:https://blog.csdn.net/qq_29831163/article/details/89440426, a2 K5 s0 y7 h# o+ ~+ W

# X6 O2 U+ }* f9 I+ P6 W+ n1 _
/ S2 F0 x9 }$ u- D




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5