数学建模社区-数学中国

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

作者: 浅夏110    时间: 2020-5-30 15:04
标题: 时间序列模型 (二):移动平均法
移动平均法 可以作为一种数据平滑的方式 ,以每天的气温数据为例,今天的天气可能与过去的十天的气温有线性关系;或者有的人对食物有一种节俭的美德,他们做的饭菜能看出有些是上一顿的,当然也有一部分是今天的做的,再假设隔两顿的都被倒掉了,并且每天都是这样的,那么这碗饭菜可能就是一部分上一顿的再加上一部分今天现做的,这就是一个一阶的移动平均。0 j; B. h7 k8 C* z" {
, _) p9 B- D. S; E
移动平均法# V- U3 q! V0 Y8 e- |' |/ e/ w
移动平均法是根据时间序列资料逐渐推移,依次计算包含一定项数的时序平均数, 以反映长期趋势的方法。当时间序列的数值由于受周期变动和不规则变动的影响,起伏 较大,不易显示出发展趋势时,可用移动平均法,消除这些因素的影响,分析、预测序列的长期趋势。  移动平均法有简单移动平均法,加权移动平均法,趋势移动平均法等。
6 Q" u" D8 o9 \; V$ a1 }
  U7 c( p5 N0 }6 V8 O简单移动平均法3 \9 [7 s' B6 F( k$ o+ {

- O) R! x5 k) x9 b4 N
4 m2 J5 ~/ m' D5 z) `" w/ P; s7 \0 [( R, h' E7 W8 q0 U) d) D
近N 期序列值的平均值作为未来各期的预测结果。一般 N 的取值范围: 5≤N≤ 200。当历史序列的基本趋势变化不大且序列中随机变动成分较多时,N 的 取值应较大一些。否则 N 的取值应小一些。在有确定的季节变动周期的资料中,移动平均的项数应取周期长度。选择佳 N 值的一个有效方法是,比较若干模型的预测误 差。预测标准误差小者为好。 : w/ O8 ?8 m7 o2 v
& _- g# x* M3 b
简单移动平均法只适合做近期预测,而且是预测目标的发展趋势变化不大的情况。 如果目标的发展趋势存在其它的变化,采用简单移动平均法就会产生较大的预测偏差和滞后。
% ^. P* d' P& B9 f6 g; c3 u  L0 i4 O) [7 G! c
例 1  某企业 1 月~11 月份的销售收入时间序列如表 1 示。试用一次简单滑动平 均法预测第 12 月份的销售收入。 ) z* C0 ~  @: Q& U" Y
+ [& X$ P- L. r  a6 E

$ S: r4 u( Y. X7 }1 N' \% K4 ^  d, m% G% X% W
/ E% e2 }1 ^! y$ J. _. `

. ^3 T# a: ?" m- ^, l计算的 Matlab 程序如下: ) g( @: g# N( G& s9 Z' Z0 V% a! J
: H2 d+ W% `; |; U
clc,clear
! K8 \  Q6 V/ D. l$ iy=[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);   
% U* Z6 m# D% X  F; q/ _ n=[4,5];   %n 为移动平均的项数
' w, f2 T: j4 Z2 c: o5 `for i=1:length(n)    2 d* {7 t) w0 X" k7 p, O
%由于 n 的取值不同,yhat 的长度不一致,下面使用了细胞数组    & j0 c  O9 K7 p9 ?/ u
    for j=1:m-n(i)+1         3 k! M2 t" F* `; e2 V3 |+ O( {* D
        yhat{i}(j)=sum(y(j:j+n(i)-1))/n(i);     2 O2 B  i% @4 }  f$ J+ Q
    end   
& M- h+ s8 |8 N    y12(i)=yhat{i}(end);     7 ?8 m  ?0 X: a0 D; L% F' K
    s(i)=sqrt(mean((y(n(i)+1:m)-yhat{i}(1:end-1)).^2));
5 _2 z& T; k/ O7 r% Send
- a# c: l9 c/ Py12,s 2 q- g$ Q" h: T0 T3 a2 c( x- p  g

