如何在R中使用阿里马模型进行预测

148 阅读1分钟

自回归模型

自动回归综合移动平均线

安装软件包

library(readxl)
library(lmtest)
library(forecast)
library(FitAR)
library(fUnitRoots)

导入数据集

table2 <- read_excel("Datum/1 SCOPUS/2022/Feb-01/Data/table2.xlsx",sheet = "Sheet2")
View(table2) 

summary(table2)

tsJual = ts(table2$avg_jual, start = c(2017,1), frequency = 12)
plot(tsJual)
tsBeli = ts(table2$avg_beli, start = c(2017,1), frequency = 12)
plot(tsBeli)

components.tsJual = decompose(tsJual)
plot(components.tsJual)
components.tsBeli = decompose(tsBeli)
plot(components.tsBeli)

urkpssTest(tsJual, type = c("tau"), lags = c("short"),use.lag = NULL, doplot = TRUE)
urkpssTest(tsBeli, type = c("tau"), lags = c("short"),use.lag = NULL, doplot = TRUE)

sstationary_Jual = diff(tsJual, differences=1)
plot(tsstationary_Jual)
tsstationary_Beli = diff(tsBeli, differences=1)
plot(tsstationary_Beli)
acf(tsJual,lag.max=34)
acf(tsBeli,lag.max=34)
Pacf(tsJual,lag.max=34)
Pacf(tsBeli,lag.max=34)

timeseriesseasonallyadjusted_Jual <- tsJual- components.tsJual$seasonal
tsstationary_Jual <- diff(timeseriesseasonallyadjusted_Jual, differences=1)
timeseriesseasonallyadjusted_Beli <- tsJual- components.tsBeli$seasonal
tsstationary_Beli <- diff(timeseriesseasonallyadjusted_Beli, differences=1)

plot(timeseriesseasonallyadjusted_Beli)
plot(timeseriesseasonallyadjusted_Jual)

acf(tsstationary_Jual, lag.max=34)
pacf(tsstationary_Jual, lag.max=34)
acf(tsstationary_Beli, lag.max=34)
pacf(tsstationary_Beli, lag.max=34)

fitARIMA_Jual <- arima(tsJual, order=c(1,1,1),seasonal = list(order = c(1,0,0), period = 12),method="ML")
fitARIMA_Beli <- arima(tsBeli, order=c(1,1,1),seasonal = list(order = c(1,0,0), period = 12),method="ML")

coeftest(fitARIMA_Jual) 

coeftest(fitARIMA_Beli) 

fitARIMA_Jual

fitARIMA_Beli

confint(fitARIMA_Beli)

confint(fitARIMA_Jual)

acf(fitARIMA_Beli$residuals)
acf(fitARIMA_Jual$residuals)

boxplot(fitARIMA_Jual$residuals,k=2,StartLag=1)
LjungBoxTest(fitARIMA_Jual$residuals,k=2,StartLag=1)
boxplot(fitARIMA_Beli$residuals,k=2,StartLag=1)
LjungBoxTest(fitARIMA_Beli$residuals,k=2,StartLag=1)

qqnorm(fitARIMA_Jual$residuals)
qqline(fitARIMA_Jual$residuals)
qqnorm(fitARIMA_Beli$residuals)
qqline(fitARIMA_Beli$residuals)

arima(tsJual)

arima(tsBeli)

auto.arima(tsJual, trace=TRUE)

auto.arima(tsBeli, trace=TRUE)

fitARIMA_Jual

fitARIMA_Beli

predict(fitARIMA_Jual,n.ahead = 1)

predict(fitARIMA_Beli,n.ahead = 1)

futurVal_Beli <- forecast(fitARIMA_Beli,h=1, level=c(99.5))
futurVal_Jual <- forecast(fitARIMA_Jual,h=1, level=c(99.5))

plot(futurVal_Beli)
plot(futurVal_Jual)

summary(futurVal_Jual)

summary(futurVal_Beli)