Séries Temporais - Trabalho 1

Helen Lourenço

2024-09-20

Características da Série Temporal

1)

# a) 
n <- 500
set.seed(123)
ruido_branco <- rnorm(n)

acf_amostral <- acf(ruido_branco, lag.max = 20, plot = FALSE)

plot(acf_amostral, main = "ACF Amostral")

A amostra representa muito bem a ACF real, que é 0.

# b) 
n2 <- 50
set.seed(123)
ruido_branco2 <- rnorm(n2)

acf_amostral2 <- acf(ruido_branco2, lag.max = 20, plot = FALSE)

plot(acf_amostral2, main = "ACF Amostral")

Diminuir o tamanho da amostra faz com que o intervalo ao redor de zero seja maior (menos preciso).

2)

n <- 100
w <- rnorm(n+50)

x <- filter(w, filter = c(0,-.9), method = "recursive")[-(1:50)]

acf_amostral <- acf(x, lag.max = 20, plot = FALSE)

plot(acf_amostral, main = "ACF Amostral")
grid()

A ACF indica um padrão sazonal decrescente entre as observações.

Análise Exploratória de Dados

3)

par(mar=c(4,4,3,1))
plot(log(jj), type="o", xlab="Tempo", ylab="Lucro trimestral por ação", pch=19, 
     main="Johnson & Johnson ganhos trimestrais por ação\n 84 trimestres, 1960-I a 1980-IV", col = "darkgrey")
grid()

# a)

ajuste <- lm(log(jj)~0+time(jj)+factor(cycle(jj)), na.action = NULL)
summary(ajuste)
## 
## Call:
## lm(formula = log(jj) ~ 0 + time(jj) + factor(cycle(jj)), na.action = NULL)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.29318 -0.09062 -0.01180  0.08460  0.27644 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## time(jj)            1.672e-01  2.259e-03   74.00   <2e-16 ***
## factor(cycle(jj))1 -3.283e+02  4.451e+00  -73.76   <2e-16 ***
## factor(cycle(jj))2 -3.282e+02  4.451e+00  -73.75   <2e-16 ***
## factor(cycle(jj))3 -3.282e+02  4.452e+00  -73.72   <2e-16 ***
## factor(cycle(jj))4 -3.284e+02  4.452e+00  -73.77   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1254 on 79 degrees of freedom
## Multiple R-squared:  0.9935, Adjusted R-squared:  0.9931 
## F-statistic:  2407 on 5 and 79 DF,  p-value: < 2.2e-16
# b) ~18%

exp(ajuste$coefficients[1])
## time(jj) 
## 1.181958
# c) A taxa de lucro média aumenta em ~7,26%

dif <- coef(ajuste)[4] - coef(ajuste)[3] 
(exp(dif) - 1)*100
## factor(cycle(jj))3 
##           7.262434

A inclusão de um intercepto no modelo causa um problema de multicolinearidade, uma vez que ele seria linearmente dependente dos coeficientes de sazonalidade.

# e)

# Valores ajustados
plot(log(jj), type="o", xlab="Tempo", ylab="Lucro trimestral por ação", pch=19, 
     main="Johnson & Johnson ganhos trimestrais por ação\n 84 trimestres, 1960-I a 1980-IV", col = "darkgrey")

lines(fitted(ajuste), col = "steelblue", type = "o")

# Resíduos
plot(resid(ajuste));grid()

acf(resid(ajuste));grid()

Apesar do modelo se ajustar bem aos dados, os resíduos não parecem ser apenas ruído branco (a ACF tem um padrão decrescente).

4)

# a)

par(mar=c(4,4,3,1))

plot(oil, type="o", xlab="Tempo", ylab="Dólares por Barril / Centavos por Galão", pch=19, 
     main="", ylim = c(20,340), col = "darkgrey")
grid()

lines(gas, type="o", xlab="Tempo", ylab="", pch=19, 
     main="", add=T, col = "steelblue")

legend("topleft", legend=c("oil", "gas"), 
       col=c("darkgrey", "steelblue"), pch=19, lty=1)

Como os dados apresentam um padrão crescente com o passar do tempo, as séries não parecem ser estacionárias.

  1. Um aumento de R$ 2 em R$ 100 (2%) pode ter um impacto diferente do que um aumento de R$2 em R$10 (20%), acredito que essa seja a preocupação do exercício e da economia.
