Thiago Noronha Gardin, C358423
Prof: Manoel Pires
Orientações: Na prova deverá constar nome e matrícula do estudante. A
prova é individual e deve ser feita à mão ou de forma digital, mas
deverá estar bem legível. As provas deverão ser entregues até o dia
24/11. No caso de questões analíticas, o aluno deverá desenvolver o
raciocínio e álgebra da questão. No caso de exercícios econométricos, é
necessário que os resultados sejam reportados de forma completa e
interpretados. Os exercícios do livro do Enders se referem à numeração
utilizada na 4ª edição. Os dados para realização dos exercícios estão
disponíveis no e-class da turma. Outras edições podem ter numeração
distinta. Boa prova.
library(readxl)
library(tseries)
library(forecast)
library(dplyr)
library(tidyverse)
library(dynlm)
library(stargazer)
library(strucchange)
Queremos demonstrar que é possível expressar \(m_{t+n}\) em termos do valor conhecido \(m_t\) e da sequência \(\{\varepsilon_{t+1}, \varepsilon_{t+2}, \dots, \varepsilon_{t+n}\}\).
Aplicando um raciocionio de recursividade podemos observar que para \(n = 1\), temos que:
\[ m_{t+1} = m + \rho m_t + \varepsilon_{t+1} \]
Substituindo \(m_t\) por \(m + \rho m_{t-1} + \varepsilon_t\), obtemos:
\[ m_{t+1} = m + \rho (m + \rho m_{t-1} + \varepsilon_t) + \varepsilon_{t+1} \]
Que expandindo será:
\[ m_{t+1} = m + \rho m + \rho^2 m_{t-1} + \rho \varepsilon_t + \varepsilon_{t+1} \]
Substituímos iterativamente \(m_{t+n-1}\), \(m_{t+n-2}\), e assim por diante. Após \(n\) iterações, obtemos:
\[ m_{t+n} = m \sum_{k=0}^n \rho^k + \rho^n m_t + \sum_{i=1}^n \rho^{n-i} \varepsilon_{t+i} \]
Finalmente, temos que a soma \(\sum_{k=0}^n \rho^k\) é uma soma finita de uma série geométrica, dado que \(0 < \rho < 1\), podemos escrevê-la como:
\[ \sum_{k=0}^n \rho^k = \frac{1 - \rho^{n+1}}{1 - \rho} \]
Substituindo essa soma na equação para \(m_{t+n}\), temos:
\[ m_{t+n} = m \frac{1 - \rho^{n+1}}{1 - \rho} + \rho^n m_t + \sum_{i=1}^n \rho^{n-i} \varepsilon_{t+i} \]
Dessa forma, podesse expressar \(m_{t+n}\) em termos do valor conhecido \(m_t\) e da sequência \(\{\varepsilon_{t+1}, \varepsilon_{t+2}, \dots, \varepsilon_{t+n}\}\). A equação final é:
\[
m_{t+n} = m \frac{1 - \rho^{n+1}}{1 - \rho} + \rho^n m_t + \sum_{i=1}^n
\rho^{n-i} \varepsilon_{t+i}
\]
Dada a premissa, de qye o valor esperado de \(ε_{t+i} = 0\) ,a previsão de \(m_{t+n}\) poderia se orientar para a parte determinística da equação na qual é baseada nos valores de t e e em m, assim: \[ E[m_{t+n}] = m \frac{1 - \rho^{n+1}}{1 - \rho} + \rho^n m_t \]
Restando assim apenas dois termos deterministicos, o primeiro que reflete a média de lomgo prazo ajustada pela convergência e o segundo tempor que reflete a persistencia do valor inicial com decaimento(que tende a 0 no limite). Assim o valor esperado de \(m_{t+n}\) seria simplesmente a soma dos componentes determinísticos, como os choques teriam média 0 e não contribuiriam para a previsão.
Exercises with indprod.
i . Construct the growth rate of the series as yt = log(indprodt) − log(indprodt−1). Since the first few autocorrelations suggest an AR(1), estimate yt = 0.0028 + 0.600yt−1 + εt (the t-statistics are 2.96 and 10.95, respectively).
ii . Show that adding an AR term at lag 8 improves the fit and removes some of the serial correlation. What concerns do you have about simply adding an AR(‖8‖) term to the industrial production series?
Since the first few autocorrelations suggest an AR(1), estimate yt = 0.0028 + 0.600yt−1 + εt (the t-statistics are 2.96 and 10.95, respectively).
1º Passo: Construção da serie da taxa de crescimento da serie
qt <- read_excel("Quarterly1.xls")
unemp<-log(qt$Unemp)-log(lag(qt$Unemp)) %>% ts(start =1960,frequency = 4) #%>% drop_na()
unemp[2:212] %>% summary()
Min. 1st Qu. Median Mean 3rd Qu. Max.
-0.096440 -0.029110 -0.008451 0.002004 0.023345 0.225565
unemp %>% autoplot + ggtitle("Serie Temporal da taxa de Crescimento")
2º Passo Averiguar Autocorrelação temporal
unemp[2:212] %>% Acf(plot =FALSE) %>% autoplot()+ labs(title = "Função de Autocorrelação da Temporal da taxa de Crescimento")
unemp[2:212] %>% Pacf(plot =FALSE)%>% autoplot()+ labs(title = "Função de Autocorrelação parcial da Temporal da taxa de Crescimento")
A ACF sugere que a série pode ser modelada adequadamente com um modelo \(AR(1)\), já que o decaimento das autocorrelações ocorre rapidamente, podem há uma correlação no 2º e 8º lag. A PACF reforça a conclusão de que um modelo AR(1) é apropriado para capturar a dependência da série.
3º Passo: Estimar \(AR(1)\)
unemp %>% Arima(order = c(1, 0,0))->ar1
ar1%>% summary
Series: .
ARIMA(1,0,0) with non-zero mean
Coefficients:
ar1 mean
0.6487 0.0020
s.e. 0.0520 0.0076
sigma^2 = 0.001558: log likelihood = 383.36
AIC=-760.72 AICc=-760.6 BIC=-750.66
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -8.88872e-05 0.03927782 0.03023091 NaN Inf 0.5740239 -0.002834366
#Verificando a distribuição dos resíduos
residuos <- ar1$residuals
shapiro.test(residuos)
Shapiro-Wilk normality test
data: residuos
W = 0.9646, p-value = 3.962e-05
forecast::checkresiduals(ar1)
Ljung-Box test
data: Residuals from ARIMA(1,0,0) with non-zero mean
Q* = 21.517, df = 7, p-value = 0.003076
Model df: 1. Total lags used: 8
O modelo Indica um coeficiente AR1 significativo de de 0.6486, indicando estacionariodade da serie sendo \(AR(1)<1\). Os residuos mostram normalidade nos residuos, porém tem uma função de correlação significativa para um lag 4 e 8.
What concerns do you have about simply adding an AR(‖8‖) term to the industrial production series?
Estimando o modelo \(AR(8)\),\(AR(4)\) e o \(AR(2)\):
unemp %>% Arima(order = c(2, 0,0))->ar2
ar2%>% summary
Series: .
ARIMA(2,0,0) with non-zero mean
Coefficients:
ar1 ar2 mean
0.6427 0.0091 0.0020
s.e. 0.0686 0.0688 0.0077
sigma^2 = 0.001565: log likelihood = 383.37
AIC=-758.73 AICc=-758.54 BIC=-745.33
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -9.323455e-05 0.03927619 0.03020452 NaN Inf 0.5735228 0.003425516
unemp %>% Arima(order = c(4, 0,0))->ar4
ar4%>% summary
Series: .
ARIMA(4,0,0) with non-zero mean
Coefficients:
ar1 ar2 ar3 ar4 mean
0.6364 0.0365 0.0912 -0.1948 0.0017
s.e. 0.0673 0.0802 0.0806 0.0681 0.0061
sigma^2 = 0.001518: log likelihood = 387.49
AIC=-762.98 AICc=-762.56 BIC=-742.86
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 7.8184e-05 0.03850216 0.02957847 NaN Inf 0.5616354 0.007660828
unemp %>% Arima(order = c(8, 0,0))->ar8
ar8%>% summary
Series: .
ARIMA(8,0,0) with non-zero mean
Coefficients:
ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8 mean
0.6255 0.0829 0.0616 -0.2605 -0.0028 0.1463 0.0915 -0.2603 0.0021
s.e. 0.0662 0.0790 0.0787 0.0794 0.0789 0.0787 0.0792 0.0677 0.0050
sigma^2 = 0.001425: log likelihood = 395.9
AIC=-771.8 AICc=-770.7 BIC=-738.28
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 8.006676e-06 0.036941 0.02766273 NaN Inf 0.5252594 0.02599808
forecast::checkresiduals(ar2)
Ljung-Box test
data: Residuals from ARIMA(2,0,0) with non-zero mean
Q* = 21.518, df = 6, p-value = 0.00148
Model df: 2. Total lags used: 8
forecast::checkresiduals(ar4)
Ljung-Box test
data: Residuals from ARIMA(4,0,0) with non-zero mean
Q* = 16.715, df = 4, p-value = 0.002195
Model df: 4. Total lags used: 8
forecast::checkresiduals(ar8)
Ljung-Box test
data: Residuals from ARIMA(8,0,0) with non-zero mean
Q* = 8.3177, df = 3, p-value = 0.03988
Model df: 8. Total lags used: 11
O resíduos dos modelos \(AR(2)\) e \(AR(4)\) apresentaram autocorrelação significativa no 8º lag,justificando a inclusão do termo \(AR(8)\), para testar sua relevância.O \(AR(2)\) não apresentou coeficientes AR2 significativos, já o \(AR(4)\) mostrou AR4 ligeiramente significativo. Mas, o modelo \(AR(8)\) apresentou alguns coeficientes significativos (AR1,AR4,AR8).
data.frame(
Model = c("ARMA(1)", "ARMA(2)","ARIMA(4)", "ARMA(8)"),
AIC = c(AIC(ar1), AIC(ar2), AIC(ar4),AIC(ar8)),
BIC = c(BIC(ar1), BIC(ar2), BIC(ar4),BIC(ar8)),
RMSE = c(accuracy(ar1)[2], accuracy(ar2)[2],accuracy(ar4)[2], accuracy(ar8)[2]),
MAE = c(accuracy(ar1)[3], accuracy(ar2)[3],accuracy(ar4)[3], accuracy(ar8)[3])
)
NA
Observando os Indicadores de qualidade o modelo, O \(AR(8)\) tem o menor Critério de Akaike (AIC) (−771.8), e erro residual (\(𝜎^2=0.001425\)), indicando o melhor ajuste entre os modelos, porém o modelo tem o maior Critério Bayesiano (BIC) (-738.2829 ), que penaliza mais a complexidade do modelo. Embora o \(AR(8)\) tenha apresentado o melhor ajuste em termos de AIC e \(𝜎^2\), sua maior complexidade e a baixa significância de vários coeficientes podem limitar sua utilidade prática. Assim dependendo a finalidade, um modelo mais simples, como AR(1), pode ser preferível dependendo do objetivo da análise.
1º Passo: Construir Serie:
y_break <- read_excel("y_break.xlsx")
New names:
y_break$Y_break %>% ts %>% autoplot()
2º Passo: Realizar Teste de Raiz Unitária
adf_test <-y_break$Y_break %>% ts %>% adf.test(alternative = "stationary")
kpss_test <- kpss.test(y_break_ts, null = "Level", lshort = TRUE)
Warning: p-value smaller than printed p-value
adf_test
Augmented Dickey-Fuller Test
data: .
Dickey-Fuller = -2.3747, Lag order = 5, p-value = 0.4203
alternative hypothesis: stationary
kpss_test
KPSS Test for Level Stationarity
data: y_break_ts
KPSS Level = 2.2868, Truncation lag parameter = 4, p-value = 0.01
Para o Teste KPSS temos um p-valor de 0.01, logo rejeitamos a hipótese de estacionáriadade. O mesmo é reforçado, no Teste Dickey-Fuller com um p-valor de 0.4203, não rejeitamos a hipótese nula (\(H_0\)) de que a série possui uma raiz unitária. Isso implica que a série como esta não é estacionária.
3º Passo: Realizar Teste de Quebra Estrutural de Chow e Perron para identificar ponto de quebra
# Teste supF
sctest(y_break_ts ~ 1, type = "Chow")
Chow test
data: y_break_ts ~ 1
F = 137.94, p-value < 2.2e-16
No teste de Chow o p-valor encontrado é muito baixo, indicando que devemos rejeitamos a hipótese nula de que não há quebras estruturais, Portanto, há evidência de uma quebra estrutural significativa na série. Assim, seguimos ao teste de Perron para identificar o melhor candidato ao ponto de quebra.
y_break_ts <-y_break$Y_break %>% ts
breaks <- breakpoints(y_break_ts ~ 1)
summary(breaks)
Optimal (m+1)-segment partition:
Call:
breakpoints.formula(formula = y_break_ts ~ 1)
Breakpoints at observation number:
m = 1 100
m = 2 73 102
m = 3 73 102 124
m = 4 22 73 102 124
m = 5 22 44 73 102 124
Corresponding to breakdates:
m = 1 100
m = 2 73 102
m = 3 73 102 124
m = 4 22 73 102 124
m = 5 22 44 73 102 124
Fit:
m 0 1 2 3 4 5
RSS 1410.7 230.9 218.5 211.1 209.0 206.0
BIC 771.9 510.4 512.2 517.0 525.6 533.4
pelo resultado do teste, foi identificada o ponto de quebra na observação 100.
y_break_ts <- ts(y_break$Y_break)
autoplot(y_break_ts) +
geom_vline(xintercept = 100, linetype = "dashed", color = "red") +
ggtitle("Série Y_break com Ponto de Quebra")
Dessa forma, podemos fazer um teste de estacionáridade a partir ponto de quebra para corroborar a hipotese. Assim,a série foi dividida em dois segmentos
segment1 <- window(y_break_ts, end = 100)
segment2 <- window(y_break_ts, start = 101)
adf_test_seg1 <- adf.test(segment1,alternative = "stationary")
adf_test_seg2 <- adf.test(segment2,alternative = "stationary")
kpss_test_seg1 <- kpss.test(segment1, null = "Level", lshort = TRUE)
Warning: p-value greater than printed p-value
kpss_test_seg2 <- kpss.test(segment2, null = "Level", lshort = TRUE)
Warning: p-value greater than printed p-value
adf_test_seg1
Augmented Dickey-Fuller Test
data: segment1
Dickey-Fuller = -4.0134, Lag order = 4, p-value = 0.01139
alternative hypothesis: stationary
adf_test_seg2
Augmented Dickey-Fuller Test
data: segment2
Dickey-Fuller = -3.5132, Lag order = 3, p-value = 0.04924
alternative hypothesis: stationary
kpss_test_seg1
KPSS Test for Level Stationarity
data: segment1
KPSS Level = 0.28801, Truncation lag parameter = 4, p-value = 0.1
kpss_test_seg2
KPSS Test for Level Stationarity
data: segment2
KPSS Level = 0.11502, Truncation lag parameter = 3, p-value = 0.1
a partir dos resultados podemos ver que separadamente, podemos confirmar a estacionáriadade para cada segmento dadi que o teste Dickey-Fuller teve um p-valor<0.05 , e, inversamente, o KPSS teve um p-valor alto.
4º Passo: Interpretar os Resultados
Os resultados indicam que a série, como um todo, não é estacionária, como apontado pelo teste ADF, sugerindo dinâmicas não estacionárias relacionadas à presença de uma quebra estrutural. O teste de Chow confirma essa quebra no ponto 100, evidenciando uma mudança significativa no comportamento da série, em linha com a simulação proposta. A análise segmentada revela que os coeficientes do modelo mudam entre os regimes, refletindo dinâmicas distintas nos dois segmentos da série. Ambos os segmentos, no entanto, apresentam estacionariedade individual, permitindo que sejam modelados separadamente como processos estacionários distintos, cada um com sua própria estrutura.
\(gfr=β_0+ β_1 pe_t + β2 ww2_t + β3 pill_t\)
Fertil3 <- read_excel("Fertil3.xlsx")
New names:
dynlm(GFR ~PE+ww2+pill,Fertil3) ->mod
stargazer(mod,type = "text")
Warning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: length of NULL cannot be changed
===============================================
Dependent variable:
---------------------------
GFR
-----------------------------------------------
PE 0.083***
(0.030)
ww2 -24.238***
(7.458)
pill -31.594***
(4.081)
Constant 98.682***
(3.208)
-----------------------------------------------
Observations 72
R2 0.473
Adjusted R2 0.450
Residual Std. Error 14.685 (df = 68)
F Statistic 20.378*** (df = 3; 68)
===============================================
Note: *p<0.1; **p<0.05; ***p<0.01
observando o coeficiente PE desse modelo, implicaria que a Dedução de Impostos tem um efeito positivo e significativo sobre a taxa de fertilidade.
mod_l1<-dynlm(GFR ~L(PE,1)+ww2+pill,Fertil3 %>% zoo())
mod_l2<-dynlm(GFR ~L(PE,2)+ww2+pill,Fertil3 %>% zoo())
mod_l12<-dynlm(GFR ~L(PE,1)+L(PE,2)+ww2+pill,Fertil3%>% zoo())
mod_l012<-dynlm(GFR ~PE+L(PE,1)+L(PE,2)+ww2+pill,Fertil3%>% zoo())
stargazer::stargazer(mod_l1,mod_l2,mod_l12,mod_l012,type = "text")
Warning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: number of rows of result is not a multiple of vector length (arg 2)Warning: number of rows of result is not a multiple of vector length (arg 2)
===============================================================================================================
Dependent variable:
-------------------------------------------------------------------------------------------
GFR
(1) (2) (3) (4)
---------------------------------------------------------------------------------------------------------------
PE 0.073
(0.126)
L(PE, 1) 0.086*** 0.046 -0.006
(0.028) (0.126) (0.156)
L(PE, 2) 0.093*** 0.048 0.034
(0.027) (0.123) (0.126)
ww2 -20.716*** -16.472** -18.471** -22.127**
(6.991) (6.669) (8.634) (10.732)
pill -31.403*** -31.256*** -31.275*** -31.305***
(4.024) (3.934) (3.961) (3.982)
Constant 97.795*** 96.438*** 96.297*** 95.870***
(3.159) (3.138) (3.182) (3.282)
---------------------------------------------------------------------------------------------------------------
Observations 71 70 70 70
R2 0.481 0.495 0.496 0.499
Adjusted R2 0.458 0.472 0.465 0.459
Residual Std. Error 14.457 (df = 67) 14.104 (df = 66) 14.197 (df = 65) 14.270 (df = 64)
F Statistic 20.713*** (df = 3; 67) 21.558*** (df = 3; 66) 15.990*** (df = 4; 65) 12.728*** (df = 5; 64)
===============================================================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
Ambos os lags \(L(PE,1), L(PE,2))\) são significativos nos modelos com um ou dois lags. Porém, nos modelos conjuntos o PE com lag não presenta um coeficiente significativo, indicando que pode haver uma autocorreção entre os lags.
# Adicionar uma variável de tendência ao modelo
mod_l0t<-dynlm(GFR~ trend(GFR)+PE+ww2+pill,Fertil3 %>% zoo())
mod_l1t<-dynlm(GFR~ trend(GFR)+L(PE,1)+ww2+pill,Fertil3 %>% zoo())
mod_l2t<-dynlm(GFR ~trend(GFR)+L(PE,2)+ww2+pill,Fertil3 %>% zoo())
mod_l12t<-dynlm(GFR ~trend(GFR)+L(PE,1)+L(PE,2)+ww2+pill,Fertil3%>% zoo())
mod_l012t<-dynlm(GFR ~trend(GFR)+PE+L(PE,1)+L(PE,2)+ww2+pill,Fertil3%>% zoo())
stargazer::stargazer(mod_l0t,mod_l1t,mod_l2t,mod_l12t,mod_l012t,type = "text")
Warning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: number of rows of result is not a multiple of vector length (arg 2)Warning: number of rows of result is not a multiple of vector length (arg 2)
======================================================================================================================================
Dependent variable:
------------------------------------------------------------------------------------------------------------------
GFR
(1) (2) (3) (4) (5)
--------------------------------------------------------------------------------------------------------------------------------------
trend(GFR) -1.150*** -1.028*** -1.020*** -1.034*** -1.106***
(0.188) (0.190) (0.192) (0.193) (0.193)
PE 0.279*** 0.193*
(0.040) (0.105)
L(PE, 1) 0.246*** 0.094 -0.041
(0.038) (0.106) (0.127)
L(PE, 2) 0.246*** 0.159 0.128
(0.037) (0.105) (0.105)
ww2 -35.592*** -23.710*** -12.858** -16.856** -26.445***
(6.297) (5.889) (5.650) (7.232) (8.805)
pill 0.997 -2.298 -2.659 -2.296 -0.377
(6.262) (6.350) (6.312) (6.336) (6.307)
Constant 111.769*** 110.855*** 109.970*** 109.874*** 109.678***
(3.358) (3.584) (3.665) (3.673) (3.608)
--------------------------------------------------------------------------------------------------------------------------------------
Observations 72 71 70 70 70
R2 0.662 0.641 0.648 0.652 0.670
Adjusted R2 0.642 0.619 0.626 0.625 0.639
Residual Std. Error 11.849 (df = 67) 12.124 (df = 66) 11.862 (df = 65) 11.881 (df = 64) 11.665 (df = 63)
F Statistic 32.837*** (df = 4; 67) 29.410*** (df = 4; 66) 29.933*** (df = 4; 65) 24.026*** (df = 5; 64) 21.335*** (df = 6; 63)
======================================================================================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
Ao adicionar uma tendencia linear no modelo, observa-se que ela é significativa para todos os modelos.
# Análise de autocorrelação de gfr
acf(Fertil3$GFR, main = "Autocorrelação de gfr",plot = T)
pacf(Fertil3$GFR, main = "Autocorrelação de gfr",plot = T)
# Análise de autocorrelação de pet
acf(Fertil3$PE, main = "Autocorrelação de pe",plot = T)
pacf(Fertil3$PE, main = "Autocorrelação de pe",plot = T)
Ccf(Fertil3$PE,Fertil3$GFR, main = "Autocorrelação Cruzada de pet e gfr",plot = T)
Ao fazer uma analise grafica para as autocorrelações, observamos que que há uma alta autocorrelação persistente nas variaveis, com mais lags PE que na fertilidade, o que sugerem um padrão autoregressivo que pode ser capturado com termos AR. porém, uma autocorrelação baixa nas função de autocorrelação parcial, indicando que elas tem um efeito temporal longo. Ao observar a autocorrelação cruzada ve-se que mudanças passadas em PE têm impacto na fertilidade, mostrando que decisões de política fiscal levam algum tempo para se traduzirem em mudanças no comportamento reprodutivo.A ausência de um pico significativo no lag zero e negativos sugere que PE não tem um impacto imediato em GFR nem uma relação de influencia inversa.
# Adicionar uma variável de tendência ao modelo
mod_l012td<-dynlm(d(GFR) ~trend(GFR)+d(PE)+d(PE,2)+d(PE,3)+ww2+pill,Fertil3%>% zoo())
mod_l01td<-dynlm(d(GFR) ~trend(GFR)+d(PE)+d(PE,2)+ww2+pill,Fertil3%>% zoo())
mod_l0td<-dynlm(d(GFR) ~trend(GFR)+d(PE)+ww2+pill,Fertil3%>% zoo())
mod_l012d<-dynlm(d(GFR) ~d(PE)+d(PE,2)+d(PE,3)+ww2+pill,Fertil3%>% zoo())
mod_l01d<-dynlm(d(GFR) ~d(PE)+d(PE,2)+ww2+pill,Fertil3%>% zoo())
mod_l0d<-dynlm(d(GFR) ~d(PE)+ww2+pill,Fertil3%>% zoo())
stargazer::stargazer(
mod_l012td,mod_l012d,
mod_l01td,mod_l01d,
mod_l0td,mod_l0d,
type = "text")
Warning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: length of NULL cannot be changedWarning: number of rows of result is not a multiple of vector length (arg 2)Warning: number of rows of result is not a multiple of vector length (arg 2)Warning: number of rows of result is not a multiple of vector length (arg 2)Warning: number of rows of result is not a multiple of vector length (arg 2)Warning: number of rows of result is not a multiple of vector length (arg 2)
=======================================================================================================================================================
Dependent variable:
-----------------------------------------------------------------------------------------------------------------------------------
d(GFR)
(1) (2) (3) (4) (5) (6)
-------------------------------------------------------------------------------------------------------------------------------------------------------
trend(GFR) 0.094** 0.079* 0.076*
(0.038) (0.040) (0.038)
d(PE) -0.023 -0.024 -0.050 -0.050 -0.086*** -0.094***
(0.040) (0.042) (0.042) (0.043) (0.032) (0.033)
d(PE, 2) -0.134*** -0.140*** -0.043 -0.054
(0.041) (0.043) (0.035) (0.035)
d(PE, 3) 0.095*** 0.088***
(0.027) (0.028)
ww2 3.251 4.839* 6.643** 7.826*** 4.432* 5.132**
(2.797) (2.832) (2.832) (2.830) (2.230) (2.249)
pill -4.888*** -1.676 -4.812*** -2.069* -4.702*** -1.987*
(1.616) (1.005) (1.726) (1.052) (1.715) (1.049)
Constant -3.141*** -0.650 -2.614** -0.589 -2.396** -0.470
(1.150) (0.582) (1.184) (0.609) (1.140) (0.603)
-------------------------------------------------------------------------------------------------------------------------------------------------------
Observations 69 69 70 70 71 71
R2 0.359 0.296 0.231 0.184 0.202 0.155
Adjusted R2 0.297 0.240 0.171 0.134 0.154 0.117
Residual Std. Error 3.611 (df = 62) 3.756 (df = 63) 3.894 (df = 64) 3.981 (df = 65) 3.917 (df = 66) 4.001 (df = 67)
F Statistic 5.792*** (df = 6; 62) 5.288*** (df = 5; 63) 3.845*** (df = 5; 64) 3.661*** (df = 4; 65) 4.187*** (df = 4; 66) 4.103*** (df = 3; 67)
=======================================================================================================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
O impacto contemporâneonão é significativo quando junto as defasagens, mas as defasagens apresentam efeitos significativos. Os efeitos de deduções fiscais são mais evidentes com defasagens, reforçando que mudanças em políticas fiscais influenciam a fertilidade ao longo de vários períodos.
A dedução de impostos tem um impacto positivo na taxa de fertilidade, mas esse efeito ocorre principalmente com atraso (defasagens de 1 a 2 períodos). O efeito imediato (contemporâneo) é menos evidente. WW2 e Pill têm efeitos significativos e negativos, capturando choques estruturais relacionados à fertilidade. A inclusão de uma tendência mostra uma queda estrutural na fertilidade ao longo do tempo, sugerindo que fatores culturais e socioeconômicos de longo prazo também desempenham um papel importante. A dependência temporal das variáveis reforça a necessidade de considerar modelos com defasagens para capturar adequadamente o impacto das deduções fiscais.
A metodologia Box Jenkins consistem em identifitica a ordem de diferenciação para a estatacionalidade da serie, estimar os diferentes modelos de ARMA e escolher os melhores modelos pelo bom comportamento dos resíduos e pelos critérios de AIC e BIC. vejamos a serie:
ipca_data <- read_excel("IPCA.xlsx")
New names:
ipca_ts<-ts(ipca_data$IPCA, start = c(1995, 1), frequency = 12)
ipca_ts %>% autoplot()
Para estimar a estacionariadade primeiro vamos avaliar se a serie apresenta autocorreção significativa e se é estacionária:
Acf(ipca_ts, main = "ACF da Série ")
adf.test(ipca_ts, alternative = "stationary")
Warning: p-value smaller than printed p-value
Augmented Dickey-Fuller Test
data: ipca_ts
Dickey-Fuller = -6.0631, Lag order = 6, p-value = 0.01
alternative hypothesis: stationary
Pela função de autocorreção, que ela apresenta autocorreção em varias de suas defasagens. Vemos também que a serie não é estacionária. vamos realizar agora os mesmos testes para sua versão com 1º diferença
ipca_diff <- diff(ipca_ts)
ipca_diff %>% autoplot()
Acf(ipca_diff, main = "ACF da Série Diferenciada")
Pacf(ipca_diff, main = "PACF da Série Diferenciada")
adf.test(ipca_diff, alternative = "stationary")
Warning: p-value smaller than printed p-value
Augmented Dickey-Fuller Test
data: ipca_diff
Dickey-Fuller = -9.4568, Lag order = 6, p-value = 0.01
alternative hypothesis: stationary
Podemos ver que ela é uma serie estacionária com autocorreção para algumas de suas defasagens (2º,9º e 12º), sugerindo um MA, e autocorrelação parcial(para as defasagens 2º,5º, 7º, 8º, e da 10º à 12º), sugerindo um AR.
# Testar estaci# Testar diferentes modelos ARIMA
modelos<-list()
Arima(ipca_ts, order = c(1, 1, 1)) %>% checkresiduals #Residuo Mau comportado
Ljung-Box test
data: Residuals from ARIMA(1,1,1)
Q* = 52.97, df = 22, p-value = 0.0002293
Model df: 2. Total lags used: 24
Arima(ipca_ts, order = c(2,1,3)) %>% checkresiduals #Residuo Mau comportado
Ljung-Box test
data: Residuals from ARIMA(2,1,3)
Q* = 45.651, df = 19, p-value = 0.0005552
Model df: 5. Total lags used: 24
Arima(ipca_ts, order = c(1, 1, 3)) %>% checkresiduals #Residuo Mau comportado
Ljung-Box test
data: Residuals from ARIMA(1,1,3)
Q* = 46.705, df = 20, p-value = 0.0006445
Model df: 4. Total lags used: 24
Arima(ipca_ts, order = c(3, 1, 3)) %>% checkresiduals #Residuo Mau comportado na defasagem 12
Ljung-Box test
data: Residuals from ARIMA(3,1,3)
Q* = 25.963, df = 18, p-value = 0.1006
Model df: 6. Total lags used: 24
Arima(ipca_ts, order = c(6, 1, 3)) %>% checkresiduals#Residuo Mau comportado na defasagem 12
Ljung-Box test
data: Residuals from ARIMA(6,1,3)
Q* = 33.739, df = 15, p-value = 0.003705
Model df: 9. Total lags used: 24
Arima(ipca_ts, order = c(3, 1, 6)) %>% checkresiduals#Residuo Mau comportado na defasagem 12
Ljung-Box test
data: Residuals from ARIMA(3,1,6)
Q* = 34.332, df = 15, p-value = 0.003058
Model df: 9. Total lags used: 24
Arima(ipca_ts, order = c(3, 2, 3)) %>% checkresiduals#Residuo Mau comportado na defasagem 12 e 7
Ljung-Box test
data: Residuals from ARIMA(3,2,3)
Q* = 43.914, df = 18, p-value = 0.0005935
Model df: 6. Total lags used: 24
Arima(ipca_ts, order = c(6, 3, 3)) %>% checkresiduals#Residuo Mau comportado na defasagem 12
Ljung-Box test
data: Residuals from ARIMA(6,3,3)
Q* = 45.606, df = 15, p-value = 6.14e-05
Model df: 9. Total lags used: 24
Arima(ipca_ts, order = c(3, 4, 6)) %>% checkresiduals#Residuo Mau comportado na defasagem 12
Ljung-Box test
data: Residuals from ARIMA(3,4,6)
Q* = 28.51, df = 15, p-value = 0.01858
Model df: 9. Total lags used: 24
Arima(ipca_ts, order = c(6, 1, 6)) %>% checkresiduals #Residuo Mau comportado na defasagem 12
Ljung-Box test
data: Residuals from ARIMA(6,1,6)
Q* = 27.924, df = 12, p-value = 0.005676
Model df: 12. Total lags used: 24
Arima(ipca_ts, order = c(9, 1, 6)) %>% checkresiduals#Residuo Bem comportado
Ljung-Box test
data: Residuals from ARIMA(9,1,6)
Q* = 14.252, df = 9, p-value = 0.1136
Model df: 15. Total lags used: 24
Arima(ipca_ts, order = c(9, 1, 3)) %>% checkresiduals #Residuo voltaram a ser mau comportados
Ljung-Box test
data: Residuals from ARIMA(9,1,3)
Q* = 18.582, df = 12, p-value = 0.09913
Model df: 12. Total lags used: 24
Arima(ipca_ts, order = c(9, 1, 5)) %>% checkresiduals #Residuo Bem comportado
Ljung-Box test
data: Residuals from ARIMA(9,1,5)
Q* = 14.039, df = 10, p-value = 0.1712
Model df: 14. Total lags used: 24
Arima(ipca_ts, order = c(7, 1, 5)) %>% checkresiduals #Residuo Bem comportado
Ljung-Box test
data: Residuals from ARIMA(7,1,5)
Q* = 14.246, df = 12, p-value = 0.2853
Model df: 12. Total lags used: 24
Arima(ipca_ts, order = c(6, 1, 5)) %>% checkresiduals # residuos voltaram a ser mau comportados
Ljung-Box test
data: Residuals from ARIMA(6,1,5)
Q* = 20.764, df = 13, p-value = 0.07773
Model df: 11. Total lags used: 24
Tentando esses modelos vemos que o \(ARMA()\), \(ARMA()\) e o \(ARMA()\), foram os melhores candidados por eliminarem a autocorreção significativa dos resíduos. vamos agora comparalos pelo critério de AIC e BIC:
arma916<-Arima(ipca_ts, order = c(9, 1, 6))
arma915<-Arima(ipca_ts, order = c(9, 1, 5))
arma715<-Arima(ipca_ts, order = c(7, 1, 5))
mBIC<-BIC(arma715,arma915,arma916)
maic<-AIC(arma715,arma915,arma916)
data.frame(model=rownames(mBIC),
BIC=mBIC$BIC,
AIC=maic$AIC)
Observamos que o melhor modelo seria o Arma(7,1,5) com o meno BIC Menor AIC.
# Teste de quebra estrutural com strucchange
breaks <- breakpoints(ipca_ts ~ 1) # Modelo com intercepto
summary(breaks)
# Avaliar estabilidade do modelo (Teste F)
sctest(ipca_ts ~ 1, type = "Chow")
Pelo Teste de Chow temos evidenia para uma quebra estrutural, que pelo metodo de Perron, estaria em 2003.(4)
# Filtrar a série a partir de 2003
ipca_2003 <- window(ipca_ts, start = c(2003, 4))
# Visualizar a nova série
plot(ipca_2003, main = "IPCA a partir de 2003", ylab = "Inflação (%)", xlab = "Ano")
ipca_2003 %>% adf.test()
Warning: p-value smaller than printed p-value
Augmented Dickey-Fuller Test
data: .
Dickey-Fuller = -4.816, Lag order = 5, p-value = 0.01
alternative hypothesis: stationary
ipca_2003 %>% kpss.test()
Warning: p-value greater than printed p-value
KPSS Test for Level Stationarity
data: .
KPSS Level = 0.20278, Truncation lag parameter = 4, p-value = 0.1
Tanto o Teste ADF quanto o KPSS indicam estacionaridade na série.A combinação dos dois testes reforça a conclusão de que a série filtrada não exige diferenciação adicional para modelagem. seguida, analisamos as funções de autocorrelação (ACF) e autocorrelação parcial (PACF) para avaliar candidatos AR e MA mais adequados ao modelo.
ipca_2003 %>% acf()
ipca_2003 %>% pacf
O ACF indica LAG significativo até o 4 com uma retorno entre o 9º ao 11º mês. Já o PACF indico um efeito sifnificativo no 8º e 9º Mês
arima(ipca_2003,c(9,0,5)) %>% checkresiduals()
Ljung-Box test
data: Residuals from ARIMA(9,0,5) with non-zero mean
Q* = 19.977, df = 10, p-value = 0.02947
Model df: 14. Total lags used: 24
A partir da analise de residuos e buscando ser parcimonioso o modelo ARMA(9,5) mostrou-se com os resíduos mais comportados.
BIC(arma916,arma_2004)
Warning: models are not all fitted to the same number of observations
AIC(arma916,arma_2004)
Warning: models are not all fitted to the same number of observations
O modelo ajustado com dados pós-2003 apresentou um BIC e AIC e significativamente menor, indicando melhor ajuste e explicando a inflação nesse período de forma mais precisa e com um modelo mais parcimonioso.