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.
- 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.