通过R语言实现平稳时间序列的建模--基础(ARMA模型)

这篇具有很好参考价值的文章主要介绍了通过R语言实现平稳时间序列的建模--基础(ARMA模型)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. 建模流程

2. 序列平稳性检验和纯随机性检验

2.1 图检验

2.2 单位根检验

3. 模型选择

​ 

4. 参数估计

5. 模型检验

5.1 模型显著性检验

5.2 参数显著性检验

6. 模型优化

6.1 AIC准则

6.2 BIC准则

7. 预测


1. 建模流程

1.1 序列平稳性检验+纯随机性检验

1.2 模型选择

1.3 参数估计

1.4 模型检验

1.5 模型优化

1.6 预测

2. 序列平稳性检验和纯随机性检验

2.1 图检验

主要适用于趋势或者周期比较明显的序列,具有一定主观性。

(1)绘制时序图与自相关图:

x<-read.csv("C:/Users/M/Desktop/4.9.csv") #读入csv数据
dwelling<-ts(x,start = c(1971,9),frequency = 12)#构造时间序列变量 
#start:指定序列起始时间,如start=c(1990,2)即1990年2月;start=1990即1990年。
#frequency:指定学列每年读入的数据频率,如frequency=12即每年读入12个数据,月度数据;frequency=4即读入季度数据;诸如此类。

plot(dwelling) #输出时序图

acf(dwelling,lag.max=12,plot=T)
#acf(变量名,延迟阶数,选择输出自相关图或者自相关系数)
#lag.max:若缺省该参数,系统会根据序列长度自动指定延迟阶数。
#plot:系统默认参数为plot = Ture,即只输出自相关图不输出自相关系数;plot=False,只输出自相关系数。
acf(time)$acf #查看具体的自相关系数

通过R语言实现平稳时间序列的建模--基础(ARMA模型)通过R语言实现平稳时间序列的建模--基础(ARMA模型)

 从时序图可见该序列没有明显的趋势和周期,从自相关图可见该序列除了延迟1~4阶外,其他自相关系数均在两倍标准差内,可以认为该序列具有短期相关性。因此判断该序列为平稳序列。

(2)纯随机检验

纯随机序列序列没有建模的必要,因为序列值之间无相关性,历史数据对未来数据无影响。

用Box.test 函数进行纯随机性检验:

Box.test(dwelling,lag=6,type="Ljung-Box") #延迟6阶
Box.test(dwelling,lag=12,type="Ljung-Box") #延迟12阶
#lag: 缺省该参数时,默认输出之后1阶的检验统计量结果
#type:选择检验统计量的类型,默认为type="Box-Pierce",输出白噪声检验的Q统计量;type="Ljung-Box"输出LB统计量

#输出情况如下
> Box.test(dwelling,lag=6,type="Ljung-Box") #延迟6阶

	Box-Ljung test

data:  dwelling
X-squared = 215.96, df = 6, p-value < 2.2e-16

> Box.test(dwelling,lag=12,type="Ljung-Box") #延迟12阶

	Box-Ljung test

data:  dwelling
X-squared = 329.2, df = 12, p-value < 2.2e-16

白噪声检验显示延迟为6、12阶时p值均远远小于显著性水平0.05,因此显著拒绝序列为纯随机系列的原假设。因此判断该序列为非纯随机序列。

2.2 单位根检验

2.2.1 DF检验

仅适用于最简单的1阶模型AR(1)的平稳性检验。

调用aTSA中的的adf.test 函数进行DF检验:

install.packages("aTSA")
library(aTSA)
adf.test(dwelling,nlag=2) 
#nlag:最高延迟阶数,若nlag=1即输出自回归0阶延迟平稳性检验结果;若nlag=2即输出自回归0至1阶延迟平稳性检验结果。

#输出结果
> adf.test(dwelling,nlag=2)
Augmented Dickey-Fuller Test 
alternative: stationary 
 
Type 1: no drift no trend 
     lag   ADF p.value
[1,]   0 -2.46  0.0162
[2,]   1 -1.90  0.0573
Type 2: with drift no trend 
     lag   ADF p.value
[1,]   0 -4.81    0.01
[2,]   1 -3.68    0.01
Type 3: with drift and trend 
     lag   ADF p.value
[1,]   0 -4.97  0.0100
[2,]   1 -3.89  0.0185
---- 
Note: in fact, p.value = 0.01 means p.value <= 0.01 

如上检验结果,类型一二三的p值(p.value)均小于显著性水平0.05,因此可以判断该序列显著平稳。

