Determinando parâmetros (p, d, q) para modelagem ARIMA

10

Sou relativamente novo em estatística e R. Gostaria de conhecer o processo para determinar os parâmetros ARIMA para meu conjunto de dados. Você pode me ajudar a descobrir o mesmo usando R e teoricamente (se possível)?

Os dados variam de 12 de janeiro a 14 de março e retratam as vendas mensais. Aqui está o conjunto de dados:

99 58 52 83 94 73 97 83 86 63 77 70 87 84 60 105 87 93 110 71 158 52 33 68 82 88 84

E aqui está a tendência:

insira a descrição da imagem aqui

Os dados não apresentam uma tendência, comportamento sazonal ou ciclicidade.

Raunak87
fonte

Respostas:

9

Em geral, procure um livro didático avançado de análise de séries temporais (os livros introdutórios geralmente o direcionam a confiar apenas no seu software), como o Time Series Analysis da Box, Jenkins & Reinsel. Você também pode encontrar detalhes sobre o procedimento Box-Jenkins pesquisando no Google. Observe que existem outras abordagens além da Box-Jenkins, por exemplo, baseadas na AIC.

Em R, você primeiro converte seus dados em um tsobjeto (série temporal) e diz a R que a frequência é 12 (dados mensais):

require(forecast)
sales <- ts(c(99, 58, 52, 83, 94, 73, 97, 83, 86, 63, 77, 70, 87, 84, 60, 105, 87, 93, 110, 71, 158, 52, 33, 68, 82, 88, 84),frequency=12)

Você pode plotar as funções de autocorrelação (parcial):

acf(sales)
pacf(sales)

Isso não sugere nenhum comportamento de AR ou MA.

Então você ajusta um modelo e inspeciona:

model <- auto.arima(sales)
model

Veja ?auto.arimapara ajuda. Como vemos, auto.arimaescolhe um modelo simples (0,0,0), pois não vê tendência nem sazonalidade nem AR ou MA em seus dados. Por fim, você pode prever e plotar as séries temporais e previsões:

plot(forecast(model))

previsão

Veja ?forecast.Arima(observe a capital A!).

Este livro online gratuito é uma ótima introdução à análise e previsão de séries temporais usando R. Muito recomendado.

Stephan Kolassa
fonte
Oi Stephan, eu adicionei os dados e o gráfico para o meu conjunto de dados. Como você pode ver que eu tenho apenas 27 pontos de dados, estou executando aqui os fumos. Você poderia sugerir algo aqui.
Raunak87
Eu editei a resposta. Sua série não exibe muita estrutura; portanto, há muito pouco que você pode fazer. Como você tem ruído e pouco mais, obtém grandes intervalos de previsão.
Stephan Kolassa
4

Sua série temporal é mensal, são necessários pelo menos 4 anos de dados para uma estimativa sensata do ARIMA, pois 27 pontos refletidos não fornecem a estrutura de autocorrelação. Isso também pode significar que suas vendas são afetadas por alguns fatores externos, em vez de serem correlacionadas com seu próprio valor. Tente descobrir qual fator afeta suas vendas e se esse fator está sendo medido. Em seguida, você pode executar uma regressão ou VAR (Regressão automática de vetores) para obter previsões.

Se você absolutamente não tem mais nada além desses valores, sua melhor maneira é usar um método de suavização exponencial para obter uma previsão ingênua. A suavização exponencial está disponível em R.

Em segundo lugar, não vejo as vendas de um produto isoladamente, as vendas de dois produtos podem estar correlacionadas, por exemplo, o aumento nas vendas de café pode refletir uma diminuição nas vendas de chá. use as outras informações do produto para melhorar sua previsão.

Isso normalmente acontece com os dados de vendas no varejo ou na cadeia de suprimentos. Eles não mostram muito da estrutura de autocorrelação na série. Enquanto, por outro lado, métodos como ARIMA ou GARCH normalmente trabalham com dados do mercado de ações ou índices econômicos nos quais você geralmente tem autocorrelação.

NG_21
fonte
3

Este é realmente um comentário, mas excede o permitido, por isso eu o publico como uma quase resposta, pois sugere a maneira correta de analisar dados de séries temporais. .

O fato bem conhecido, mas muitas vezes ignorado aqui e em outros lugares, é que o ACF / PACF teórico usado para formular um modelo ARIMA provisório pressupõe que não haja tendências de pulsos / mudanças de nível / pulsos sazonais / tendências da hora local. Além disso, premissa parâmetros constantes e variação constante de erros ao longo do tempo. Nesse caso, a 21ª observação (valor = 158) é facilmente sinalizada como um outlier / Pulse e um ajuste sugerido de -80 gera um valor modificado de 78. O ACF / PACF resultante da série modificada mostra pouca ou nenhuma evidência de estrutura estocástica (ARIMA). Nesse caso, a operação foi um sucesso, mas o paciente morreu. A amostra de ACF é baseada na covariância / variação e uma variação indevidamente inflada / inchada gera um viés descendente para a ACF. Keith Ord certa vez se referiu a isso como o "efeito Alice no País das Maravilhas"

IrishStat
fonte
2

Como foi apontado por Stephan Kolassa, não há muita estrutura em seus dados. As funções de autocorrelação não sugerem uma estrutura de ARMA (ver acf(sales), pacf(sales)) e forecast::auto.arimanão escolher qualquer AR ou ordem MA.

require(forecast)
require(tsoutliers)
fit1 <- auto.arima(sales, d=0, D=0, ic="bic")
fit1
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept
#        81.3704
#s.e.     4.4070

No entanto, observe que o nulo de normalidade nos resíduos é rejeitado no nível de significância de 5%.

JarqueBera.test(residuals(fit1))[[1]]
#X-squared = 12.9466, df = 2, p-value = 0.001544

Nota adicional: JarqueBera.testé baseado na função jarque.bera.testdisponível no pacote tseries.

Incluindo o aditivo discrepante na observação 21 que é detectada com a tsoutliersnormalidade dos resíduos. Assim, a estimativa da interceptação e a previsão não são afetadas pela observação periférica.

res <- tsoutliers::tso(sales, types=c("AO", "TC", "LS"), 
  args.tsmethod=list(ic="bic", d=0, D=0))
res
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept     AO21
#        78.4231  79.5769
#s.e.     3.3885  17.6072
#sigma^2 estimated as 298.5:  log likelihood=-115.25
#AIC=236.49   AICc=237.54   BIC=240.38
#Outliers:
#  type ind time coefhat tstat
#1   AO  21 2:09   79.58  4.52
JarqueBera.test(residuals(res$fit))[[1]]
#X-squared = 1.3555, df = 2, p-value = 0.5077
javlacalle
fonte
11
n=12n