# c)

par(mar=c(4,4,3,1))

plot(diff(log(oil)), type="o", xlab="Tempo", ylab="", pch=19, 
     main="", ylim=c(-0.4,0.4), col = "darkgrey")
grid()

lines(diff(log(gas)), type="o", xlab="Tempo", ylab="", pch=19, 
      main="", add=T, col = "steelblue")

legend("topleft", legend=c("oil", "gas"), 
       col=c("darkgrey", "steelblue"), pch=19, lty=1)

acf(diff(log(oil)), main="ACF oil")

acf(diff(log(gas)), main="ACF gas")

A tendência crescente dos dados não é mais aparente e as séries parecem ser estacionárias.

# d)

ccf(diff(log(oil)), diff(log(gas)), main="CCF")

As correlações estão distribuídas de maneira relativamente simétrica em torno de zero, sugerindo que não há uma relação forte entre as duas séries temporais.

# e)

par(mfrow=c(2,2))

x <- diff(log(oil))
y <- diff(log(gas))

plot(x, y, pch=19, xlab="oil", ylab="gas", main = "Geral", xlim=c(-0.6,0.6), ylim = c(-1,1))
lines(lowess(x, y, f=0.05), lwd=2, col=4)
lines(lowess(x, y), lty=2, lwd=2, col=2)

x1 <- diff(log(oil), lag = 7)
y1 <- diff(log(gas), lag = 7)

plot(x1, y1, pch=19, xlab="oil", ylab="gas", main = "Uma semana", xlim=c(-0.6,0.6), ylim = c(-1,1))
lines(lowess(x1, y1, f=0.05), lwd=2, col=4)
lines(lowess(x1, y1), lty=2, lwd=2, col=2)

x2 <- diff(log(oil), lag = 14)
y2 <- diff(log(gas), lag = 14)

plot(x2, y2, pch=19, xlab="oil", ylab="gas", main = "Duas semanas", xlim=c(-0.6,0.6), ylim = c(-1,1))
lines(lowess(x2, y2, f=0.05), lwd=2, col=4)
lines(lowess(x2, y2), lty=2, lwd=2, col=2)

x3 <- diff(log(oil), lag = 21)
y3 <- diff(log(gas), lag = 21)

plot(x3, y3, pch=19, xlab="oil", ylab="gas", main = "Três semanas", xlim=c(-0.6,0.6), ylim = c(-1,1))
lines(lowess(x3, y3, f=0.05), lwd=2, col=4)
lines(lowess(x3, y3), lty=2, lwd=2, col=2)

As relação dos dados parece ser linear, com alguns pontos que se distanciam dos outros, principalmente o ponto no primeiro gráfico do lado direito, que acaba “puxando” o suavizador pra baixo.

# f)

# i)
poil = diff(log(oil))
pgas = diff(log(gas))
indi = ifelse(poil < 0, 0, 1)
mess = ts.intersect(pgas, poil, poilL = lag(poil,-1), indi)
summary(fit <- lm(pgas~ poil + poilL + indi, data=mess))
## 
## Call:
## lm(formula = pgas ~ poil + poilL + indi, data = mess)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.18451 -0.02161 -0.00038  0.02176  0.34342 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.006445   0.003464  -1.860  0.06338 .  
## poil         0.683127   0.058369  11.704  < 2e-16 ***
## poilL        0.111927   0.038554   2.903  0.00385 ** 
## indi         0.012368   0.005516   2.242  0.02534 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.04169 on 539 degrees of freedom
## Multiple R-squared:  0.4563, Adjusted R-squared:  0.4532 
## F-statistic: 150.8 on 3 and 539 DF,  p-value: < 2.2e-16

Crescimento negativo no preço do petróleo:

\[\hat{G_t} = -0,006 + 0,683 \cdot O_t+0,112 \cdot O_{t-1}\]

Quando não há crescimento positivo no preço do petróleo:

\[\hat{G_t} = -0,006 + 0,683 \cdot O_t+0,112 \cdot O_{t-1} + 0,012\]

Esses resultados indicam assimetria, uma vez que o efeito no preço da gasolina muda conforme a direção do crescimento do preço do petróleo.

# iii)
plot(resid(fit));grid()

acf(resid(fit));grid()

Os resíduos estão muito bem distribuídos ao redor de zero e a ACF indica claramente que eles são apenas ruído branco.