Voici le tracé des données initiales (après avoir effectué une transformation de journal). La fonction Auto.arima() n'entraîne pas de bruit blanc. Sinon, comment dois-je procéder pour modéliser les données?
Il est évident qu'il existe à la fois une tendance linéaire et une tendance saisonnière. Je peux répondre à ces deux questions en prenant la première et la douzième différence (saisonnière): diff (diff (données), 12). Après cela, voici le tracé des données résultantes
Ces données ne sont pas géniales. Alors que la moyenne en constante, nous voyons un effet d'entonnoir au fil du temps. Voici les ACF/PACF: .
Toutes les suggestions d'essayages possibles. J'ai utilisé la fonction auto.arima() qui suggérait un modèle ARIMA (2,0,2) xARIMA (1,0,2) (12). Cependant, une fois que j'ai pris les résidus de l'ajustement, il était clair qu'il y avait encore une sorte de structure en eux. Voici le tracé des résidus de l'ajustement ainsi que l'ACF/PACF des résidus.
Il ne semble pas être un modèle saisonnier concernant qui ont des pointes dans retards l'ACF/PACF des résidus. Cependant, ceci est encore quelque chose qui n'a pas été capturé par les étapes précédentes. Qu'est-ce que tu me suggère de faire? Comment est-ce que je pourrais construire un meilleur modèle qui a de meilleurs diagnostics de modèle (qui maintenant est juste un meilleur ACF et PACF)?
Voici mon code simplifié jusqu'ici:
library(TSA)
library(forecast)
beer <- read.csv('beer.csv', header = TRUE)
beer <- ts(beer$Production, start = c(1956, 1), frequency = 12)
# transform data
boxcox <- BoxCox.ar(beer) # 0 in confidence interval
beer.log <- log(beer)
firstDifference <- diff(diff(beer.log), 12) # get rid of linear and
# seasonal trend
acf(firstDifference)
pacf(firstDifference)
eacf(firstDifference)
plot(armasubsets(firstDifference, nar=12, nma=12))
# fitting the model
auto.arima(firstDifference, ic = 'bic') # from forecasting package
modelFit <- arima(firstDifference, order=c(1,0,0),seasonal
=list(order=c(2, 0, 0), period = 12))
# assessing model
resid <- modelFit$residuals
acf(resid, lag.max = 15)
pacf(resid, lag.max = 15)
Voici les données, si vous êtes intéressé (je pense que vous pouvez utiliser un convertisseur HTML vers csv si vous voulez): https://docs.google.com/spreadsheets/d/1S8BbNBdQFpQAiCA4J18bf7PITb8kfThorMENW-FRvW4/pubhtml
s'il vous plaît partager des données et des exemples de code. – mtoto
fera l'affaire!Quel est le moyen le plus simple de partager l'ensemble de données (environ 300 valeurs) et le code r? –
vous pouvez utiliser 'dput()' pour partager une partie de l'ensemble de données qui illustre votre question, par exemple les 100 premières valeurs. – mtoto