只要有一个类型的p值能够通过显著性检验,即可判断序列平稳。

2.2.2 ADF检验

DF检验修正后增广DF检验,即ADF检验,适用于任意p阶模型的平稳性检验。

adf.test(dwelling)

#输出结果
> adf.test(dwelling)
Augmented Dickey-Fuller Test 
alternative: stationary 
 
Type 1: no drift no trend 
     lag   ADF p.value
[1,]   0 -2.46  0.0162
[2,]   1 -1.90  0.0573
[3,]   2 -1.38  0.1832
[4,]   3 -1.10  0.2827
Type 2: with drift no trend 
     lag   ADF p.value
[1,]   0 -4.81   0.010
[2,]   1 -3.68   0.010
[3,]   2 -2.43   0.161
[4,]   3 -1.94   0.350
Type 3: with drift and trend 
     lag   ADF p.value
[1,]   0 -4.97  0.0100
[2,]   1 -3.89  0.0185
[3,]   2 -2.60  0.3254
[4,]   3 -2.03  0.5579
---- 
Note: in fact, p.value = 0.01 means p.value <= 0.01 

3. 模型选择

在一个序列被确定为平稳白噪声序列后,我们可以根据样本自相关性系数与偏自相关性系数的性质选择合适的ARMA模型拟合序列。

自相关系数 偏自相关系数 模型定阶
拖尾 p阶截尾 AR(p)模型
q阶截尾 拖尾 MA(p)模型
拖尾 拖尾 ARMA(p,q)模型

截尾:若样本(偏)自相关系数最初R阶明显超出2倍标准差范围,但此后95%的(偏)自相关系数均在2倍标准差内,且数值衰减成小值波动的过程非常突然。

拖尾:若有超过5%的样本(偏)自相关系数落在2倍标准差外,或者,由显著非零的(偏)自相关系数衰减为小值波动的过程较为缓慢或连续。

绘制自相关系数图与偏自相关系数图:

acf(dwelling) #自相关系数图
pacf(dwelling) #偏自相关系数图

通过R语言实现平稳时间序列的建模--基础(ARMA模型)通过R语言实现平稳时间序列的建模--基础(ARMA模型)

自相关系数图显示出较为缓慢且连续地衰减,这是自相关系数拖尾的表现。偏自相关系数图显示除了延迟2阶偏自相关系数在2倍标准差范围内,其他均在2倍标准差范围内波动,这是偏自相关系数截尾的特征。因此可以将该序列模型定阶为AR(1)。

4. 参数估计

通过 arima 函数进行参数估计:

arima(dwelling,order=c(1,0,0))
#order=c(p,d,q):p为自回归阶数;d为差分阶数,不涉及差分时可以取0;q为移动平均阶数。
#method:指定参数估计方法,默认为method="CSS-ML" 即条件最小二乘与极大似然估计混合方法;method="CSS" 即条件最小二乘估计方法;method="ML" 即极大似然估计方法。

#输出结果:
> arima(dwelling,order=c(1,0,0),method="ML")

Call:
arima(x = dwelling, order = c(1, 0, 0), method = "ML")

Coefficients:
         ar1  intercept
      0.5929    40.5062
s.e.  0.0877     4.6893

sigma^2 estimated as 331.3:  log likelihood = -380.41,  aic = 766.82

第一行输出的是参数估计值,第二行输出的是参数估计值的样本标准差。

根据输出结果,得到模型:, 且 。

或者,通过输出的参数得到, ,

因此得到AR(1)模型为:通过R语言实现平稳时间序列的建模--基础(ARMA模型)

5. 模型检验

5.1 模型显著性检验

如果残差序列为非白噪声检验,则意味着残差序列中依旧含有未被模型提取的相关信息,这就说明这个拟合模型不够有效。因此,模型的显著性检验即残差序列的白噪声检验。

原假设为该序列的残差均为0。

fit=arima(dwelling,order=c(1,0,0),method="ML") #fit为arima函数拟合结果
ts.diag(fit) #进行模型显著性检验,输出四个图
#左上的图为残差序列自相关图;右上的图为残差序列偏相关图
#左下的图为残差序列白噪声检验图;右下为残差序列正态性检验QQ图

输出四图如下:

通过R语言实现平稳时间序列的建模--基础(ARMA模型)

左下方的残差序列自相关图横轴为延迟阶数,纵轴为该延阶数纯随机性检验(Q统计量)的p值。若所有的点都在虚线上方,即所有Q统计量的p值均大于显著性水平0.05,此时可认为该模型显著成立。

