小言_互联网的博客

数学建模常用模型06 :时间序列预测

548人阅读  评论(0)

给大家安利一款朋友开发的自研国产数据分析基础工具,一键式自动分析,自动生成分析模板,5分钟掌握主流61个统计类数学模型(几乎涵盖SPSS绝大部分功能),以及23个有监督机器学习(包括随机森林,SVM,XGBoost等)

PS:巨方便简单上手,貌似现在是免费

官网:www.mpaidata.com   mpai数据科学平台

 

时间序列预测与马尔科夫链预测互补,至少有2个点需要信息的传递,ARMA模型,周期模型,季节模型等

ARMA模型的全称是自回归移动平均(auto regression moving average)模型,它是目前最常用的拟合平稳序列的模型,它又可细分为AR模型(auto regression model)、MA模型(moving average model)和ARMA模型(auto regression moving average model)三大类。

例 税收作为政府财政收入的主要来源,是地方政府实行宏观调控、保证地区经济稳定增长的重要因素。各级政府每年均需预测来年的税收收入以安排财政预算。什么方法能够帮助地方政府有效地预测税收收入?下表是某地历年税收数据(单位:亿元)

表1 各年度的税收数据

年份

1

2

3

4

5

6

7

税收

15.2

15.9

18.7

22.4

26.9

28.3

30.5

年份

8

9

10

11

12

13

14

税收

33.8

40.4

50.7

58

66.7

81.2

83.4

利用以下程序:


  
  1. clc, clear
  2. a=[ 15. 2 15. 9 18. 7 22. 4 26. 9 28. 3 30. 5 33. 8 40. 4 50. 7 58 66. 7 81. 2 83. 4];
  3. m=input('请输入需要预测的个数:');
  4. ahat=a;
  5. for i= 1:m %m=需要预测值的数量
  6. fprintf('现在开始预测第%d个值。',i);
  7. a=ahat;
  8. a=a'; a=a(:); a=a'; %把原始数据按照时间顺序展开成一个行向量
  9. Rt=tiedrank(a); %求原始时间序列的秩 28. 3
  10. n=length(a); t= 1:n;
  11. Qs= 1- 6/(n*(n^ 2- 1))*sum((t-Rt).^ 2) %计算Qs的值
  12. T=Qs*sqrt(n- 2)/sqrt( 1-Qs^ 2) %计算T统计量的值
  13. t_0=tinv( 0. 975,n- 2) %计算上alpha/ 2分位数

作下列假设检验

:序列平稳;

:序列非平稳(存在上升或者下降趋势)。

Daniel检验方法:对于显著水平,由时间序列计算,的Spearman秩相关系数Qs,若>t_0,则拒绝,认为序列非平稳。并且Qs>0时,认为序列由上升趋势;Qs<0时,认为序列有下降趋势。又当t_0时,接受,可以认为是平稳序列。

本题中,,上alpha/2的值t_0=2.1788,所以>t_0,故认为序列是非平稳的;因为Qs>0,所以序列有上升趋势。为了构造平稳序列,对于作一阶差分运算,得到序列。从时间序列散点图来看,时间序列是平稳的。

实现代码如下:


  
  1. if(T>t_0)
  2. b=diff(a); %求原始时间序列的一阶差分
  3. c=ar(b, 2,'ls'); %利用最小二乘法估计模型的参数
  4. bhat=predict(c,b') %求原始数据的预测值,第二个参数必须为列向量
  5. bhat( end+ 1)=forecast(c,b', 1); %计算1个预测值,第二个参数必须为列向量
  6. fprintf('第 %d个值预测后的全部数据ahat:',i);
  7. ahat=[a( 1), a+bhat'] %求原始数据的预测值,并计算t=15的预测值
  8. delta=abs((ahat( 1: end- 1)-a)./a) %计算原始数据预测的相对误差
  9. else
  10. c=ar(a, 2,'ls'); %利用最小二乘法估计模型的参数
  11. bhat=predict(c,a') %求原始数据的预测值,第二个参数必须为列向量
  12. bhat( end+ 1)=forecast(c,a', 1); %计算1个预测值,第二个参数必须为列向量
  13. fprintf('第 %d个值预测后的全部数据ahat:',i);
  14. ahat=bhat' %求原始数据的预测值,并计算t=15的预测值
  15. delta=abs((ahat( 1: end- 1)-a)./a) %计算原始数据预测的相对误差
  16. end
  17. end

最终算得结果如下:

年份

1

2

3

4

5

6

7

税收

15.2

15.9

18.7

22.4

26.9

28.3

30.5

预测值

15.2

15.9

18.7

19.9651

25.3715

30.7182

31.8093

相对误差

0

0

0

0.1087

0.0568

0.0854

0.0429

年份

8

9

10

11

12

13

14

税收

33.8

40.4

50.7

58

66.7

81.2

83.4

预测值

32.0832

36.2442

44.5258

58.1439

67.1731

74.1835

91.2694

相对误差

0.0508

0.1029

0.1218

0.0025

0.0071

0.0864

0.0944

注:在使用该程序时,只需要把矩阵a换成自己的数据就行

 

一般推荐使用SPSS,具体步骤如下:

SPSS进行时间序列预测:

  1. 把数据输入到SPSS中;

2.定义日期和时间;

3.选择日期:选择“年”,第一个个案是:选择2000,然后点击“确定”;

4.转换→创建时间序列

 

 

5.把“税收”移到“变量”里,“名称”默认即可,“函数”中选择“平滑”,然后点击“确定”,即可得到预测结果;

为了和用MATLAB求解的结果作比较,这里也求出了其相对应的相对误差:

 

 

 

 

 


转载:https://blog.csdn.net/qq_41686130/article/details/81386159
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场