Comandos R para análises de séries temporais

5 - Ajuste de modelos Univariados - ARIMA

Modelo \(ARIMA(p,d,q)\) com o pacote fArma

O pacote fArma possui a função ArmaFit, que também possibilita o ajuste de modelos ARMA incompletos. A sintaxe padrão é do tipo:

armaFit(x~arma(p,q), data, method = c("mle", "ols"), include.mean = TRUE, fixed = NULL, title = NULL, description = NULL, ...)

  • (p,q) é a ordem do modelo;
  • include.mean = TRUE adiciona a constante no modelo;
  • Em method, se escolhe o método de estimação via Max. Verossimilhança ou Mínimos quadrados ordinários;
  • fixed é um vetor que contém NA na posição dos pâmetros a serem estimados. Por exemplo, se quisermos estimar um ARMA(p,q), com constante, teremos p+q+1 coeficientes a serem estimados e, consequentemente fixed será um vetor com p+q+1 posições, nas quais as p primeiras serão referentes aos coeficientes da parte AR, as posições p+1 até p+q serão referentes à parte MA e a posição p+q+1 será referente à constante. Para ilustrar, se quisermos um ARMA(3,3) com constante, como definido abaixo e sem os coeficientes de \(\phi_2 X_{t-2}\) e \(\theta_1 \epsilon_{t-1}\). Entao o meu vetor fixed deve ser fixed=c(NA,0,NA,0,NA,NA,NA). Para ficar mais claro, pode-se declarar: fixed=c(c(NA,0,NA),c(0,NA,NA),NA).

\[ (1-B)^3(X_t-\phi_0)=(1-B)^3\epsilon_t \]

Alternativamente, pode-se utilizar a função declarada a seguir. Veja a explicação sobre a estrutura do parâmetro coefs na declaração da função.

Fit_Arima<-function(formula,data=NULL,order,
                       coefs=NULL, include.mean=TRUE,...){
#Para definir os elementos 1-a-1 que serão estimados no modelo, defina:
#O parametro coefs é uma lista com dois argumentos:
# $ar : vetor contendo os coefs da parte AR que devem entrar no modelo
# $ma : vetor contendo os coefs da parte MA que devem entrar no modelo
# Por exemplo, se quisermos um modelo Y_t = a_5 Y_{t-5} + a_9 Y_{t-9} - b_2 e_{t-2} - b_4 e{t_4}
# coefs deverá ser definido por: coefs = list(ar=c(5,9),ma=c(2,4))

# Montando a estrutura do argumento 'fixed' para ser passado para a funcao 'arima'
fixed=NULL
  if(!is.null(coefs)){
    fixed<-rep(0,times=sum(order,include.mean))
    if(include.mean==TRUE){
    fixed[c(coefs$ar,order[1]+coefs$ma,length(fixed))]<-NA
    }
    else {
    fixed[c(coefs$ar,order[1]+coefs$ma)]<-NA
    }
  }
  fit<-armaFit(as.formula(formula), data=data, fixed=fixed, include.mean=include.mean,...)
  return(fit)
}

Outra alternativa para ajustar o modelo ARMA incompleto

inc.arima<-function(x,order=NULL,fixed=NULL,lag=NULL,name="Log-Retornos de X"){
if(!is.null(lag)){ 
  # vetor de zeros do tamanho do numero de parametros a serem estimados
    fixed<-rep(0,times=sum(order,1)) 
    # Preenchendo com 'NA' as posicoes dos parametros que desejamos que sejam estimados
    fixed[c(coefs$ar,order[1]+coefs$ma,length(fixed))]<-NA 
      fit<-arima(x,order=order,fixed=fixed) #Ajustando o modelo
      return(fit)
}

# Se o parametro `ccoefs` não for passado, entao ajusto o modelo completo.
fit<-arima(x,order=order)
return(fit)
}

Modelo \(ARIMA(p,d,q)\) com o pacote stats

arima(x, order = c(p,d,q))

Há ainda outros pacotes que possuem os algoritmos para estimação de modelos ARIMA implementados. Alternativamente, é possível por exemplo utilizar o pacote astsa ou o pacote tseries (veja Shumway and Stoffer, 2011 e Tsay, 2005).

Modelo \(SARIMA(p,d,q)\times(P,D,Q)_s\)

arima(x, order = c(p,d,q),
      seasonal = list(order = c(P,D,Q), period = s))