R语言-ARIMA模型

#下载和安装包
install.packages("forecast")
install.packages("tseries")
install.packages("readxl")
install.packages("aTSA")
library(forecast)
library(tseries)
library(readxl)
library(aTSA)

#导入数据集
Nile
#1.绘制时序图
plot(Nile)
#划分训练集与测试集
train<-window(Nile,start=1871,end=1960)
test<-window(Nile,start=1961,end=1970)

#自相关图#偏自相关图
acf(train)
pacf(train)

#一阶差分
ndiffs(train)  #判断需要几阶差分才能转化为平稳序列。
dtrain <- diff(train)    #一阶差分 

#单位根平稳性检验
ADF<-adf.test(dtrain)   #P值小于显著性水平,认为该序列显著平稳


#差分后序列纯随机性检验

for(k in 1:2)print(Box.test(dtrain,lag=6*k,type="Ljung-Box"))

#差分后序列自相关和偏自相关

acf(dtrain)
pacf(dtrain)

#手动定阶拟合

fit011 <- Arima(train, order = c(0,1,1))
fit011
summary(fit011)

fit110 <- Arima(train, order = c(1,1,0))
fit110

fit010 <- Arima(train, order = c(0,1,0))
fit010

fit111 <- Arima(train, order = c(1,1,1))
fit111
summary(fit111)


fit210<- Arima(train, order = c(2,1,0))
fit210


fit212 <- Arima(train, order = c(2,1,2))
fit212


fit012<- Arima(train, order = c(0,1,2))
fit012

#.模型自动定阶及拟合,基于最小AIC准测
fit <- auto.arima(train)
fit
accuracy(fit) 


#3.模型显著性检验
tsdiag(fit111)
Box.test(fit111$residuals, type="Ljung-Box") #残差检验,不显著:残差平稳

#4.用ARIMA(1,1,1)模型做预测
fore<-forecast::forecast(fit111, 10)#预测10期

#预测效果图
plot(fore, xlab="Year", ylab="Annual Flow")
lines(fore$fitted,col=2,lty=2)


 

ARIMA-GRACH模型是一种基于ARIMA模型的时间序列预测模型。下面是R语言中实现ARIMA-GRACH模型的完整代码: ```R # 加载所需的包 library(forecast) # 读入数据 data <- read.csv("data.csv") # 将数据转换为时间序列对象 ts_data <- ts(data[,2], start = c(2010,1), frequency = 12) # 划分训练集和测试集 train_data <- window(ts_data, end = c(2018,12)) test_data <- window(ts_data, start = c(2019,1)) # ARIMA模型拟合 arima_model <- auto.arima(train_data) # GRACH模型拟合 grach_model <- grangertest(train_data, k = 12, p = 12) # 预测并评估 arima_forecast <- forecast(arima_model, h = 12) grach_forecast <- predict(grach_model$fit, n.ahead = 12) # 计算RMSE arima_rmse <- sqrt(mean((arima_forecast$mean - test_data)^2)) grach_rmse <- sqrt(mean((grach_forecast$pred - test_data)^2)) # 绘制预测结果图 plot(test_data, type = "l", main = "ARIMA-GRACH Model Forecast") lines(arima_forecast$mean, col = "red") lines(grach_forecast$pred, col = "blue") # 输出RMSE值 cat("ARIMA Model RMSE: ", arima_rmse, "\n") cat("GRACH Model RMSE: ", grach_rmse, "\n") ``` 其中,`data.csv`是存储时间序列数据的CSV文件,第二列为时间序列的值。首先,我们将数据读入并转换为时间序列对象,然后将数据划分为训练集和测试集。接着,我们使用`auto.arima`函数拟合ARIMA模型,并使用`grangertest`函数拟合GRACH模型。最后,我们使用`forecast`函数对两个模型进行预测,并计算RMSE值。最终,我们绘制预测结果图,并输出RMSE值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值