https://people.duke.edu/~rnau/411arim.htm
editor::
what:: A model for [[time series]]
input:: 数据
output:: 预测结果
what::
requirements:: 短期预测;
implementation:: 预测趋势
reference::
exerpt::
Moving Average
当时间序列的数值由于受周期变动和不规则变动的影响,起伏 较大,不易显示出发展趋势时,可用移动平均法,消除这些因素的影响,预测序列的长期趋势
(不得不说是非常无聊的方式)
简单移动平均法
$$ M_t^{(1)}=\frac{1}{N}(y_t+y_{t-1}+\cdots+y_{t-N+1} $$
clc,clear
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);
n=[4,5]; %n 为移动平均的项数 for i=1:length(n)
%由于 n 的取值不同,yhat 的长度不一致,下面使用了细胞数组 for j=1:m-n(i)+1
yhat{i}(j)=sum(y(j:j+n(i)-1))/n(i); end
y12(i)=yhat{i}(end);
s(i)=sqrt(mean((y(n(i)+1:m)-yhat{i}(1:end-1)).^2)); end
y12,s
加权移动平均法
$$ M_{tw}=\frac{w_1y_t+w_2y_2+\cdots +w_Ny_{t-N+1}}{w_1+w_2 + \cdots +w_N} , t \geq N $$
y=[6.356.20 6.22 6.66 7.15 7.89 8.72 8.94 9.28 9.8];
w=[1/6;2/6;3/6];
m=length(y);n=3;
for i=1:m-n+1
yhat(i)=y(i:i+n-1)*w;
end
yhat
err=abs(y(n+1:m)-yhat(1:end-1))./y(n+1:m)
T_err=1-sum(yhat(1:end-1))/sum(y(n+1:m))
y1989=yhat(end)/(1-T_err)
当时间序列出现直线增加或减少的变动趋势时,用简单的移动平均法和加权移动平均法来预测会出现滞后偏差
修正方法是二次移动平均,aka在一次移动平均的基础上再进行一次移动平均
公式:
$$ M_t^{(2)}= \frac{1}{N}(M_t^{(1)}+\cdots +M_{t-N+1}^{(1)}) = M_{t-1}^{(2)} +\frac{1}{N}(M_t^{(1)}-M_{t-N}^{(1)}) $$
$$ \hat{y_{t+T}} = a_t+b_tT, T=1,2,\cdots $$
$a_t, b_t$ 又称平滑系数,计算公式为
$$ a_t = 2M_t^{(1)}-M_t^{(2)} $$
$$ b_t = \frac{2}{N-1}(m_t^{(1)}-m_t^{(2)}) $$
clc,clear
load y.txt %把原始数据保存在纯文本文件 y.txt 中 m1=length(y);
n=6; %n 为移动平均的项数
for i=1:m1-n+1
yhat1(i)=sum(y(i:i+n-1))/n; end
yhat1 m2=length(yhat1); for i=1:m2-n+1
yhat2(i)=sum(yhat1(i:i+n-1))/n; end
yhat2
plot(1:21,y,'*') a21=2*yhat1(end)-yhat2(end) b21=2*(yhat1(end)-yhat2(end))/(n-1) y1986=a21+b21
y1987=a21+2*b21