右下方的残差序列正态性检验QQ图横轴为正态分布的分位数,纵轴为样本分位数,若图上的点密集分布在对称线左右,则可以认为该序列服从正态分布。该图可用以对序列进行正态分布假定的检验。

如图,由于残差序列自相关图上所有点均在虚线上方,即所有p值均显著大于0.05,可以认为该模型的残差序列为白噪声序列,即该模型通过了显著性检验。

5.2 参数显著性检验

即检验未知参数是否显著非零。若某个参数不显著非零,则可以从拟合模型中剔除,使得模型精简。

5.2.1 法一

当样本较大时,序列近似于正态分布,因此只要参数估计值大于其两倍标准差,我们就可以认为该参数显著非零。

此时只需要再使用一次arima函数:

arima(dwelling,order=c(1,0,0),method="ML")

#输出结果
> arima(dwelling,order=c(1,0,0),method="ML")

Call:
arima(x = dwelling, order = c(1, 0, 0), method = "ML")

Coefficients:
         ar1  intercept
      0.5929    40.5062
s.e.  0.0877     4.6893

因为0.5929>0.0877*2,20.5062>4.6893*2,因此两个参数均显著非零。

5.2.2 法二

先构造参数显著性检验的t统计量,再通过pt函数求得p值:

t=abs(fit$coef)/sqrt(diag(fit$var.coef)) #构造t统计量
pt(t,length(dwelling)-length(fit$coef),lower.tail = F) #输出p值

#输出结果
> t=abs(fit$coef)/sqrt(diag(fit$var.coef))
> pt(t,length(dwelling)-length(fit$coef),lower.tail = F)
         ar1    intercept 
7.828497e-10 1.343084e-13 

两个参数t统计量的p值均远小于显著性水平0.05,因此两个参数均显著非零。

6. 模型优化

一个好的模型是拟合精度与未知参数个数的综合最优配置,我们可以通过最小信息量检查AIC以及它的改进BIC准则来选出相对的最优模型。

6.1 AIC准则

AIC(fit)

#输出结果
AIC(fit)
[1] 766.8243

可以对比多个模型的AIC值,使得AIC达到最小值的模型为相对最优模型。

6.2 BIC准则

BIC(fit)

#输出结果
> BIC(fit)
[1] 774.2563

 可以对比多个模型的BIC值,使得BIC达到最小值的模型为相对最优模型。

也可以同时考虑AIC函数值与BIC函数值,使得二者达到最小的模型为相对最优模型。

6.3 auto.arima 函数

该函数基于信息量最小原则,可以在一定范围内自动识别最优模型的阶数,可以起到简化模型优化问题的作用。

install.packages("forecast")
library("forecast")
auto.arima(dwelling,max.p=5,max.q=5,ic="bic")
#max.p:指定自相关系数的最高阶数,默认为5; 
#max.q:指定移动平均系数的最高阶数,默认为5;
#ic:指定信息量准则,默认为ic="aic",即AIC准则;ic="bic"即BIC准则;此外还有ic="aicc"。


#输出结果
> auto.arima(dwelling,max.p=5,max.q=5,ic="bic")
Series: dwelling 
ARIMA(1,0,1)(1,0,0)[12] with zero mean 

Coefficients:
         ar1      ma1    sar1
      0.9648  -0.4870  0.3971
s.e.  0.0297   0.0951  0.1375

sigma^2 estimated as 296.6:  log likelihood=-375.97
AIC=759.95   AICc=760.43   BIC=769.86

考虑到输出的第二个参数值-0.4870<2*0.0951,即参数估计值小于2倍标准差,这个参数不显著非零,舍去,因此最优模型应该是AR(1) 。

7. 预测

可以通过forecast包中的forecast函数进行预测:

library("forecast")
fore=forecast(fit,h=10) #预测此后10期
#h:预测期数;
#level:置信区间的置信水平,默认为80%与95%的双层置信区间。

plot(fore,lty=2) #输出预测图
lines(fore$fitted,col=4) #在预测图上加上拟合值曲线
#图中虚线为观察值,实线为拟合值

通过R语言实现平稳时间序列的建模--基础(ARMA模型)     通过R语言实现平稳时间序列的建模--基础(ARMA模型)

 图中右边预测部分,深色区域为置信水平80%的预测值置信区间,浅色区域为置信水平为95%的预测置信区间。文章来源地址https://www.toymoban.com/news/detail-455345.html

