R语言常规差分与季节差分的应用

1画时序图

library(forecast)
library(TSA)
data(co2)
plot(co2,xlab="时间",ylab="co2",type="o",col=4)

由时序图可以看出,加拿大阿勒特地区月度二氧化碳数据具有明显的趋势性和周期性,需要通过常规差分和季节差分消除趋势性和季节性。

1.1确定常规差分和季节差分的阶数 

nsdiffs(co2)  #确定季节性差分的阶数
ndiffs(co2)   #确定常规差分的阶数

结果显示,常规差分的阶数为d=1,季节差分的阶数D=1

2.单位根检验

检验差分之后序列的平稳性(ADF检验)

a=diff(diff(co2),lag=12)  #差分后的数据
library(aTSA)
adf.test(a)

由上述结果可以看出p值均小于0.05,所以拒绝原假设,可以认为差分后的序列平稳。


3.模型拟合

自相关函数和偏自相关函数

acf(a,lag=36)
pacf(a,lag=36)

运行结果如上述所示,我们将根据差分序列12阶以内的自相关函数和偏自相关函数的特征确定短期相关模型.该图显示前12期以内的自相关函数和偏自相关函数均均不截尾,所以尝试使用ARMA(1,1)模型提取差分后序列的短期相关信息;根据延迟周期长度整数倍上的自相关函数和偏自相关函数的特征确定季节模型.该图显示,延迟12阶的自相关系数显著非零,但延迟24期和36期自相关系数落入2倍标准差之内;偏自相关函数延迟12期、24期和36期均显著非零,所以认为季节自相关函数截尾,偏自相关函数拖尾,因此考虑以12为周期的$SARMA(0,1)_{12}$提取差分后序列的季节相关信息

4.参数估计

fit1=Arima(co2,order=c(1,1,1),seasonal=list(order=c(0,1,1),period=12))
fit1

4.1参数显著性检验

t=abs(fit1$coef)/sqrt(diag(fit1$var.coef))
pt(t,length(a)-length(fit1$coef),lower.tail=F)

由结果显示Φ1Φ1对应的p值大于0.05,在0.05的显著性水平下不显著,应该予以剔除,因此我们重新拟合SARMA(0,1,1)(0,1,1)_{12}模型.事实上,由差分后的自相关函数只在滞后1阶和11期、12期、13期处有明显的突出,所以我们可以识别出SARMA(0,1,1)(0,1,1)_{12}模型.

4.2模型修正

fit1=Arima(co2,order=c(0,1,1),seasonal=list(order=c(0,1,1),period=12))
fit1

4.3修正后的模型参数显著性检验

t=abs(fit1$coef)/sqrt(diag(fit1$var.coef))
pt(t,length(a)-length(fit1$coef),lower.tail=F)

两个参数上的p值均小于0.05,说明这两个参数在显著性水平α=0.05下显著.

5.残差检验

tsdiag(fit1,gof.lag=20)

由上述结果的第二个图可以看出残差的ACF均在两倍的标准误差上下限内,同时第三个图显示不同m值对应的Ljung-Box统计量的p值均大于0.05,说明可以认为残差序列是一个白噪声序列,即模型拟合数据比较充分.  

6.运用自动识别模型再次拟合模型

fit2=auto.arima(co2)
fit2

所以估计模型如下:

7.模型诊断

7.1参数的显著性检验

t=abs(fit2$coef)/sqrt(diag(fit2$var.coef))
pt(t,length(a)-length(fit2$coef),lower.tail=F)

结果显示,四个参数所对应的p值均小于0.05,同样可以说明这些参数在0.05显著性水平下均显著

7.2残差检验 

library(tseries)
tsdiag(fit2,gof.lag=20)

由上述结果的第二个图可以看出残差的ACF均在两倍的标准误差上下限内,同时第三个图显示不同m值对应的Ljung-Box统计量的p值均大于0.05,说明可以认为残差序列是一个白噪声序列,即模型拟合数据比较充分.  

8模型优化及预测

library(forecast)
fc1=forecast::forecast(fit1,h=12,level=95)
fc2=forecast::forecast(fit2,h=12,level=95)
par(mfrow=c(2,1))
plot(fc1)
plot(fc2)
par(mfrow=c(1,1))

 

  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
R语言中,我们可以使用差分数据平稳性检验来确定时间序列数据的平稳性。差分是指将相邻的时间点的数据相减,以消除数据的趋势。 在R中,我们可以使用`diff()`函数对时间序列数据进行差分,然后使用`adf.test()`函数来进行单位根检验,以确定数据是否平稳。 首先,我们需要将时间序列数据加载到R中。可以使用`ts()`函数将数据转换为时间序列对象,指定时间间隔和起始日期。例如,假设我们有一个名为`data`的数据框,其中包含了时间序列数据,可以使用以下代码将数据转换为时间序列对象: ```R ts_data <- ts(data$value, frequency = 1, start = c(year, month)) ``` 然后,我们可以对时间序列数据进行差分。可以使用`diff()`函数指定差分的阶数。例如,如果我们要将数据进行一阶差分,可以使用以下代码: ```R diff_data <- diff(ts_data, differences = 1) ``` 接下来,我们可以使用`adf.test()`函数对差分后的数据进行单位根检验。该函数可以计算出一个ADF统计量,并对其进行假设检验,来确定数据是否平稳。如果ADF统计量的p-value小于0.05,则可以拒绝原假设,即数据是非平稳的。例如,可以使用以下代码进行单位根检验: ```R result <- adf.test(diff_data) ``` 最后,我们可以查看单位根检验的结果,以确定数据的平稳性。例如,可以使用以下代码查看p-value的值: ```R result$p.value ``` 如果p-value小于0.05,则可以得出结论,数据是平稳的。否则,数据可能是非平稳的。 总结起来,通过在R中使用`diff()`函数对时间序列数据进行差分,然后使用`adf.test()`函数进行单位根检验,可以判断时间序列数据的平稳性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值