16.时间序列(上)
时间序列1.时间序列预测技术定义通过时间序列预测技术,我们可以分析求解目标随时间的变化趋势。2.简单移动平均法模型推理例题matlab代码:clc,cleary=[533.8574.6606.9649.8705.1772.0816.4892.7963.91015.11102.7];m=length(y);n=[4,5];%n为移动平均的项数for i=1:length(n)%由于n的取值不同,下面
·
时间序列
1.时间序列预测技术定义
通过时间序列预测技术,我们可以分析求解目标随时间的变化趋势。
2.简单移动平均法
模型推理
例题
matlab代码:
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的取值不同,下面使用了细胞数组
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); %提出第12月份的预测值
s(i)=sqrt(mean((y(n(i)+1:end)-yhat{i}(1:end-1)).^2)); %求预测的标准误差
end
y12, s %分别显示两种方法的预测值和预测的标准误差
3.指数平滑法
模型推理
加权系数的选择
初始值的确定
例题
新建一个dianqi.txt保存数据
50
52
47
51
49
48
51
40
48
52
51
59
matlab代码:
clc,clear
yt=load('dianqi.txt'); %实际销售额数据以列向量的方式存放在纯文本文件中
n=length(yt); alpha=[0.2 0.5 0.8]; m=length(alpha);
yhat(1,[1:m])=(yt(1)+yt(2))/2;
for i=2:n
yhat(i,:)=alpha*yt(i-1)+(1-alpha).*yhat(i-1,:);
end
yhat
err=sqrt(mean((repmat(yt,1,m)-yhat).^2))
xlswrite('dianqi.xls',yhat) %把预测数据写到Excel文件,准备在word表格中使用
yhat1988=alpha*yt(n)+(1-alpha).*yhat(n,:)
4.二次指数平滑法
模型推理
例题
fadian.txt
676
825
774
716
940
1159
1384
1524
1668
1688
1958
2031
2234
2566
2820
3006
3093
3277
3514
3770
4107
matlab代码:
clc,clear
yt=load('fadian.txt'); %原始发电总量数据以列向量的方式存放在纯文本文件中
n=length(yt); alpha=0.3, st1(1)=yt(1); st2(1)=yt(1);
for i=2:n
st1(i)=alpha*yt(i)+(1-alpha)*st1(i-1);
st2(i)=alpha*st1(i)+(1-alpha)*st2(i-1);
end
xlswrite('fadian.xls',[st1',st2']) %把数据写入表单Sheet1中的前两列
at=2*st1-st2;
bt=alpha/(1-alpha)*(st1-st2);
yhat=at+bt; %最后的一个分量为1986年的预测值
xlswrite('fadian.xls',yhat','Sheet1','C2') %把预测值写入第3列
str=['C',int2str(n+2)]; %准备写1987年预测值位置的字符串
xlswrite('fadian.xls',at(n)+2*bt(n),'Sheet1',str)%把1987年预测值写到相应位置
5.三次滑动平均值
例题
touzi.txt
20.04
20.06
25.72
34.61
51.77
55.92
80.65
131.11
148.58
162.67
232.26
matlab代码:
clc,clear
yt=load('touzi.txt'); %原始投资总额数据以列向量的方式存放在纯文本文件中
n=length(yt); alpha=0.3; st0=mean(yt(1:3));
st1(1)=alpha*yt(1)+(1-alpha)*st0;
st2(1)=alpha*st1(1)+(1-alpha)*st0;
st3(1)=alpha*st2(1)+(1-alpha)*st0;
for i=2:n
st1(i)=alpha*yt(i)+(1-alpha)*st1(i-1);
st2(i)=alpha*st1(i)+(1-alpha)*st2(i-1);
st3(i)=alpha*st2(i)+(1-alpha)*st3(i-1);
end
xlswrite('touzi.xls',[st1',st2',st3']) %把数据写在前三列
at=3*st1-3*st2+st3;
bt=0.5*alpha/(1-alpha)^2*((6-5*alpha)*st1-2*(5-4*alpha)*st2+(4-3*alpha)*st3);
ct=0.5*alpha^2/(1-alpha)^2*(st1-2*st2+st3);
yhat=at+bt+ct;
xlswrite('touzi.xls',yhat','Sheet1','D2') %把数据写在第4列第2行开始的位置
plot(1:n,yt,'D',2:n,yhat(1:end-1),'*')
legend('实际值','预测值','Location','northwest') %图注显示在左上角
xishu=[ct(end),bt(end),at(end)]; %二次预测多项式的系数向量
yhat1990=polyval(xishu,2) %求预测多项式m=2时的值
返回目录
下一篇:17.时间序列(下)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献8条内容
所有评论(0)