R实现有季节效应的时间序列分析

数据与学习过程来源于:《时间序列分析-基于R》(第二版)【M】王燕 中国人民大学出版社

代码位于文章最后

数据为1948-1981年美国女性(20岁以上)月度失业率序列

一、概念

  时间序列,简单来说就说一系列与时间有关系的序列。它按照一定时间间隔收集,在统计研究中,常用按时间顺序排列的一组随机变量X1,X2...Xt来表示一个随机事件的时间序列,用x1,x2,...,xt表示该随机序列的n个有序观察值,也称时间序列Xt的一个实现。我们进行时间序列分析的主要目的是为了揭示时间序列的性质,要实现这个目的,只能通过分析它的观察值的性质,并以此来推断序列性质。分析的步骤可如下图所示

二、 时序图

 如图所示,可知该序列为一个具有季节效应的非平稳序列。下面使用一阶差分消去趋势,再使用12步长消去季节效应的影响

三、差分运算

四、ADF检验

 如图所示,在三类型中。type1、2的ADF的p值小于显著性0.05,可以认为通过了单根检测。下面进行纯随机数检验,如果序列为白噪音,则认为该观察序列为随机数序列,没有继续分析下去的必要

五、纯随机性检验

 每隔六阶进行检验,可以看到在六阶和十二阶里面,LB的p值显著小于显著性0.05.可以拒绝原假设,即该观察序列为平稳性的非白噪音序列 

六、拟合季节乘法模型

七、模型显著性分析

 残差分析

 残差应当服从正态分布且为0,p值大于显著性值0.05,接受原假设及残差为0。在考虑漂移项影响的前提下,对未来36个月的情况做预测

八、预测

 R代码:

library(tseries)
library(readxl)
data=read_xlsx("C:/Users/tb/Desktop/美国女性失业率.xlsx")
data_ts<-ts(data,start = c(1948,1),frequency = 12)
class(data_ts)
head(data_ts,n=10)
plot.ts(data_ts,ylab="失业人数",xlab="年份",type='b',pch=1,lwd='3',col='3')
par(mfrow=c(1,2))
acf(data_ts,plot = T)
acf(data_ts)$acf
data_diff<-diff(data_ts,lag = 12,differences = 1)
plot.ts(data_diff,ylab='失业人数',xlab='年份',type='b',pch=1,lwd='3',col='2')
par(mfrow=c(1,2))
acf(data_diff,plot = T)
acf(data_diff)$acf
library(aTSA)
adf.test(data_diff,nlag = 4)
for (k in 1:2) print(Box.test(data_diff,lag = 6*k,type = "Ljung-Box"))
acf(data_diff,lag=36)
pacf(data_diff,lag=36)
library(forecast)
model<-auto.arima(data_diff)
model
data_fit<-arima(data_diff,order = c(1,1,1),seasonal=list(order=c(0,1,1),period=12))
data_fit
ts.diag(data_fit)
accuracy(data_fit)
Box.test(data_fit$residuals,type='Ljung-Box')
fore<-forecast(data_fit,h=36)
fore
plot(fore,lty=2)
lines(fore$fitted,col=4)

  • 2
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R语言可以用于实现时间序列分析时间序列分析的过程可以分为数据预处理和趋势预测两个主要部分。 1. 数据预处理: - 读入数据:使用R语言的read.csv()函数或read.table()函数读取时间序列数据文件。 - 定义日期:将数据中的日期列转换为R语言中的日期格式,可以使用as.Date()函数。 - 平稳性判断:通过绘制时间序列图和自相关图来观察数据的平稳性。可以使用plot()函数和acf()函数。 - 季节分解:对于具有季节性时间序列,可以使用decompose()函数进行季节分解,得到趋势、季节和随机成分。 2. 趋势预测: - 模型选择:根据数据的特点选择合适的时间序列模型,常见的模型包括ARIMA模型、指数平滑模型和季节性模型等。 - 模型拟合:使用选定的模型对数据进行拟合,可以使用arima()函数、ets()函数等。 - 预测:根据拟合的模型进行预测,可以使用forecast()函数。 下面是一个示例代码,演示了如何使用R语言进行时间序列分析: ```R # 读入数据 data <- read.csv("data.csv") # 定义日期 data$date <- as.Date(data$date) # 平稳性判断 plot(data$date, data$value, type = "l", xlab = "Date", ylab = "Value") acf(data$value) # 季节分解 decomposed <- decompose(data$value) trend <- decomposed$trend seasonal <- decomposed$seasonal random <- decomposed$random # 模型选择 model <- auto.arima(data$value) # 模型拟合 fit <- arima(data$value, order = model$arma) # 预测 forecast <- forecast(fit, h = 10) # 输出预测结果 print(forecast) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值