时间序列简单介绍

简介:

首先读入一个时间序列:从1946年1月到1959年12月的纽约每月出生人口数量(由牛顿最初收集)数据集可以从此链接下载(http://robjhyndman.com/tsdldata/data/nybirths.dat)。我们将数据读入R,并且存储到一个时间序列对象中,输入以下代码:

births<- scan("http://robjhyndman.com/tsdldata/data/nybirths.dat")
birthstimeseries<-ts(births,frequency=12,start=c(1946,1)) 

月度数据就设定frequency=12,季度数据就设定frequency=4;“start”参数来指定收集数据的第一年和这一年第一个间隔期。

接下来我们用plot函数绘制时间序列图:

plot.ts(birthstimeseries)
image

可以看到这个时间序列在一定月份存在的季节性变动:在每年的夏天都有一个出生峰值,在冬季的时候进入波谷。同样,这样的时间序列也可能是一个相加模型,随着时间推移,季节性波动时大致稳定的而不是依赖于时间序列水平,且对着时间的变化,随机波动看起来也是大致稳定的。

接下来我们来分解时间序列,时间序列分为:非季节性数据和季节性数据

一个非季节性时间序列包含一个趋势部分和一个不规则部分。分解时间序列即为试图把时间序列拆分成这些成分,也就是说,需要估计趋势的和不规则的这两个部分。

一个季节性时间序列包含一个趋势部分,一个季节性部分和一个不规则部分。分解时间序列就意味着要把时间序列分解称为这三个部分:也就是估计出这三个部分。

上述的婴儿出生是明显季节性时间序列,我们采用R提供的“decompose()”函数分解该时间序列:

birthstimeseriescomponents <- decompose(birthstimeseries)

估计出的季节性、趋势的和不规则部分现在被存储在变量birthstimeseriescomponents$seasonal, birthstimeseriescomponents$trend和 birthstimeseriescomponents$random 中。

我们可以分别画出这三部分,观察其特性:

plot(birthstimeseriescomponents)
image

图展现出了原始的时间序列图(顶部),估计出的趋势部分图(第二部份),估计出的季节性部分(第三个部分),估计得不规则部分(底部)。我们可以看到估计出的趋势部分从1947年的24下降到1948年的22,紧随着是一个稳定的增加直到1949年的27。

上述示例充分展示了时间序列的多模型加和性,该属性也是时间序列的一个很重要的属性,每拿到一个时间序列,我们首先需要判断该时间序列是否可以用相加模型来描述,在确定了加和属性后去考虑如何分解时间序列,以下举一个例子说明(澳大利亚昆士兰州海滨度假圣地的纪念品商店从1987年1月到1987年12月的每月销售数据)。我们首先画出该序列,找个整体的感知:

souvenir <- scan("http://robjhyndman.com/tsdldata/data/fancy.dat")
souvenirtimeseries <- ts(souvenir, frequency=12, start=c(1987,1))
plot.ts(souvenirtimeseries)

结果如下:

image

 

该序列看上去不适合时间,因为该序列的季节波动性和随机波动的大小随着时间序列逐步上升。为了使该序列符合标准的时间序列从而采用相加模型描述,我们对原始数据取自然对数进行转换:

logsouvenirtimeseries <- log(souvenirtimeseries)
plot.ts(logsouvenirtimeseries)

结果如下:

image

我们可以看到季节性波动和随机变动的大小在对数变换后的时间序列上,随着时间推移,季节性波动和随机波动的大小是大致恒定的,并且不依赖于时间序列水平。因此转换后的时间序列可以用相加模型进行描述,我们对变化后的序列进行分解:

logsouvenirtimeseriesComponents <- decompose(logsouvenirtimeseries)
plot(logsouvenirtimeseriesComponents)
image
观察该图,我们也可以看出随着时间的推移,随机和季节的波动都是稳定的,再次证明我们的转换是有作用的。
 
目录
相关文章
|
7月前
|
机器学习/深度学习 算法 数据建模
探索XGBoost:时间序列数据建模
探索XGBoost:时间序列数据建模
225 2
|
2月前
|
机器学习/深度学习 人工智能 测试技术
VisionTS:基于时间序列的图形构建高性能时间序列预测模型,利用图像信息进行时间序列预测
构建预训练时间序列模型的主要挑战在于获取高质量、多样化的时间序列数据。目前有两种方法:迁移学习LLM(如GPT-4或Llama)和从零训练。尽管迁移学习可行,但效果有限;从零训练则依赖大量数据,如MOIRAI、TimesFM和TTM等模型所示。为解决这一难题,研究人员提出利用图像数据进行时间序列预测。
223 10
VisionTS:基于时间序列的图形构建高性能时间序列预测模型,利用图像信息进行时间序列预测
|
7月前
|
数据挖掘 vr&ar
SPSS时间序列模型预测
SPSS时间序列模型预测
125 0
|
6月前
|
机器学习/深度学习 vr&ar
技术心得:时间序列:ARIMA模型
技术心得:时间序列:ARIMA模型
58 0
|
机器学习/深度学习 运维 计算机视觉
TimesNet:时间序列预测的最新模型
2023年4月发表了一个新的模型,它在时间序列分析的多个任务中实现了最先进的结果,如预测、imputation、分类和异常检测:TimesNet。
815 0
|
7月前
|
存储 移动开发 Serverless
使用R语言进行时间序列(arima,指数平滑)分析(下)
使用R语言进行时间序列(arima,指数平滑)分析
|
7月前
|
数据挖掘 vr&ar Python
使用Python实现时间序列预测模型
使用Python实现时间序列预测模型
143 3
|
7月前
|
机器学习/深度学习 数据采集 算法
利用scikit-learn进行时间序列预测
【4月更文挑战第17天】本文介绍了如何使用Scikit-learn进行时间序列预测,涉及数据预处理(如缺失值填充、平滑和特征提取)、模型选择(线性回归、SVM、随机森林等)、模型评估与优化(如MSE、RMSE、MAE作为评估指标,超参数优化和模型融合)。Scikit-learn为时间序列预测提供了强大支持,但实际应用需结合问题需求和数据特性。未来可探索深度学习在此领域的应用。
|
7月前
|
存储 Serverless
使用R语言进行时间序列(arima,指数平滑)分析(上)
使用R语言进行时间序列(arima,指数平滑)分析
|
7月前
|
SQL 数据可视化
Prophet在R语言中进行时间序列数据预测
Prophet在R语言中进行时间序列数据预测