Modelo autorregressivo de média móvel (ARMA)
O modelo ARMA(\(p,q\)) combina \(p\) termos autorregressivos e \(q\) termos de média móvel em um único framework. Ele é mais parcimonioso do que usar um modelo AR ou MA puro isoladamente: muitos processos que exigiriam um AR ou MA de ordem alta podem ser representados exata ou aproximadamente por um ARMA de ordem baixa. Ele se aplica apenas a séries estacionárias.
Definição
Os termos AR dependem de valores passados da própria \(y_t\), enquanto os termos MA dependem de erros de previsão passados \(\varepsilon_{t-i}\), combinados aqui em uma única equação:
\[y_t = \phi_1 y_{t-1} + \cdots + \phi_p y_{t-p} + \varepsilon_t + \theta_1 \varepsilon_{t-1} + \cdots + \theta_q \varepsilon_{t-q}\]
Em notação com operador de defasagem:
\[\Phi(L)\,y_t = \Theta(L)\,\varepsilon_t\]
\[\Phi(L) = 1 - \phi_1 L - \cdots - \phi_p L^p, \qquad \Theta(L) = 1 + \theta_1 L + \cdots + \theta_q L^q\]
O polinômio AR \(\Phi(L)\) atua sobre \(y_t\); o polinômio MA \(\Theta(L)\) atua sobre \(\varepsilon_t\).
Estacionariedade e inversibilidade
Um ARMA(\(p,q\)) é:
- Estacionário se todas as raízes de \(\Phi(z) = 0\) estiverem fora do círculo unitário (mesma condição do AR(\(p\)) puro).
- Inversível se todas as raízes de \(\Theta(z) = 0\) estiverem fora do círculo unitário (mesma condição do MA(\(q\)) puro).
- Identificável: não deve haver raízes comuns entre \(\Phi(z)\) e \(\Theta(z)\) (sem cancelamento). Se uma raiz é compartilhada, a ordem efetiva é menor e o modelo está superparametrizado.
⚠️ Cancelamento de fatores comuns: a armadilha da redundância de parâmetros
Se \(\Phi(z)\) e \(\Theta(z)\) compartilham uma raiz comum, o modelo verdadeiro é de ordem menor. Por exemplo, ARMA(2,1) com \(\phi_1 = 0{,}9\), \(\phi_2 = -0{,}2\), \(\theta_1 = 0{,}4\): se \(z = 0{,}5\) é raiz de ambos os polinômios, o modelo na verdade se reduz a ARMA(1,0). Ajustar o modelo superparametrizado produz erros padrão grandes e instabilidade.
Sintoma: se os coeficientes \(\phi\) e \(\theta\) ajustados têm magnitude semelhante com sinais opostos na mesma defasagem, suspeite de cancelamento. Verifique calculando as raízes de ambos os polinômios.
Por que o ARMA é mais parcimonioso
Pelo teorema de decomposição de Wold, qualquer processo estacionário pode ser representado como MA(\(\infty\)). Um ARMA(\(p,q\)) fornece uma aproximação racional usando apenas \(p+q\) parâmetros, em vez de infinitos.
Um exemplo clássico: a representação MA(\(\infty\)) de um AR(1) é:
\[y_t = \varepsilon_t + \phi\varepsilon_{t-1} + \phi^2\varepsilon_{t-2} + \cdots\]
que exige infinitos parâmetros MA. O ARMA(1,0) captura isso com apenas um parâmetro \(\phi\).
Reciprocamente, alguns processos que parecem ser AR ou MA de ordem alta ao examinar a ACF/PACF podem ser representados exatamente por um ARMA de ordem baixa. Essa é a principal motivação para usar ARMA em vez de AR ou MA puros.

Tanto a ACF quanto a PACF se atenuam gradualmente, confirmando a estrutura ARMA. Nenhuma das duas se corta abruptamente, razão pela qual identificar apenas AR ou MA exigiria ordens altas.
Seleção da ordem: AIC e BIC
Para ARMA(\(p,q\)), a identificação por ACF/PACF é menos clara do que para AR ou MA puros. A abordagem padrão é ajustar vários modelos candidatos e comparar por:
\[\text{AIC} = -2\log\hat{L} + 2(p+q+1), \qquad \text{BIC} = -2\log\hat{L} + \log(T)(p+q+1)\]

O mapa de calor mostra o AIC em uma grade de ordens AR e MA. AIC mais baixo (azul mais escuro) indica melhor ajuste, penalizado pela complexidade. A borda vermelha marca o melhor modelo. Modelos de ordem alta no canto superior direito mostram AIC pior, mesmo com mais parâmetros.
Exemplo: ARMA(1,1) para vendas mensais
Dados de vendas mensais costumam exibir tanto persistência (componente AR) quanto correção após erros de previsão (componente MA). Um ARMA(1,1) captura ambos com apenas dois parâmetros.

A ACF dos resíduos não mostra picos significativos: o ARMA(1,1) capturou a estrutura de autocorrelação. Confirme com o teste de Ljung-Box: Box.test(residuals(fit), lag = 20, type = "Ljung-Box", fitdf = 2).
💡 Ajustando modelos ARMA em R
# Fit ARMA(1,1)
fit <- arima(y, order = c(1, 0, 1))
summary(fit)
# Automatic selection by AIC
library(forecast)
auto.arima(y, d = 0, max.p = 4, max.q = 4, stationary = TRUE)
# Check residuals
checkresiduals(fit) # plots residuals, ACF and Ljung-Box p-value