数学建模社区-数学中国

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

作者: 浅夏110    时间: 2020-5-30 15:04
标题: 时间序列模型 (二):移动平均法
移动平均法 可以作为一种数据平滑的方式 ,以每天的气温数据为例,今天的天气可能与过去的十天的气温有线性关系;或者有的人对食物有一种节俭的美德,他们做的饭菜能看出有些是上一顿的,当然也有一部分是今天的做的,再假设隔两顿的都被倒掉了,并且每天都是这样的,那么这碗饭菜可能就是一部分上一顿的再加上一部分今天现做的,这就是一个一阶的移动平均。
' \  ^. ~( U, }3 E. D( b+ T4 ?; m3 I
移动平均法
! D8 U8 B# I, y  Z* O1 l移动平均法是根据时间序列资料逐渐推移,依次计算包含一定项数的时序平均数, 以反映长期趋势的方法。当时间序列的数值由于受周期变动和不规则变动的影响,起伏 较大,不易显示出发展趋势时,可用移动平均法,消除这些因素的影响,分析、预测序列的长期趋势。  移动平均法有简单移动平均法,加权移动平均法,趋势移动平均法等。 1 J4 a: c: E: B
! v3 ~2 j- o, [
简单移动平均法( t( {+ p" }8 I. T; z- B

- ~/ J  M0 e) ~' @) c6 R& g% g0 |  b  y! v  W" P& z/ M7 K. Y" x; H
6 u8 j- f) a3 v8 g( d- n' f/ O
近N 期序列值的平均值作为未来各期的预测结果。一般 N 的取值范围: 5≤N≤ 200。当历史序列的基本趋势变化不大且序列中随机变动成分较多时,N 的 取值应较大一些。否则 N 的取值应小一些。在有确定的季节变动周期的资料中,移动平均的项数应取周期长度。选择佳 N 值的一个有效方法是,比较若干模型的预测误 差。预测标准误差小者为好。
7 }" o  y: K' }* e3 d. s, U$ @; G! ^" ^( H% B1 ~
简单移动平均法只适合做近期预测,而且是预测目标的发展趋势变化不大的情况。 如果目标的发展趋势存在其它的变化,采用简单移动平均法就会产生较大的预测偏差和滞后。 2 X& T4 h/ `7 y! ?: l/ n# z5 q

4 V! }/ |5 p0 ^' \5 q: U例 1  某企业 1 月~11 月份的销售收入时间序列如表 1 示。试用一次简单滑动平 均法预测第 12 月份的销售收入。 0 N% a: x- @- W

: J# E. c! q: m: F3 Q
% i8 e4 w, c0 G' @/ U' {; g/ G) Y- x  O
) `5 f) K+ L" R7 F3 g+ G3 \

9 g- m. T; O+ {3 W) e计算的 Matlab 程序如下: ) w: J* |6 j6 A3 c3 _' H
" ?5 ~2 N! ~% W) A$ L# I  D4 n% q
clc,clear 7 r5 M" I( G/ B7 S; ~! m, L
y=[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);   
9 F/ N' W/ c3 J. q9 Z n=[4,5];   %n 为移动平均的项数 * L) L$ N2 R" B5 K, T
for i=1:length(n)   
$ t1 K6 C8 i( M; `+ B %由于 n 的取值不同,yhat 的长度不一致,下面使用了细胞数组    * `4 L) Z0 r6 H+ w! F4 v" R; A8 u: P
    for j=1:m-n(i)+1         2 ^3 V# g" E8 k' O
        yhat{i}(j)=sum(y(j:j+n(i)-1))/n(i);     * ^, Y/ A/ U$ X8 b" Y' B
    end    ( y" a* \+ D" c/ @4 T$ w9 ?( l) l% L
    y12(i)=yhat{i}(end);     - d! m0 G' M3 c8 p. g$ q
    s(i)=sqrt(mean((y(n(i)+1:m)-yhat{i}(1:end-1)).^2));
5 A5 k7 t( C, A0 u0 pend
) m# G5 a7 [) U7 C. [y12,s
7 `1 m: d8 d1 K5 O, l+ ?# b1 N8 V. M) ]! S5 M+ [. G0 c
加权移动平均法
4 P- i( b- q  Q- L( U; c在简单移动平均公式中,每期数据在求平均时的作用是等同的。但是,每期数据所包含的信息量不一样,近期数据包含着更多关于未来情况的信心。因此,把各期数据等同看待是不尽合理的,应考虑各期数据的重要性,对近期数据给予较大的权重,这就 是加权移动平均法的基本思想。
% i' W8 B# j) u+ V, R4 B
5 P6 j& F/ ^  c8 N" e# H4 O+ ]& R0 e) t

0 v7 O9 h0 G( u, n7 |例 2  我国 1979~1988 年原煤产量如表 2 所示,试用加权移动平均法预测 1989 年 的产量( [8 I% [# g, J0 q( U

6 L5 r: R' v) i" @( a3 n
" x- n6 n3 H. D/ }
" f( K1 Y6 W7 y2 {) I- ?+ c' b' J
" x5 V! }  n1 @4 e" u* L+ M
8 x5 @8 R! H: ~+ g# Q) Y
/ f( B2 a: d( h, [, z0 e1 g0 {

+ `8 q* v- x1 y& H1 t计算的 MATLAB 程序如下: . C4 W6 H/ b+ n

& B; h) D! B5 t/ H# ?' Y& Y- c! M' `y=[6.35 6.20    6.22    6.66    7.15    7.89    8.72    8.94    9.28    9.8]; - k0 V/ i$ E- y
w=[1/6;2/6;3/6];   K* z6 _7 y. `
m=length(y);n=3; ) i7 [% ~' Y( M1 ~5 ~7 C
for i=1:m-n+1     
. I1 s* o0 e# ~4 g4 x/ @    yhat(i)=y(i:i+n-1)*w;   e1 a: U3 h, d4 W
end
$ ^- \  ~0 y/ {; X( Y+ Hyhat * u' H' x  ~% `- t
err=abs(y(n+1:m)-yhat(1:end-1))./y(n+1:m)
- s5 Q; M5 S1 r9 S5 h# l9 s. ZT_err=1-sum(yhat(1:end-1))/sum(y(n+1:m)) 4 A6 l1 l8 f  ]3 d
y1989=yhat(end)/(1-T_err)
0 w  P3 J; S% c+ p4 D) Y6 s6 s/ u/ L
在加权移动平均法中,   的选择,同样具有一定的经验性。一般的原则是:近期 数据的权数大,远期数据的权数小。至于大到什么程度和小到什么程度,则需要按照预 测者对序列的了解和分析来确定。
* M) Z" q0 x2 R9 y& S# L2 u) K& W$ d! c
趋势移动平均法  A% [% ?  R. L$ {3 o0 c
简单移动平均法和加权移动平均法,在时间序列没有明显的趋势变动时,能够准确 反映实际情况。但当时间序列出现直线增加或减少的变动趋势时,用简单移动平均法和 加权移动平均法来预测就会出现滞后偏差。因此,需要进行修正,修正的方法是作二次 移动平均,利用移动平均滞后偏差的规律来建立直线趋势的预测模型。这就是趋势移动平均法。  一次移动的平均数为
  e; V3 t' h  z7 L
4 T: D" z6 r# H+ j. ^" J/ b7 X* h1 B

5 d* g# Q3 j/ O! l1 s* u: q+ l" V( U

+ a/ j( G+ r" i$ Q$ L; V1 B4 g- J# R! K$ J9 r8 H
% \7 ~" l5 @! o4 C' O# C( l5 I
例 3  我国 1965~1985 年的发电总量如表 3 所示,试预测 1986 年和 1987 年的发 电总量。
1 T# N4 T* k9 F# c. S9 _9 ?* L* t+ h% e. }: U
' |5 E! W: Z& R

/ f! j; y2 ]4 @( k8 t! u解  由散点图 1 可以看出,发电总量基本呈直线上升趋势,可用趋势移动平均法 来预测。
5 @" D# R* ]  N# P& L1 r; E! M* z7 Z1 ?) T) l" _2 I% U
0 v1 q4 `( j$ W

& y* [6 w$ N$ n% {计算的 MATLAB 程序如下: 3 [. @- }# A" O+ w5 P

7 ]6 v6 v- _3 b3 p* p/ x' ^clc,clear
4 u: O) Z! b# M4 i( Nload y.txt   %把原始数据保存在纯文本文件 y.txt 中 $ W+ m# {& E. A) D4 M. L1 H
m1=length(y);   
7 W+ q8 g6 t5 C! [8 fn=6;   %n 为移动平均的项数
8 [  J* ]0 N9 w3 |* |for i=1:m1-n+1     
! H% R( i/ o# Q7 u8 U3 A    yhat1(i)=sum(y(i:i+n-1))/n; 0 J+ W# h% K* @3 x* d7 M. x
end
8 @1 @5 e- y2 k- s8 C, k' a/ }7 _yhat1
$ S9 p0 U6 r2 e+ Cm2=length(yhat1);
% a& @2 |: h, g' z" R! {% L' N' Rfor i=1:m2-n+1    8 C( O5 w# h0 e: v4 O
    yhat2(i)=sum(yhat1(i:i+n-1))/n;
1 }" _, C; |' M) x. u6 }5 I6 Vend   q9 s* P  L2 r$ r. r. y% m
yhat2   
7 _' b/ Z3 @  |( f: zplot(1:21,y,'*')
. Q! T4 h6 c; _1 O6 Ea21=2*yhat1(end)-yhat2(end) ; a- r  z$ e: H* h, o4 @# e
b21=2*(yhat1(end)-yhat2(end))/(n-1)
0 t( n8 K/ O$ ], {" G% B- {y1986=a21+b21 7 v4 i! r# x' s8 i: f
y1987=a21+2*b21
' X4 k+ G/ |/ u
6 r& k2 r7 i5 _: b; a8 h1 I5 Q+ M* B; p# j
" B4 y+ H: Q2 N% H8 u
趋势移动平均法对于同时存在直线趋势与周期波动的序列,是一种既能反映趋势变 化,又可以有效地分离出来周期变动的方法。3 J# N- y% z$ c8 u

- U% K. }- `! Y) O: j2 Z
  c  f; \) g( f, @) N) x$ j: ?8 k- w# b
————————————————
+ R/ u  J) [% L0 _  ^+ x3 Z& r版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
) J1 B2 p$ W; t, }7 ^* L$ ?原文链接:https://blog.csdn.net/qq_29831163/article/details/89440426$ P" f9 ?5 [% o- b' z1 s
8 K: f1 P2 R8 j6 U

2 @4 b7 n3 c* D' ?) d' s0 F  W




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