数学建模之时间序列的典型分解模型附Matlab代码

本文介绍了一种通过典型分解模型分析交通死亡数据的方法,步骤包括提取季节项、回归拟合和未来预测。实例以6年每月数据为例,展示了如何预测未来一年的交通死亡人数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间序列的典型分解模型

引言

一个时间序列的典型分解式为:
X t = m t + s t + Y t X_{t}=m_{t}+s_{t}+Y_{t} Xt=mt+st+Yt
其中 m t m_{t} mt为趋势项, s t s_{t} st是已知周期为d的周期项; Y t Y_{t} Yt是随机噪声项。
在这里插入图片描述
​ 图1 某地6年交通死亡数据

计算过程

设某周期性数据为 X i j ( i = 1 , 2 , , n ; j = 1 , 2 , , 12 ) X_{i j}(i=1,2,,n;j=1,2,,12) Xij(i=1,2,,n;j=1,2,,12)​,共有n年数据,
每年有12个数据。现对未来12个月进行预测

(1)提取季节项
 求出第  i  年平均值  X ˉ i = ∑ j = 1 12 X i j 12 ( i = 1 , 2 , … , n )  对每个月数据零均值化  s t i j = X i j − X ˉ i ( i = 1 , 2 , … , n ; j = 1 , 2 , … , 12 )  则季节项为:  S j = ∑ i = 1 n s t i j n ( j = 1 , 2 , … , 12 ) \begin{array}{l} \text { 求出第 } i \text { 年平均值 } \bar{X}_{i}=\frac{\sum_{j=1}^{12} X_{i j}}{12}(i=1,2, \ldots, n)\\ \text { 对每个月数据零均值化 } s t_{i j}=X_{i j}-\bar{X}_{i} \quad(i=1,2, \ldots, n ; j=1,2, \ldots, 12)\\ \text { 则季节项为: } \quad S_{j}=\frac{\sum_{i=1}^{n} s t_{i j}}{n} \quad(j=1,2, \ldots, 12) \end{array}  求出第 i 年平均值 Xˉi=12j=112Xij(i=1,2,,n) 对每个月数据零均值化 stij=XijXˉi(i=1,2,,n;j=1,2,,12) 则季节项为Sj=ni=1nstij(j=1,2,,12)

S j S_{j} Sj即为季节项,这里T=12。满足
获取去掉季节项后数据
Y i j = X i j − S j ( i = 1 , 2 , , n ; j = 1 , 2 , , 12 ) Y_{i j}=X_{i j}-S_{j}(i=1,2,,n;j=1,2,,12) Yij=XijSj(i=1,2,,n;j=1,2,,12)

将所有数据按行拉直变为一行令 Z = Y ˉ = ( Y 1 , 1 , Y 1 , 2 , . . . , Y 1 , 12 , Y 2 , 1 , Y 2 , 2 , . . . , Y 2 , 12 , Y n , 1 , Y n , 2 , . . . , Y n , 12 ) = ( z 1 , z 2 , . . . , z 12 n ) Z=\bar{Y}=(Y_{1,1},Y_{1,2},...,Y_{1,12},Y_{2,1},Y_{2,2},...,Y_{2,12},Y_{n,1},Y_{n,2},...,Y_{n,12})=(z_{1},z_{2},...,z_{12n}) Z=Yˉ=(Y1,1,Y1,2,...,Y1,12,Y2,1,Y2,2,...,Y2,12,Yn,1,Yn,2,...,Yn,12)=(z1,z2,...,z12n)

(3)回归拟合
对数据 z 1 , z 2 , . . . , z 12 n z_{1},z_{2},...,z_{12n} z1,z2,...,z12n​.采用多项式回归拟合,如一次或二次多项式
如设回归结果为 z t = a + b . t ( t = 12 , … , 12 × n ) z_{t}=a+b.t(t=12,…,12×n) zt=a+b.t(t=12,,12×n)

对消除季节项后未来12个月预测值为12+1,212+2…,212。即Yn+1,F7+12…,Y+12
则原始数据中未来12个月预测值为

