给大家安利一款朋友开发的自研国产数据分析基础工具,一键式自动分析,自动生成分析模板,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 |
利用以下程序:
-
clc, clear
-
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];
-
m=input('请输入需要预测的个数:');
-
ahat=a;
-
for i=
1:m %m=需要预测值的数量
-
fprintf('现在开始预测第%d个值。',i);
-
a=ahat;
-
a=a'; a=a(:); a=a'; %把原始数据按照时间顺序展开成一个行向量
-
Rt=tiedrank(a); %求原始时间序列的秩
28.
3
-
n=length(a); t=
1:n;
-
Qs=
1-
6/(n*(n^
2-
1))*sum((t-Rt).^
2) %计算Qs的值
-
T=Qs*sqrt(n-
2)/sqrt(
1-Qs^
2) %计算T统计量的值
-
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,所以序列有上升趋势。为了构造平稳序列,对于作一阶差分运算,得到序列。从时间序列散点图来看,时间序列是平稳的。
实现代码如下:
-
if(T>t_0)
-
b=diff(a);
%求原始时间序列的一阶差分
-
c=ar(b,
2,'ls');
%利用最小二乘法估计模型的参数
-
bhat=predict(c,b')
%求原始数据的预测值,第二个参数必须为列向量
-
bhat(
end+
1)=forecast(c,b',
1);
%计算1个预测值,第二个参数必须为列向量
-
fprintf('第
%d个值预测后的全部数据ahat:',i);
-
ahat=[a(
1), a+bhat']
%求原始数据的预测值,并计算t=15的预测值
-
delta=abs((ahat(
1:
end-
1)-a)./a)
%计算原始数据预测的相对误差
-
else
-
c=ar(a,
2,'ls');
%利用最小二乘法估计模型的参数
-
bhat=predict(c,a')
%求原始数据的预测值,第二个参数必须为列向量
-
bhat(
end+
1)=forecast(c,a',
1);
%计算1个预测值,第二个参数必须为列向量
-
fprintf('第
%d个值预测后的全部数据ahat:',i);
-
ahat=bhat'
%求原始数据的预测值,并计算t=15的预测值
-
delta=abs((ahat(
1:
end-
1)-a)./a)
%计算原始数据预测的相对误差
-
end
-
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进行时间序列预测:
- 把数据输入到SPSS中;

2.定义日期和时间;

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


4.转换→创建时间序列

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


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

转载:https://blog.csdn.net/qq_41686130/article/details/81386159