4

Voici le tracé des données initiales (après avoir effectué une transformation de journal). log plotLa 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

first_seasonal_diff plot.

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: ACFPACF.

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. residualPlotacfResidspacfResids

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

+0

s'il vous plaît partager des données et des exemples de code. – mtoto

+0

fera l'affaire!Quel est le moyen le plus simple de partager l'ensemble de données (environ 300 valeurs) et le code r? –

+0

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

Répondre

2

Jane,

Il y a plusieurs choses qui se passent ici. Au lieu de logarithmes, nous avons utilisé le test de variance de tsay qui montre que la variance a augmenté après la période 118. Les moindres carrés pondérés en traitent.

Tsay variance test

Mars devient plus début à la période 111. Une alternative à un AR12 ou saisonnier est differentiation d'identifier les nuls saisonniers. Nous avons constaté que 7 des 12 mois étaient inhabituels avec des changements de niveau en couple, un AR2 avec 2 valeurs aberrantes.

Model

est ici l'ajustement et les prévisions. Actual, fit and Forecasts

Voici les résidus. Residuals

ACF des résidus ACF Residuals

Note: Je suis un développeur du logiciel Autobox. Tous les modèles sont erronés. Certains sont utiles.

Voici le document de Tsay http://onlinelibrary.wiley.com/doi/10.1002/for.3980070102/abstract