Matlab时间序列分析

时间序列分析需要解决的问题

假设我们有这么一段数据(采样自移动公司某段时间的开户客户数目)
下载地址,包含本实验用到的数据/资料以及全部代码,实验报告,引用请告知,关注并留言获取提取码,或者到我的csdn下载进行下载
在这里插入图片描述
我们可以发现,在数据中似乎有种明显的趋势规律,或许还存在一定的周期性。但是,我们却不好描述这种趋势或者说是周期,因为数据中存在一定的随机因素模糊了我们的判断。在进行时间序列数据分析时,我们大部分的目的都是想从中找出可以表达的规律以便于我们对未来做预测。
在这里,我们把时间序列数据分解为以下三项:

真实数据=趋势项+周期项+随机项
趋势性:例如随时间变化的一次函数/多次函数/幂函数趋势等
周期项:周期规律
随机项:在这里可以理解为噪声,但是这些噪声也是存在规律的。

不难发现,趋势性和周期项都不难描述,难以刻画的是随机项变化。而如果我们真正能预测随机项的变化,那么我们就基本上可以预测整个数据下一步的走势了。

时间序列分析的步骤

  • 观测数据(均值,周期等)
  • 数据预处理
  • 平稳化–去趋势与去周期,剩余随机项
  • 用类似于回归/滑动平均的思想来 拟合随机项
    1.判断去趋势去周期后的数据是否平稳
    2.计算数据的自相关函数和偏相关函数
    3.根据自相关/偏相关函数性质决定选用什么模型来拟合随机项

在这里插入图片描述
4.模型定阶和拟合参数的求解
5.模型检验

  • 模型最终实现功能:将周期项/趋势性/随机项结合,是一个关于时间变化的函数,这个函数可以在一定程度上对未来数据进行预测。

如何实现每个步骤

去趋势/去周期

运用差分算子可以去趋势和周期,其中N阶差分用于具有N阶多项式趋势的数据去趋势,N步差分用于具有N步周期的数据去周期。

偏相关/自相关函数的计算

可以运用matlab自带函数,也可以自己编写。

模型定阶

可以参考AIC/BIC等定阶方法

模型检验

通过计算LB统计量和卡方统计量,判断拟合的误差项是否为白噪声序列,如果是,则检验通过。

一个具体的案例 --移动开户数分析

我们有一份移动公司两年间共计700余天的每日开户树,我们想探寻其中的随机因素。

数据观察

变化趋势

在这里插入图片描述

   图一.原开户数据趋势变化的观察

可以发现,开户数在局部区间的极值变化具有一定的周期性。但是数据太多且有点杂乱。
为了更好的观察数据的规律,拟将数据进行滑动平均处理,在一定程度上更能看出规律性。并且,依据两年的月数天数变化,设置标记每月天数变化的向量,计算每月,每个季度,每年的平均开户数进行观察。计算并绘制得到下图:
在这里插入图片描述

图二.开户数据趋势变化周期的观察

上图红色标记为2012年,蓝色标记为2013年。总的看来均有上升的趋势。图二左上角绘制的是2012和2013的开户数滑动平均观察(使用matlab smooth函数,滑动窗口设置为30),容易发现在年这个层面上趋势具有较大的相关性,一年显然可以是一个大周期的刻画。但是这个周期太大了,如果选取这个周期做去季节性,显然会损失大量数据。因此,我们想找到一个更小的周期来刻画,其实我们还可以发现图一中有明显的小起伏,经验证起伏平均间隔为30即一个月,那么一个月是否为一个周期呢?右上图是按月进行平均的统计值绘制,起伏貌似没有什么规律。但是还是可以作为参考。左下角图绘制的是季度的平均开户数变化,可以发现两个季度为一个周期,因为起伏在两个周期中进行。右下角图绘制的是年平均变化图,如我们所料,随着移动互联网的普及,2013年开户平均数比2012年高。

