Exemplo completo – ARIMA Pacote forecast – R Dados carrinho de mão • Vendas de carrinho de mão • Série mensal 2 Acessando o pacote Digitar no R Console > library(forecast) ou Preparando os dados Mostra as seis primeiras colunas e/ou linhas > head(cm) Mostra as últimas seis… > tail (cm) Permite o acesso às variáveis de um conjunto de dados > attach(cm) Outra opção – utilizar o $ Exemplo – cm$cm Preparando a série • O comando ts – vai “transformar” a sua série de dados em uma série temporal. – ts (dados, frequency= frequencia da serie (12 para mensal, 4 para trimestral...), start=c(data de inicio),...) • start=c(2005) – janeiro de 2005 • start=c(2005,2) – fevereiro de 2005) • Ajuda? ?ts Explorando a série - gráficos plot(cm,type="b",pch=19,main="Vendas de carrinhos de mão") Nota: type= “b” – both (pontos e linhas) type=“l” – somente linhas pch = 19 – ponto cheio em preto Veja ?pch para opções Mostra numa única janela o gráfico da série temporal e os gráficos da ACF E PACF > tsdisplay(cm) Obs: Note que a série não apresenta autocorrelação. Complementando • Caso tenha interesse em construir gráficos de acf e pacf em separado: > acf (serie) >pacf(serie) Verificando a sazonalidade > seasonplot(cm) Plota um gráfico sazonal Verifique que a série não apresenta sazonalidade Estimando o modelo ARIMA A função auto.arima busca um modelo adequado aos dados. meu.modelo.1 é o nome que estamos dando ao modelo – que está sendo armazenado) A função summary retorna as estimativas dos parâmetros, critérios de informação, como o AIC e BIC, além de algumas medidas dos erros (dentro da amostra) meu.modelo.1<-auto.arima(cm) summary (meu.modelo.1) Veja que é um modelo AR O coeficiente AR1 é 0,6097 O erro padrão é 0,1061 O MAPE (erro absoluto médio – em %) é 30,091% Avaliando se o modelo é adequado: análise dos resíduos Verificar se não há nenhum padrão e nem presença de autocorrelação nos resíduos Faz um gráfico dos resíduos e das FAC e FACP dos resíduos > tsdisplay(meu.modelo.1$residuals) Plota gráficos dos resíduos padronizados, ACF dos resíduos e resultados do teste Ljung-Box > tsdiag(meu.modelo.1) Como podem ver, os resíduos não apresentam um padrão, nem autocorrelação e os p-valores estão ok Um resíduo (veja destaque) apresenta valor superior a 3 Periodograma acumulado >cpgram(meu.modelo.1$residuals) Verificando a normalidade dos resíduos Histograma dos resíduos >hist(meu.modelo.1$residuals) Gráfico de probabilidade normal > qqnorm(meu.modelo.1$residuals) > qqline(meu.modelo.1$residuals) Teste de normalidade Efetua o teste de normalidade Shapiro Wilk > shapiro.test(meu.modelo.1$residuals) Shapiro-Wilk normality test data: meu.modelo.1$residuals W = 0.9546, p-value = 0.02576 Efetuando as previsões Previsões para três meses adiante > previsao<-forecast(meu.modelo.1,h=3) Retorna a previsão pontual (Point Forecast) e os intervalos de 80% e 95% de confiança Plotando um gráfico com as previsões > plot(previsao) Em azul estão as previsões pontuais. Em cinza escuro o intervalo de 80% e em cinza claro o de 95% Plotando a série original, os valores ajustados, as previsões e os intervalos Calcula os valores ajustados pelo modelo > preditos<-fitted(meu.modelo.1) Plota esses valores no gráfico anterior, em azul > lines(preditos,col=4) Vendo o erro fora da amostra Inserindo um vetor com as vendas dos três primeiros meses de 2012 vendas<-c(706,813,1088) Transformando em série temporal > vendas<-ts(vendas,frequency=12,start=c(2010,1)) > vendas Jan Feb Mar 2010 706 813 1088 Calculando as medidas dos erros de previsão accuracy(previsao,vendas) OBS: accuracy (modelo) retorna o erro dentro da amostra Comparando com um modelo de suavização exponencial Estimando um modelo de suavização exponencial > meu.modelo.2<-ets(cm) > summary(meu.modelo.2) Efetuando as previsões (3 adiante) com o modelo 2 e verificando os erros de previsão Compare agora essas medidas com as do modelo.1 Medidas dos erros – dentro da amostra – para o modelo 1 e modelo 2 E, o gráfico... > plot(previsao.2) > preditos.2<-fitted(meu.modelo.2) > lines(preditos,col=4) Considerações finais • Neste exemplo vimos como utilizar os procedimentos automáticos do pacote forecast • Mas, nada substitui a análise feita por um pesquisador, com base nos gráficos e informações presentes • O modelo escolhido pode não ser o “melhor” modelo. • Sugiro verificarem a função arima (?arima) e Arima (?Arima) no R