8 Q' e' N3 [5 j' E' r7 }加权移动平均法$ N: }* Y6 I2 `% x& }; W
在简单移动平均公式中,每期数据在求平均时的作用是等同的。但是,每期数据所包含的信息量不一样,近期数据包含着更多关于未来情况的信心。因此,把各期数据等同看待是不尽合理的,应考虑各期数据的重要性,对近期数据给予较大的权重,这就 是加权移动平均法的基本思想。 + U3 \( ^1 I* w7 X5 a

( z- O5 N: U+ x( v0 ?4 B; @8 w. [
0 y7 Y. l5 X! H* V1 W  u* y/ i6 T/ w2 O5 k# \3 t
例 2  我国 1979~1988 年原煤产量如表 2 所示,试用加权移动平均法预测 1989 年 的产量6 q3 n! P& A+ R6 v

! k7 d0 h! c: T: B4 ?% K" f
1 Y" {& m$ r  u9 K
, r8 g) [4 s9 z8 O3 O& E6 ~4 S0 M; e4 h4 S( Y3 \. U
* X4 a: o, h6 S- q# F6 _

$ @/ F$ |; X8 H' j9 z; ~
: j0 ]9 `* q) k* q: q/ U- l
  a$ u- `$ t7 u4 L- O计算的 MATLAB 程序如下: " |5 d! I5 E3 R: y

' E8 D" g: Z, L# Cy=[6.35 6.20    6.22    6.66    7.15    7.89    8.72    8.94    9.28    9.8]; ; I( _9 g5 n+ q( S
w=[1/6;2/6;3/6];
5 D/ ^- \1 F% I; Q5 ~m=length(y);n=3;
& E) u+ t  A  x, u: W1 gfor i=1:m-n+1     
/ c; i% Z+ Q7 x    yhat(i)=y(i:i+n-1)*w; ( t6 i! L+ y& s: T# ^! P$ ~
end
. O5 |+ S, t, [% c+ [6 p! r0 }* ?% Ryhat
' P6 O7 C8 _& n+ I9 {0 nerr=abs(y(n+1:m)-yhat(1:end-1))./y(n+1:m) 7 t& p2 C2 D$ s1 K+ i) q, T, ^0 Z9 m
T_err=1-sum(yhat(1:end-1))/sum(y(n+1:m))
( C1 t: O6 u. A: z3 E0 Oy1989=yhat(end)/(1-T_err)
* m: N; m3 S2 M
8 v7 Q% g6 o, X 在加权移动平均法中,   的选择,同样具有一定的经验性。一般的原则是:近期 数据的权数大,远期数据的权数小。至于大到什么程度和小到什么程度,则需要按照预 测者对序列的了解和分析来确定。
, _$ h, ]9 m7 ~) S4 i) X( P# Y6 @. d( ~
趋势移动平均法
" f# s. I3 j" A. f简单移动平均法和加权移动平均法,在时间序列没有明显的趋势变动时,能够准确 反映实际情况。但当时间序列出现直线增加或减少的变动趋势时,用简单移动平均法和 加权移动平均法来预测就会出现滞后偏差。因此,需要进行修正,修正的方法是作二次 移动平均,利用移动平均滞后偏差的规律来建立直线趋势的预测模型。这就是趋势移动平均法。  一次移动的平均数为 * Z4 q$ s1 G4 j  w, |
7 V" f2 i$ ], B+ B
. z% [9 O$ q' T: Q" x+ r+ q4 D

2 U* @8 s, U. @8 b, }1 G1 m
/ G( X4 r7 J7 v6 S
) X# c% w6 W3 X: [
/ w% P3 t) y* o0 D; N  P# o- [, X! y! {1 o& K4 T) T+ m/ S
例 3  我国 1965~1985 年的发电总量如表 3 所示,试预测 1986 年和 1987 年的发 电总量。 0 i. A9 P* U1 {7 A4 s

7 q7 K, `# b% W( x
- q2 M5 H1 x2 R' c, ~/ ?; _: j! T$ k9 E' A2 M4 D
解  由散点图 1 可以看出,发电总量基本呈直线上升趋势,可用趋势移动平均法 来预测。
! j# k3 l; R. O7 M, G* `) m
' E9 G9 a' r# Z, L9 m
/ w; L9 s; i' {( B9 P' ~( h9 Y. w% f1 g, `1 v: a
计算的 MATLAB 程序如下:
/ s5 I$ D: M1 |) L- l; \; c& o# @4 _0 k. s4 h
clc,clear # ^5 }$ ~5 `' K1 K
load y.txt   %把原始数据保存在纯文本文件 y.txt 中
4 X7 x# W" V5 k% `; }8 r$ I- ~+ Em1=length(y);      ~* U6 n3 _. b4 O
n=6;   %n 为移动平均的项数 & X# l( i, M/ w/ k
for i=1:m1-n+1     
( o$ e% K' L6 e- [    yhat1(i)=sum(y(i:i+n-1))/n;
! c; }+ Y) o# T' W, y" zend
( R- j$ C2 H, ^2 Myhat1
1 R1 a0 `# m3 y* ~' Z  [m2=length(yhat1); 8 E9 y$ I- d2 ]
for i=1:m2-n+1   
/ c9 \4 u* x4 ~+ s& u$ [, N7 y) b    yhat2(i)=sum(yhat1(i:i+n-1))/n;
; k- D3 Y; ~+ O) o2 E- o) G! r9 Uend 4 |. A3 a- E- }0 W
yhat2   ' ]9 e; Q- }# R8 o( g
plot(1:21,y,'*') ! J: P/ Q; d; k+ m& C
a21=2*yhat1(end)-yhat2(end)
$ W" f6 q$ _" {3 \0 @7 B* Yb21=2*(yhat1(end)-yhat2(end))/(n-1) & E5 ?9 e6 r  \: P5 l
y1986=a21+b21 . u6 q$ y# b, b1 [$ ^3 h2 l; {# z
y1987=a21+2*b21
$ U. ^  h+ B+ S- [+ q. C, k1 Q/ q  \. U) r3 _. D
( ?% O+ l9 C. w" N$ w+ i
. H+ O# B8 h# {& q3 ^4 X& e
趋势移动平均法对于同时存在直线趋势与周期波动的序列,是一种既能反映趋势变 化,又可以有效地分离出来周期变动的方法。
' w$ }/ K9 @9 Z* S( s, d7 @3 n6 i5 H! r/ |& z  O

6 N9 S9 [1 X2 m6 }: O! v, w. `, |7 ], Z8 t
————————————————
/ E# f' p! g1 D+ D/ N6 l) v版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。3 P- Z  r% J' F7 }8 t
原文链接:https://blog.csdn.net/qq_29831163/article/details/89440426* P7 U& ~3 Z" t( G8 e$ h

& z# l! z3 f+ L1 I+ w9 H- c5 W1 N! l; I0 f





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