综上观察,我们可以得出以下结论:
1.一个月应该是一个最小周期,两个季度是一个中周期,一年为一个确定的大周期。
2.开户人数有明显的上升趋势。
3.由观测值我们可以认为存在异常值。

数据预处理

2.1缺失值处理
数据中不存在缺失值
2.2异常值处理
拟采用三倍标准差即拉以达法则筛选异常值,考虑到时间序列的短期影响性,用其周围值平均代替。

去趋势与去周期

进行了简单的观察和数据预处理后,我们开始正式进行时间序列平稳化的操作。考虑到有两年,我们从单独考虑2012,2013,然后集中考虑2012和2013来进行处理和检验。
3.1去趋势
由于数据变化有一定的集中性,且有滑动平均看来近似可以用一次函数拟合。所以采用一次差分的方法去除数据的趋势项。这里采用diff函数实现一次差分。去趋势后,我们进行了如下的观察:

在这里插入图片描述

在这里插入图片描述

图三.周期为一个月的检验图

我们发现相邻极值点间的时间差距十分接近于一个月,这让我们欣喜万分。

3.2去周期
由以上的观察数据和去趋势后数据综合考虑,采用一个月作为周期是个不错的选择。这里自定义d步差分函数对去趋势后的数据进行去周期的处理。
经过3.1和3.2,我们得到如下结果:
在这里插入图片描述在这里插入图片描述

图四.2012年去趋势和去周期比较图 图五.2013年去趋势和去周期比较图

在这里插入图片描述

图六.2012-2013年去趋势和去周期比较图

肉眼看来,效果还算不错,从均值线看来均值均十分接近于0。为了更客观的看待平稳的效果,采用自相关图还进行平稳性的验证。

自相关性平稳性检验结果如下:
在这里插入图片描述

图七.自相关图检验平稳性

从自相关图看来,经过去趋势和去周期后的数据的确是平稳的。 经过以上步骤,我们就成功的将非平稳的时间序列转换为了平稳的时间序列,得到了随机误差项的表示。

截至目前以上代码总结:

%% 计算月平均,季度平均,年平均意图找寻周期规律
% 输入开户数据
% 输出各有用的统计量
function [months_mean,seasons_mean,years_mean,month_starts,month_ends,season_starts,season_ends] = Calu_mean(open_nums)
t = 1:length(open_nums);
nums = open_nums;
month_days = [0,31,29,31,30,31,30,31,31,30,31,30,31,31,28,31,30,31,30,31,31,30,31,30,
  • 138
    点赞
  • 441
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 110
    评论
MATLAB 是一种功能强大的数学软件,它包括了许多工具箱,其中之一就是用于时间序列分析的工具箱。MATLAB时间序列分析工具箱提供了丰富的函数和算法,可以实现对时间序列数据的建模、预测和分析。 在 MATLAB时间序列分析工具箱中,最常用的函数之一是 `timeseries` 函数。通过这个函数,我们可以将时间序列数据加载到 MATLAB 中,并进行基本的数据处理和分析。例如,我们可以使用 `timeseries` 函数创建时间序列对象,然后使用其他函数来计算平均值、方差、自相关系数等指标,还可以进行数据和可视化。 除了 `timeseries` 函数之外,MATLAB时间序列分析工具箱还提供了一些专门用于时间序列分析的函数,如 `arima` 函数、`ar` 函数和 `ma` 函数等。这些函数可以用来拟合时间序列数据的自回归模型、移动平均模型等,从而实现对数据的预测和建模。 此外,MATLAB时间序列分析工具箱还提供了一些统计检验工具,如 Ljung-Box 检验、单位根检验等,用于判断时间序列数据是否满足一些基本的统计特性,如平稳性、白噪声等。这些工具可以帮助我们更全面地了解时间序列数据的特征和结构。 总之,MATLAB时间序列分析工具箱为我们提供了丰富的功能和工具,让我们能够方便地进行时间序列数据的建模、预测和分析。无论是在学术研究还是实际应用中,MATLAB时间序列分析工具箱都是一个非常有用的工具。
评论 110
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UESTC Like_czw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值