Comandos R para análises de séries temporais

2 - Análise exploratória e manipulação:

Para transformar o argumento principal (data) em um objeto da classe ts:

ts(data = NA, start = 1, end = numeric(), frequency = 1,
   deltat = 1, ts.eps = getOption("ts.eps"), class = , names = )

Para calcular estatísticas descritivas da série:

summary(object, ..., digits = max(3, getOption("digits")-3))

Desvio padrão, Assimetria e Curtose:

 sd(x, na.rm = FALSE) #Desvio Padrão
 skewness(x, na.rm = FALSE, type = 3) # Assimetria
 kurtosis(x, na.rm = FALSE, type = 3) # Curtose
 # OBS: Desvio Padrao. Se a série possuir valores missing, coloque na.rm=TRUE

Variância, Covariância e Correlação

var(x, y = NULL, na.rm = FALSE, use)

cov(x, y = NULL, use = "everything",
    method = c("pearson", "kendall", "spearman"))

cor(x, y = NULL, use = "everything",
    method = c("pearson", "kendall", "spearman"))

Para tomar a diferença da série, i.e., cria um novo objeto \(Y_t=X_t-X_{t-1}\):

diff(x, lag = 1, differences = 1, ...)

Quantis observados de X:

quantile(x, ...)

3 - Gráficos

Para imprimir gráficos em um painel com a linhas e b colunas, com a e b inteiros positivos:

par(mfrow=c(a,b))

Gráficos da série:

ts.plot(..., gpars = list())  # Gráfico da Serie
hist(x, ...) # Histograma da Série

Para imprimir o gráfico da distribuição Normal sobre a figura do histograma, faça:

curve(dnorm(x, mean = mean(x), sd=sd(x)),add=T)

O mesmo vale se desejar imprimir a curva de outras distribuições, substibuindo dnorm pela distribuição desejadas e modificando os parâmetros da distribuição de forma conveniente.

Gráfico Quantil-Quantil para distribuição Normal:

qqnorm(y, ylim, main = "Normal Q-Q Plot",
       xlab = "Theoretical Quantiles", ylab = "Sample Quantiles",
       plot.it = TRUE, datax = FALSE, ...) 

Comando para adicionar linha central no QQplot:

qqline(y, datax = FALSE, distribution = qnorm,
       probs = c(0.25, 0.75), qtype = 7, ...) 

Esta função imprime graficos QQ não necessariamente Normais. Neste exemplo, temos um grafico QQ para um distribuição t com 5 graus de liberdade:

qqplot(y, rt(300, df = 5))

Exemplos de modificações nos gráficos de ACF e PACF:

acf0<-function(x,na.action=na.pass,lags=1:36,...){
  #lags:horizonte dos lags
  plot(acf(x,na.action=na.action,plot=F)[lags],lwd=5,lend=2,col="darkblue",...)
  axis(1, tck = 1, col = "lightgrey", lty = "dotted")
}

name="Série de log-Retornos X"
par(mfrow=c(1,2))
acf0(x, na.action = na.pass,main=paste("ACF:",name))
pacf(x, na.action = na.pass,main=paste("PACF:",name),lwd=5,lend=2,col="darkblue")

Exemplo de saída dos gráficos:

4 - Testes:

Teste t:

t.test(x, y = NULL,
       alternative = c("two.sided", "less", "greater"),
       mu = 0, paired = FALSE, var.equal = FALSE,
       conf.level = 0.95, ...)

Box-Pierce | Ljung-Box (pacote stats):

Box.test(x, lag = 1, type = c("Box-Pierce", "Ljung-Box"), fitdf = 0)

Box-Pierce | Ljung-Box (pacote FitAR):

#LBQPlot(res, lag.max = 30)
### res é a série que temos interesse de realizar os testes
### lag.max é o número de lags que se deseja imprimir o gráfico
library(FitAR)
### Exemplo com 1000 observações geradas de uma normal(0,1)
res<-rnorm(1000, mean=0,sd=1)
LBQPlot(res,15)

Testes de Normalidade:

#### Utilizando a library `tseries`:
jarque.bera.test(x)

#### Utilizando a library `fBasics`:
ksnormTest(x, title = NULL, description = NULL)
jbTest(x, title = NULL, description = NULL)
shapiroTest(x, title = NULL, description = NULL)
normalTest(x, method = c("sw", "jb"), na.rm = FALSE)
jarqueberaTest(x, title = NULL, description = NULL)
dagoTest(x, title = NULL, description = NULL)
adTest(x, title = NULL, description = NULL)
cvmTest(x, title = NULL, description = NULL)
lillieTest(x, title = NULL, description = NULL)
pchiTest(x, title = NULL, description = NULL)
sfTest(x, title = NULL, description = NULL)

Testes de Raizes Unitárias

Testes de Dickey-Fuller utilizando o pacote tseries

### Testes de Dickey-Fuller
adf.test(x, lags = 1, type = c("nc", "c", "ct"), title = NULL, 
    description = NULL)
# 'lags' define o número de raízes unitarias a serem testadas
# 'type' Define o tipo de teste a ser realizado:
# 'nc' : Teste de Dickey-Fuller usual (Estatistica Tau)
# 'c'  : Teste de Dickey-Fuller Aumentado, com constante (Estatistica Tau_mu)
# 'ct' : Teste de Dickey-Fuller Aumentado, com constante e tendencia (Estatistica Tau_tau)

Teste de Philips-Perron (usando o pacote tseries)

pp.test(x, alternative = c("stationary", "explosive"),
        type = c("Z(alpha)", "Z(t_alpha)"), lshort = TRUE)
# 'alternative' define a Hipótese alternativa do teste
# 'stationary' : define H1: Phi < 1
# 'explosive'  : define H1: Phi > 1
#