(4)预测

对消除季节项后末来 12 个月预测值为 z ^ 12 n + 1 , z ^ 12 n + 2 , ⋯   , z ^ 12 n + 12 \hat{z}_{12 n+1}, \hat{z}_{12 n+2}, \cdots, \hat{z}_{12 n+12} z^12n+1,z^12n+2,,z^12n+12 。 即 Y ^ n + 1 , 1 , Y ^ n + 1 , 2 , … , Y ^ n + 1 , 12 \hat{Y}_{n+1,1}, \hat{Y}_{n+1,2}, \ldots, \hat{Y}_{n+1,12} Y^n+1,1,Y^n+1,2,,Y^n+1,12
则原始数据中末来 12 个月预测值为:
X ^ n + 1 , j = Y ^ n + 1 , j + S j ( j = 1 , 2 , … , 12 ) \hat{X}_{n+1, j}=\hat{Y}_{n+1, j}+S_{j} \quad(j=1,2, \ldots, 12) X^n+1,j=Y^n+1,j+Sj(j=1,2,,12)

实例计算

根据某地6年每年12个月的交通死亡数据。 预测未来一年每个月的交通死亡人数。 数据见表一。

表1某地区交通死亡数据(1973年1月到1978年12月)

月份197319741975197619771978
1900777508162771777927836
2810669817306746169576892
3892880388124777677267791
4913784227870792581068129
51001787149387863488909115
61082695129556894592999434
7113171012010093100781062510484
81077498239620919793029827
9971387438285803783149110
10993891298433848888509070
11916187108160787482658633
12892786808034846787969240

在这里插入图片描述
图2 6年按月统计的数据图

Matlab程序

x=[9007,8106,8928,9137,10017,10826,11317,10744,9713,9938,9161,8927,...
7750,6981,8038,8422,8714,9512,10120,9823,8743,9129,8710,8680,...
8162,7306,8124,7870,9387,9556,10093,9620,8285,8433,8160,8034,...
7717,7461,7776,7925,8634,8945,10078,9179,8037,8488,7874,8647,...
7792,6957,7726,8106,8890,9299,10625,9302,8314,8850,8265,8796,...
7836,6892,7791,8129,9115,9434,10484,9827,9110,9070,8633,9240];
D=[9007,8106,8928,9137,10017,10826,11317,10744,9713,9938,9161,8927;
7750,6981,8038,8422,8714,9512,10120,9823,8743,9129,8710,8680;
8162,7306,8124,7870,9387,9556,10093,9620,8285,8433,8160,8034;
7717,7461,7776,7925,8634,8945,10078,9179,8037,8488,7874,8647;
7792,6957,7726,8106,8890,9299,10625,9302,8314,8850,8265,8796;
7836,6892,7791,8129,9115,9434,10484,9827,9110,9070,8633,9240];
aver=mean(D');
st=zeros(6,12);
for i=1:6
for j=1:12
st(i,j)=D(i,j)-aver(i);
end
end
NST=zeros(1,12);
nst=sum(st)/6; %6年月平均作为st的估计
nx=zeros(72,1);
for i=1:6
for j=1:12
k=(i-1)*12+j; nx(k)=x(k)-nst(j);
end
end
%对消去季节项后数据nx
%进行线性拟合并预测
Y=zeros(72,1);
A=zeros(72,2);
for i=1:72
Y(i)=nx(i);
A(i,1)=1; A(i,2)=i;
end
coef=inv(A'*A)*A'*Y;
py=zeros(1,84);
for i=1:84
py(i)=coef(1)+coef(2)*i;
end  
subplot(2,1,1);
plot(1:72,nx,1:72,py(1:72));
xx=zeros(1,84);
for i=1:7
for j=1:12
k=(i-1)*12+j;
xx(k)=py(k)+nst(j); %预测各月数值
end
end
subplot(2,1,2);
plot(1:72,x,'*',1:84,xx);

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值