Ich habe monatliche Preisdaten für eine Ware von 2007 bis 2017. Sie finden sie unter folgendem Link:
https://drive.google.com/open?id=0BxRCOgKAL4itcUZlOExrUmVOanc
Ich muss sie für das nächste mit dem saisonalen ARIMA-Modell in R prognostizieren Jahr. Wenn ich die auto.arima
Funktion verwende, wird mir das beste Modell ARIMA(0,1,1)
anstelle von vorgeschlagen ARIMA(p,d,q)(P,D,Q)12
. Der saisonale Teil des model(P,D,Q)
fehlt irgendwie. Ich weiß nicht, warum das passiert. Sind meine Daten nicht saisonabhängig oder stimmt etwas in meinem Code nicht? Auch der vom Modell angegebene Prognosewert ist für die nächsten Monate konstant, was unbedeutend ist. Bitte helfen Sie! Hier ist der Code:
data <- read.delim("C:/Users/hp/Desktop/heckyl/forecasting model/Soybean_Prices.txt", header=F)
View(data)
summary(data)
summary(data)
ts.data = ts(data, frequency=12, start=c(2007,6))
ts.data
plot(ts.data)
dim(as.matrix(ts.data))
################################################################################
# Training and Testing Dataset
data.train = window(ts.data, start = c(2007,6), end = c(2013,12))
plot(data.train)
dim(as.matrix(data.train))
data.test = window(ts.data, start = c(2014,1))
plot(data.test)
dim(as.matrix(data.test))
################################################################################
# Developing an SARIMA model and Analysis of Model
library(forecast)
arima1 = auto.arima(data.train, trace=FALSE, test="kpss", ic="aic")
summary(arima1)
confint(arima1)
# Residual Diagonostics
plot.ts(arima1$residuals)
Box.test(arima1$residuals,lag=20, type="Ljung-Box")
acf(arima1$residuals, lag.max=24, main="ACF of the Model")
Box.test(arima1$residuals^2,lag=20, type="Ljung-Box")
library(tseries)
jarque.bera.test(arima1$residuals)
arima1.forecast= forecast.Arima(arima1, h=41)
arima1.forecast
plot(arima1.forecast, xlab="Years", ylab="Price for Soybean")
library(TSPred)
plotarimapred(data.test, arima1, xlim=c(2014, 2017), range.percent = 0.05)
accuracy(arima1.forecast, data.test)
time-series
mathematical-statistics
forecasting
arima
Tarun Bajaj
quelle
quelle
Antworten:
Sie können die Saisonalität "erzwingen", indem Sie D = 1 setzen oder Regressoren hinzufügen. Wenn Sie der Meinung sind, dass die Saisonalität komplexer ist, können Sie Fourier-Begriffe verwenden? Siehe diesen Link komplexe Saisonalität Hyndman
quelle
Versuchen Sie, diesen Befehl zu verwenden, anstatt den, den Sie zum Abrufen der Parameter von ARIMA verwenden.
Manchmal ergibt die Verwendung dieser Befehle das beste Modell.
quelle
Ihre Daten deuten auf das folgende Modell hin
mit . Die tatsächliche, Passform und Prognose ist hier . Die Daten deuten auf eine Pegelverschiebung (visuell offensichtlich) und zwei statisch signifikante saisonale Indikatoren (April und September) sowie einige Anomalien (6) hin. Ich habe R verwendet, um die Analyse durchzuführen. Leider macht auto.arima einige kritische Annahmen über die Modellform, dh keine Pegelverschiebungen und keine saisonalen Impulse / Indikatoren und natürlich keine Anomalien. Es ist immer gut, das Kleingedruckte zu lesen.
Die Tatsache, dass es nur zwei Monate im Jahr gibt, die "Saisonalität" aufweisen, erklärt, warum auto.arima ein Modell lieferte, bei dem eine "saisonale Komponente irgendwie fehlte". Sogar eine kaputte Uhr ist zweimal am Tag richtig und in diesem Fall war die Uhr "fast richtig", da es keine wesentliche autoprojektive saisonale Komponente / Wirkung gibt, sondern nur eine deterministische Komponente / Wirkung für die Monate April und September.
Prognose für 6 Perioden ...
quelle