到了这里,关于通过R语言实现平稳时间序列的建模--基础(ARMA模型)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文速学数模-时序预测模型(二)平稳时间序列预测算法和自回归模型(AR)详解+Python代码实现

    目录 前言 一、平稳时间序列预测算法 1.时间序列的分布、均值和协方差函数 概率分布

    2023年04月08日
    浏览(40)
  • 时间序列的数据分析(七):数据平稳性

    之前已经完成了六篇关于时间序列的博客,还没有阅读过的读者请先阅读: 时间序列的数据分析(一):主要成分 时间序列的数据分析(二):数据趋势的计算 时间序列的数据分析(三):经典时间序列分解   时间序列的数据分析(四):STL分解 时间序列的数据分析(五):简单预测法    

    2024年02月01日
    浏览(42)
  • R——《时间序列分析——基于R》第5章 无季节效应的非平稳序列分析 习题1

    目录 1.导入数据并绘图 2.进行一阶差分并绘制该序列时序图 3.判断该序列的平稳性与纯随机性 4.考察该序列的自相关系数和偏自相关系数的性质 5.选择适当模型拟合该序列的发展 5.1. ARIMA(1,1,0)不带漂移项 5.2. ARIMA(1,1,0)带漂移项 5.3. ARIMA(0,1,1)不带漂移项   5.4. ARIMA(0,1,1)带漂移项

    2024年02月08日
    浏览(36)
  • AutoTimes:通过大语言模型的自回归时间序列预测器

    论文标题 : AutoTimes: Autoregressive Time Series Forecasters via Large Language Models 作者 :Yong Liu, Guo Qin, Xiangdong Huang, Jianmin Wang, Mingsheng Long 链接 :https://arxiv.org/abs/2402.02370 机构 :清华大学 Cool Paper :https://papers.cool/arxiv/2402.02370 🌟【紧跟前沿】“时空探索之旅”与你一起探索时空奥秘!

    2024年02月22日
    浏览(44)
  • 数学建模--时间序列预测模型的七种经典算法的Python实现

    目录 1.开篇版权提示 2.时间序列介绍  3.项目数据处理 4.项目数据划分+可视化 5.时间预测序列经典算法1:朴素法 6.时间预测序列经典算法2: 简单平均法 7.时间预测序列经典算法3:移动平均法 8.时间预测序列经典算法4:简单指数法  9.时间预测序列经典算法5:Holt线性趋势法

    2024年02月10日
    浏览(36)
  • 【数学建模】--时间序列分析

    时间序列分析概念与时间序列分解模型 定义:时间序列也称动态序列,是指将某种现象的指标数值按照时间顺序排列而成的数值序列。时间序列分析大致可分成三大部分,分别是描述过去,分线规律和预测未来,本讲将主要介绍时间序列分析中常用的三种模型:季节分解指数

    2024年02月13日
    浏览(38)
  • 数学建模--时间序列分析

    目录 1.时间序列 2.平稳时间序列 差分方程 滞后因子 时序平稳性  自回归模型AR(P) 滑动平均模型 MA(q) 自回归移动平均模型ARMA(p,q) 3.matlab时序分析 garchset函数 garchfit函数 4.案例分析         时间序列分析是一种数据分析方法,它研究的对象是代表某一现象的一串随时间

    2024年02月12日
    浏览(38)
  • 【数学建模】时间序列分析

    1.使用于具有时间、数值两种要素 2.数据具有周期性可以使用时间序列分解 叠加模型【Y=T+S+C+I】 序列的季节波动变化越来越大,反映变动之间的关系发生变化 乘积序列【Y=T S C*I】 时间序列波动保持恒定,可以使用叠加模型 数据预处理——开头结尾有缺失值,直接删掉即可

    2024年02月15日
    浏览(38)
  • 数学建模:14 时间序列

    目录 步骤 基本概念 时间序列分解 叠加 / 乘积模型 使用SPSS的实例 步骤 指数平滑模型 Simple模型 线性趋势模型 布朗线性趋势模型 阻尼趋势模型 简单季节性 温特加法模型 温特乘法模型 一元时间序列分析的模型 基础概念 平稳时间序列、白噪声序列 差分方程及其特征方程 滞

    2024年02月09日
    浏览(30)
  • 数学建模-时间序列预测步骤

    目录 数据 第一步:定义时间 第二步:创建传统模型 结果 论文下笔 GG 点击条件,点击 离群值全部勾选 点击统计 点击图 保存 选项   由于我们的数据中不存在缺失值,且为季度数据,则可以作出时间序列图 从图中可以看出,销量数据存在递增趋势并且有很明显的季节性波动

    2024年01月19日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包