Series de tiempo - Detección de raíz unitaria
Librerías utilizadas
Lectura de los datos de series de tiempo
| EPSILON | Y1 | Y2 |
|---|---|---|
| 0.3202 | 0.320200 | 0.3202 |
| -0.4327 | -0.272600 | -0.1125 |
| -0.2150 | -0.351300 | -0.3275 |
| -0.0699 | -0.245550 | -0.3974 |
| 0.0582 | -0.064580 | -0.3392 |
| -0.4621 | -0.494390 | -0.8013 |
| -0.5400 | -0.787190 | -1.3413 |
| 0.1623 | -0.231300 | -1.1790 |
| 0.3619 | 0.246252 | -0.8171 |
| 0.3505 | 0.473626 | -0.4666 |
Visualizaciones de las series
par(mfrow=c(1,2))
plot(df_series$Y1,type="l",las=1,xaxs="i",xlab="Y1",ylab="Epsilon",tck=0.02,col="steelblue4", main= "Variable Y1")
plot(df_series$Y2,type="l",las=1,xaxs="i",xlab="Y2",ylab="Epsilon",tck=0.02,col="steelblue4", main= "Variable Y2")La tendencia que observamos sugiere que la serie no es estacionaria
Análisis de las funciones de autocorrelación parcial
Para este análisis solo se procederá a interpretar la serie \(Y_2\)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## ACF 0.48 0.12 0.12 0.07 -0.15 -0.23 -0.24 -0.26 -0.15 -0.01
## PACF 0.48 -0.15 0.17 -0.06 -0.21 -0.07 -0.16 -0.09 0.07 0.04
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## ACF 0.46 0.27 0.04 -0.02 -0.07 -0.09 0.01 0.07 0.18 0.05
## PACF 0.46 0.07 -0.14 -0.01 -0.04 -0.05 0.11 0.05 0.13 -0.13
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
## ACF 0.94 0.88 0.84 0.81 0.77 0.72 0.69 0.66 0.65 0.62 0.57 0.53 0.51
## PACF 0.94 -0.09 0.17 0.06 -0.06 -0.04 0.02 0.07 0.11 -0.13 -0.14 0.01 0.09
## [,14] [,15] [,16] [,17] [,18] [,19] [,20]
## ACF 0.48 0.46 0.44 0.43 0.40 0.36 0.31
## PACF -0.04 0.06 0.06 0.01 -0.14 -0.20 -0.07
con la finalidad de detectar patrones de no estacionariedad y a
sugerir posibles modelos a aplicar si la serie fuera estacionaria. Por
ende, evidencia de que la dependencia de la serie con sus valores
pasados cambia con el tiempo o persiste por muchos rezagos, lo cual
sugiere no estacionariedad. Es por ello que aplicaremos los siguientes
pasos para la detección de raíz unitaria. Tal y como lo muestra el
siguiente diagrama de flujo
Sospecha de tendencia y ADF
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.69516 -0.20413 -0.02684 0.17131 2.02116
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.1271512 0.0781675 1.627 0.107
## z.lag.1 -0.0298408 0.0346134 -0.862 0.391
## tt -0.0005929 0.0022327 -0.266 0.791
## z.diff.lag 0.1327053 0.1072923 1.237 0.219
##
## Residual standard error: 0.337 on 90 degrees of freedom
## Multiple R-squared: 0.05467, Adjusted R-squared: 0.02316
## F-statistic: 1.735 on 3 and 90 DF, p-value: 0.1655
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.68265 -0.20883 -0.04288 0.18502 2.06272
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0723442 0.0700994 1.032 0.305
## z.lag.1 -0.0223984 0.0340139 -0.659 0.512
## tt -0.0001014 0.0021205 -0.048 0.962
##
## Residual standard error: 0.3408 on 96 degrees of freedom
## Multiple R-squared: 0.01566, Adjusted R-squared: -0.004849
## F-statistic: 0.7635 on 2 and 96 DF, p-value: 0.4688
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
## ACF 0.14 -0.15 -0.07 0.07 -0.02 0.04 0.04 0.01 0.17 0.11 0.05 -0.13 -0.05
## PACF 0.14 -0.17 -0.02 0.06 -0.06 0.07 0.02 0.00 0.20 0.04 0.09 -0.11 -0.02
## [,14] [,15] [,16] [,17] [,18] [,19] [,20]
## ACF -0.03 -0.07 -0.05 0.15 0.17 0.05 -0.04
## PACF -0.04 -0.13 -0.04 0.12 0.09 0.07 -0.03
Especícamente:
la expresión
adf<-ur.df(df_series$Y2,type="trend", lag=5, selectlags="BIC")utiliza la funciónur.df()para realizar el test de Dickey - Fuller aumentado (ADF) a nuestra serie \(Y_2\) donde en ella se implementa un termino de tendencia determinística “trend” puesto a las sospechas detectadas anteriormente de que la serie posee una tendencia lineal. Al igual que la especificación de 5 rezagos con el argumentolag=5cuya finalidad es ayudar a “aumentar” el test para asegurar que los residuos de la regresión no estén autocorrelacionados. La autocorrelación en los residuos podría invalidar los resultados del test.Por ultimo el argumentoselectlags="BIC"que básicamente nos ayudará a obtener ese número óptimo de rezagos a incluir en la regresión.La expresión
adf@testregnos mostrará el resultado de la regresión estimada \[ΔY_t=a_0+a_2t+γY_{t-1} + \sum_{i=1}^{p} \beta_i \Delta Y_{t-i} +ϵ_t\] para luego utilizar el estadístico \(\tau_{\tau}\) para probar la hipótesis nula de \(\gamma=0\)
Dado que el valor p (0.512) es mayor que los niveles de significancia típicos (como 0.05 o 0.01), no rechazamos la hipótesis nula de que la serie df_series$Y2 tiene una raíz unitaria. Esto sugiere que la serie no es estacionaria alrededor de una tendencia.
En el cuadro de resumen de regresión se evidencia que el valor p de tt es mayor que el alpha del 5%. en este orden de ideas no se rechaza la hipotesis nula, indicando que no se requieren rezagos de diferecias
Resumen de la aplicación del dickey - fuller aumentado
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.68265 -0.20883 -0.04288 0.18502 2.06272
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0723442 0.0700994 1.032 0.305
## z.lag.1 -0.0223984 0.0340139 -0.659 0.512
## tt -0.0001014 0.0021205 -0.048 0.962
##
## Residual standard error: 0.3408 on 96 degrees of freedom
## Multiple R-squared: 0.01566, Adjusted R-squared: -0.004849
## F-statistic: 0.7635 on 2 and 96 DF, p-value: 0.4688
##
##
## Value of test-statistic is: -0.6585 0.5983 0.7635
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -4.04 -3.45 -3.15
## phi2 6.50 4.88 4.16
## phi3 8.73 6.49 5.47
siguiendo el diagrama de flujo y que \(\gamma = 0\) se procede a estimar \(\tau_3\). Donde el valor del estadistico de prueba -0.658, valor crítico tau3 -4.04 al 1pct. No se rechaza la hipotesis de raiz unitaria.
prueba para phi3
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.66085 -0.25652 0.01112 0.23370 1.07029
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.06608 0.04638 1.425 0.1574
## z.lag.1 -0.05659 0.03317 -1.706 0.0912 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3277 on 97 degrees of freedom
## Multiple R-squared: 0.02914, Adjusted R-squared: 0.01913
## F-statistic: 2.911 on 1 and 97 DF, p-value: 0.09115
SSR_r<-adf_rest@testreg$sigma^2*adf_rest@testreg$df[2]
#SSR no restringido
SSR_u<-adf1@testreg$sigma^2*adf1@testreg$df[2]El argumento
type="drift"de la expresiónadf_rest<-ur.df(df_series$Y1,type="drift",lags=0)especifíca el modelo con una constante pero sin tendencia determinística bajo a la hipótesis nula de \(\phi_3\) y de las restricciones de (si \(a_2 = \gamma = 0\)) simplificando la ecuación a \(ΔY_t=a_0+ \sum_{i=1}^{p} \beta_i \Delta Y_{t-i} +ϵ_t\) No obstante, el argumentolags=0se simplifa a \(ΔY_t=a_0 + ϵ_t\)La expresión
SSR_r<-adf_rest@testreg$sigma^2*adf_rest@testreg$df[2]calcula la Suma de Cuadrados de los Residuos (SSR) del modelo restringido donde:
adf_rest@testreg$sigma^2calcula la varianza estimada de los residuos \(\widehat{\sigma}^2\)adf_rest@testreg$df[2]Nos arroja los grados de libertad
Ahora que tienes la SSR restringida (SSR_r) y la SSR no
restringida (SSR_u), puedes calcular el estadístico \(\phi_3\) utilizando la siguiente fórmula
(derivada de una prueba F para la significancia conjunta de los
coeficientes restringidos): \[\phi_3 =
\frac{(SSR_r - SSR_u) / q}{SSR_u / (T - k)}\] Donde: - \(SSR_\tau\) es la suma de cuadrados de los
residuos del modelo restringido \(a_2 = \gamma
= 0\) - \(SSR_u\) es la suma de
cuadrados de los residuos del modelo no restringido (con constante,
tendencia y \(Y_{t-1}\) - \(q\) es el número de restricciones impuestas
(en este caso \(q = 2\) ya que estamos
restringiendo \(a_2 = \gamma = 0\) -
\(T\) es el número de observaciones en
la serie de tiempo - \(k\) es el número
de parámetros estimados en el modelo no restringido. En el caso de
adf1 (con constante, tendencia y \(Y_{t-1}\)), \(k =
3\)
#Calculo de fi3
r<-2
df_u<-adf1@testreg$df[2]
fi3<-((SSR_r-SSR_u)/2)/(SSR_u/df_u)
#Valor critico de fi3
respuesta<-fi3>adf@cval[3,]
respuesta## 1pct 5pct 10pct
## FALSE FALSE FALSE
El resultado FALSE FALSE FALSE significa que tu valor calculado de \(\phi_3\) es menor que los valores críticos al 1%, 5% y 10% para la prueba \(\phi_3\) es decir que no se rechaza \(a_2 = \gamma = 0\), no hay tendencia
##Prueba de Raíz Unitaria ADF con Deriva (Intercepto) para la Serie Y2
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.68689 -0.20786 -0.04176 0.18452 2.06141
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.07024 0.05433 1.293 0.199
## z.lag.1 -0.02374 0.01913 -1.241 0.218
##
## Residual standard error: 0.339 on 97 degrees of freedom
## Multiple R-squared: 0.01563, Adjusted R-squared: 0.005486
## F-statistic: 1.541 on 1 and 97 DF, p-value: 0.2175
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression drift
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.68689 -0.20786 -0.04176 0.18452 2.06141
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.07024 0.05433 1.293 0.199
## z.lag.1 -0.02374 0.01913 -1.241 0.218
##
## Residual standard error: 0.339 on 97 degrees of freedom
## Multiple R-squared: 0.01563, Adjusted R-squared: 0.005486
## F-statistic: 1.541 on 1 and 97 DF, p-value: 0.2175
##
##
## Value of test-statistic is: -1.2412 0.9056
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau2 -3.51 -2.89 -2.58
## phi1 6.70 4.71 3.86
La expresión
adf2<-ur.df(df_series$Y2,type="drift",lags=0) estima un
modelo ADF con solo un término de deriva y sin rezagos de la primera
diferencia por los argumentos type="drift" y
lags=0
Prueba para \(\gamma = 0\) (usando \(\tau_\mu = -1.2412\)): Comparamos el valor absoluto de nuestro estadístico con los valores críticos para \(\tau_2\) (que corresponden a \(\tau_\mu\)).
\(|-1.2412| < 2.58\) (valor crítico al 10%) \(\implies\) No rechazamos la hipótesis nula de que \(\gamma = 0\) al nivel del 10%. \(|-1.2412| < 2.89\) (valor crítico al 5%) \(\implies\) No rechazamos la hipótesis nula de que \(\gamma = 0\) al nivel del 5%. \(|-1.2412| < 3.51\) (valor crítico al 1%) \(\implies\) No rechazamos la hipótesis nula de que \(\gamma = 0\) al nivel del 1%.
Conclusión del Paso 3 para df_series$Y2 : No rechazamos
la hipótesis nula de que la serie Y2 tiene una raíz unitaria (es no
estacionaria) en el modelo con deriva.
Prueba de Raíz Unitaria ADF sin Constante ni Tendencia para la Serie Y2
paso 4 del flujo
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.66975 -0.16854 -0.01133 0.20828 2.10776
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -0.00448 0.01204 -0.372 0.711
##
## Residual standard error: 0.3402 on 98 degrees of freedom
## Multiple R-squared: 0.001411, Adjusted R-squared: -0.008778
## F-statistic: 0.1385 on 1 and 98 DF, p-value: 0.7106
SSR_adf2_r_2<-adf2_rest_Y2@testreg$sigma^2*adf2_rest_Y2@testreg$df[2]
r2<-2
df_adf2_u_2<-adf2_y2@testreg$df[2]
SSR_adf2_u_2<-adf2_y2@testreg$sigma^2*adf2_y2@testreg$df[2]
f1_2<-((SSR_adf2_r_2-SSR_adf2_u_2)/r2)/(SSR_adf2_u_2/df_adf2_u_2)
respuesta_intersecto2<-f1_2>adf2_y2@cval[2,]
respuesta_intersecto2## 1pct 5pct 10pct
## FALSE FALSE FALSE
De la expresión
adf2_rest_Y2<-ur.df(df_series$Y2, type="none", lags=0)
el argumento type="none" estima el modelo restringido donde
tanto la constante como la tendencia (que no había en el modelo del Paso
3) son excluidas. La regresión estimada bajo esta restricción es: \[ΔY = \epsilon_t\]
Salida FALSE FALSE FALSE: Esto indica que tu valor calculado de f1_2 es menor que los valores críticos al 1%, 5% y 10% para la prueba \(\phi_1\)
Dado que el valor calculado del estadístico \(\phi_1\) es menor que los valores críticos, no rechazamos la hipótesis nula de que conjuntamente el intercepto (\(a_0\)) y el coeficiente del nivel rezagado (\(\gamma\)) son cero.
Resultados de la Prueba de Raíz Unitaria ADF sin Constante ni Tendencia para la Serie Y2
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.66975 -0.16854 -0.01133 0.20828 2.10776
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -0.00448 0.01204 -0.372 0.711
##
## Residual standard error: 0.3402 on 98 degrees of freedom
## Multiple R-squared: 0.001411, Adjusted R-squared: -0.008778
## F-statistic: 0.1385 on 1 and 98 DF, p-value: 0.7106
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression none
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.66975 -0.16854 -0.01133 0.20828 2.10776
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -0.00448 0.01204 -0.372 0.711
##
## Residual standard error: 0.3402 on 98 degrees of freedom
## Multiple R-squared: 0.001411, Adjusted R-squared: -0.008778
## F-statistic: 0.1385 on 1 and 98 DF, p-value: 0.7106
##
##
## Value of test-statistic is: -0.3722
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.6 -1.95 -1.61
## tau1
## statistic -0.3721607
## 1pct 5pct 10pct
## tau1 -2.6 -1.95 -1.61
## 1pct 5pct 10pct
## tau1 FALSE FALSE FALSE
De la expresión
adf3_y2 = ur.df(df_series$Y2,type="none",lag=0) el
argumento type="none" especifica que la regresión de prueba
del Test de Dickey-Fuller Aumentado (ADF) no incluye ni un término
constante (intercepto) ni un término de tendencia determinística.No
obstante, utilicemos este argumento cuando se tenga fuertes razones para
creer que tu serie de tiempo - No tiene una media constante distinta
de cero si es estacionaria. - No tiene una tendencia
determinística si es no estacionaria (es una caminata aleatoria sin una
dirección promedio).
en conclusión, dado que el valor del estadístico \(\tau\) (-0.372) no es menor que ninguno de
los valores críticos para el test ADF sin constante ni tendencia, no
rechazamos la hipótesis nula de que \(\gamma =
0\). Esto sugiere que, incluso bajo la asunción de que no hay
constante ni tendencia, no encontramos evidencia estadística para
rechazar la presencia de una raíz unitaria en la serie
df_series$Y2
test de Perron
detección de raíces unitarias en presencia de cambios estructurales en la serie
etección Preliminar del Punto de Quiebre en la Serie Y2
par(mfrow=c(1,1))
plot(df_series$Y2,type="l",las=1,xaxs="i",xlab="",ylab="",tck=0.02,col="steelblue4") #Detecta el punto de cambio
ind_Y2 = which(max(abs(diff(df_series$Y2)))==abs(diff(df_series$Y2)))
tau_Y2 = ind_Y2+1
tau_Y2## [1] 51
Desglosando la expresión
ind_Y2 = which(max(abs(diff(df_series$Y2)))==abs(diff(df_series$Y2)))
tenemos que: - diff(df_series$Y2 Calcula la primera
diferencia de la serie Y2, es decir \(Y_t - Y_{t-1}\) para cada punto. Los
valores grandes en la primera diferencia indican cambios significativos
en la serie. - abs(...) Toma el valor absoluto de las
diferencias para identificar tanto aumentos como disminuciones bruscas.
- max(...) Encuentra el valor máximo de las diferencias
absolutas. - which(...) Devuelve el índice de la
observación donde ocurre este valor máximo. Este índice corresponde al
punto antes del cambio más grande. - tau_Y2 Muestra el
valor estimado del punto de quiebre. Que para este caso en particular el
valor es de 51
Explicación del código:
df_y2 = data.frame(Y=df_series$Y2,Ylag=c(NA,embed(df_series$Y2,2)[,-1])):
Crea un nuevo dataframe llamado df_y2. La columna
Y contiene los valores de tu serie de tiempo
df_series$Y2. La columna Ylag contiene los
valores de la serie rezagados un período.
embed(df_series$Y2,2)[,-1] crea una matriz con la serie
original y la serie rezagada, y luego [,-1] selecciona solo
la columna de la serie rezagada, con un NA al principio
para mantener la longitud correcta para operaciones posteriores con la
primera diferencia. Ojo: Para el Test de Perron en su forma básica,
generalmente se utiliza el nivel rezagado \(Y_{t-1}\) directamente. Tu forma es
equivalente pero introduce un rezago adicional en la variable
Ylag que podría no ser intencional para el modelo ADF
aumentado dentro del Test de Perron. Asegúrate de que esta sea la
especificación que deseas para tu modelo.
colnames(df_y2)=c("Y","Ylag"): Asigna nombres claros a las
columnas del dataframe. df_y2$Dl=1: Crea una nueva columna
llamada Dl (para “Delta level”) y la inicializa con el
valor 1 para todas las observaciones. df_y2$Dl[1:tau_Y2]=0:
Modifica la columna Dl. Para todas las observaciones desde
la primera hasta el punto de quiebre estimado
(tau_Y2 = 51), el valor de Dl se establece en
0. Esto crea una variable de nivel que es 0 antes del quiebre y 1 a
partir del quiebre. df_y2$Dp=0: Crea una nueva columna
llamada Dp (para “Delta pulse”) y la inicializa con el
valor 0 para todas las observaciones. df_y2$Dp[tau_Y2]=1:
Modifica la columna Dp. En el punto de quiebre estimado
(tau_Y2 = 51), el valor de Dp se establece en
1. Esta es una variable de pulso que es 1 solo en el momento del quiebre
y 0 en todos los demás períodos. df_y2$t = 1:nrow(df_y2):
Crea una columna t que representa el tiempo o el índice de
las observaciones. Esta variable se utilizará si decides incluir una
tendencia en tu modelo del Test de Perron.
Modelo de Regresión con Quiebre
##
## Call:
## lm(formula = Y ~ Ylag + t + Dp + Dl, data = df_y2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.63606 -0.16653 -0.03317 0.20352 0.52366
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.089896 0.064046 1.404 0.164
## Ylag 0.973727 0.036408 26.745 < 2e-16 ***
## t -0.002127 0.001944 -1.094 0.277
## Dp 2.153388 0.275093 7.828 7.32e-12 ***
## Dl 0.146854 0.148970 0.986 0.327
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2678 on 94 degrees of freedom
## Multiple R-squared: 0.9783, Adjusted R-squared: 0.9774
## F-statistic: 1059 on 4 and 94 DF, p-value: < 2.2e-16
Interpretación
- (Intercept): El intercepto estimado es 0.0899. No es estadísticamente significativo (p-valor = 0.164).
- Ylag: El coeficiente estimado para el valor rezagado de Y es 0.9737. Es altamente estadísticamente significativo (p-valor < 2e-16). Esto sugiere una fuerte persistencia en la serie.
- t (Tendencia temporal): El coeficiente estimado para la tendencia temporal es -0.0021. No es estadísticamente significativo (p-valor = 0.277).La tendencia temporal no parece ser un factor significativo en este modelo.
- Dp (Dummy de pulso): El coeficiente estimado para la variable de pulso es 2.1534. Es altamente estadísticamente significativo (p-valor = 7.32e-12). Esto indica que hubo un shock significativo y abrupto en el nivel de la serie en el momento del quiebre (observación 51).
- Dl (Dummy de nivel): El coeficiente estimado para
la variable de nivel es 0.1469. No es estadísticamente significativo
(p-valor = 0.327). El cambio permanente en el nivel después del quiebre,
capturado por
Dl, no parece ser estadísticamente significativo en este modelo, una vez que se controla por el shock puntual (Dp).
Modelo de regresión sin tendencia (t)
##
## Call:
## lm(formula = Y ~ Ylag + Dp + Dl, data = df_y2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.69250 -0.17460 -0.00654 0.19723 0.52038
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.03888 0.04395 0.885 0.379
## Ylag 0.96659 0.03586 26.958 < 2e-16 ***
## Dp 2.10477 0.27176 7.745 1.03e-11 ***
## Dl 0.06362 0.12821 0.496 0.621
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2681 on 95 degrees of freedom
## Multiple R-squared: 0.978, Adjusted R-squared: 0.9773
## F-statistic: 1409 on 3 and 95 DF, p-value: < 2.2e-16
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
## ACF 0.09 -0.03 -0.02 0.06 -0.01 -0.04 -0.02 -0.09 0.13 0.17 -0.12 -0.13 0.07
## PACF 0.09 -0.04 -0.01 0.07 -0.02 -0.03 -0.02 -0.10 0.15 0.15 -0.16 -0.08 0.08
## [,14] [,15] [,16] [,17] [,18] [,19] [,20]
## ACF 0.06 -0.02 0.05 0.08 0.14 0.05 -0.01
## PACF 0.01 0.00 0.08 0.08 0.14 -0.03 -0.04
Coeficientes del Modelo:
- (Intercept): No significativo (p-valor = 0.379).
- Ylag: Altamente significativo (p-valor < 2e-16), confirmando la persistencia.
- Dp: Altamente significativo (p-valor = 1.03e-11), indicando un shock puntual importante.
- Dl: No significativo (p-valor = 0.621), sugiriendo que el cambio de nivel permanente no es estadísticamente relevante en este modelo.
Los valores del error estándar de los residuos, el R-cuadrado y el estadístico F son similares al modelo anterior, lo que indica un buen ajuste general.
Calculo del test de Perron
## [1] -0.7216243
resumen_Y2$coefficients[2,1]: Esto extrae el coeficiente estimado de la segunda fila (que corresponde aYlag) de la tabla de coeficientes del resumen del modelolm1_Y2.- 1: Le restas 1 a este coeficiente. Bajo la hipótesis nula de una raíz unitaria (sin considerar el quiebre), el coeficiente de \(Y_{t-1}\) en la regresión \(\Delta Y_t = \alpha Y_{t-1} + ...\) sería 0, lo que implica que el coeficiente de \(Y_{t-1}\) en la regresión \(Y_t = (1+\alpha) Y_{t-1} + ...\) sería 1. Por lo tanto,(coeficiente - 1)se relaciona con la magnitud del rechazo de la raíz unitaria./ resumen_Y2$coefficients[2,2]: Divides el resultado anterior por el error estándar del coeficiente deYlag. Esto se asemeja a la construcción de un estadístico t estándar.
par(mfrow=c(1,1))
plot(df_y2$Y[-1],type="l",las=1,xaxs="i",xlab="",ylab="",tck=0.02)
lines(lm1_Y2$fitted.values,col="steelblue4",lty=1)test Perron con modelo estructural
Procedimiento del Test de Perron
Identificación del punto de quiebre
- Determinar visualmente o mediante métodos estadísticos el punto donde ocurre el cambio estructural.
- Alternativamente, utilizar la fecha de un evento conocido que podría haber causado el cambio.
Creación de variables dummy
- Variable de cambio en nivel (Du): toma valor 0 antes del quiebre y 1 después.
- Variable de cambio en tendencia (Dt): toma valor 0 antes del quiebre y valores secuenciales después.
- Variable de pulso (Dbreak): toma valor 1 solo en el período inmediato al quiebre.
Especificación del modelo
- Modelo IO1 (Innovational Outlier - cambio en nivel): incluye Du y Dbreak.
- Modelo IO2 (Innovational Outlier - cambio en nivel y tendencia): incluye Du, Dt y Dbreak.
- Modelo AO (Additive Outlier): requiere un enfoque en dos etapas.
Estimación del modelo
- Estimar el modelo mediante mínimos cuadrados ordinarios (MCO).
- Analizar la significancia de los coeficientes de las variables dummy.
Análisis de los residuos
- Aplicar un test de raíz unitaria (como ADF) a los residuos del modelo.
- Comparar el estadístico con los valores críticos específicos del test de Perron.
Comparación con modelo sin cambio estructural
- Realizar un test F o test de razón de verosimilitud para comparar modelos.
- Determinar si el modelo con cambio estructural es significativamente mejor.
Interpretación de resultados
- Si los residuos son estacionarios y el modelo con cambio estructural es significativo, se rechaza la hipótesis de raíz unitaria en favor de estacionariedad con cambio estructural.
# 2. Crear variables dummy para el cambio estructural
df_y2$Du <- ifelse(1:n > breakpoint, 1, 0) # Cambio en nivel (intercepto)
df_y2$Dt <- ifelse(1:n > breakpoint, 1:n - breakpoint, 0) # Cambio en tendencia (pendiente)
df_y2$Dbreak <- ifelse(1:n == breakpoint + 1, 1, 0) # Dummy para el punto exacto de quiebre# 3. Estimar el modelo de Perron con las variables de cambio estructural
# Modelo IO1 (Innovational Outlier - cambio en intercepto)
perron_io1 <- lm(Y ~ Ylag + Dp + Dl + Du + Dbreak, data = df_y2)# Modelo IO2 (Innovational Outlier - cambio en intercepto y pendiente)
perron_io2 <- lm(Y ~ Ylag + Dp + Dl + Du + Dt + Dbreak, data = df_y2)##
## Call:
## lm(formula = Y ~ Ylag + Dp + Dl + Du + Dbreak, data = df_y2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.6867 -0.1699 0.0000 0.1907 0.5220
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.03736 0.04393 0.850 0.397
## Ylag 0.96912 0.03590 26.991 < 2e-16 ***
## Dp 2.10315 0.27144 7.748 1.13e-11 ***
## Dl 0.40067 0.28782 1.392 0.167
## Du -0.34830 0.27121 -1.284 0.202
## Dbreak -0.19846 0.27066 -0.733 0.465
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2677 on 93 degrees of freedom
## Multiple R-squared: 0.9785, Adjusted R-squared: 0.9774
## F-statistic: 848 on 5 and 93 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = Y ~ Ylag + Dp + Dl + Du + Dt + Dbreak, data = df_y2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.6595 -0.1618 -0.0143 0.1772 0.5369
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.061970 0.043510 1.424 0.15776
## Ylag 0.928207 0.037964 24.450 < 2e-16 ***
## Dp 2.129296 0.263004 8.096 2.27e-12 ***
## Dl 0.512819 0.281803 1.820 0.07204 .
## Du -0.123112 0.275694 -0.447 0.65625
## Dt -0.008166 0.003044 -2.683 0.00866 **
## Dbreak -0.401785 0.272809 -1.473 0.14423
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2593 on 92 degrees of freedom
## Multiple R-squared: 0.9801, Adjusted R-squared: 0.9788
## F-statistic: 754.9 on 6 and 92 DF, p-value: < 2.2e-16
# 5. Test de raíz unitaria con cambio estructural
# Calcular los residuos del modelo (usamos IO2 que es más completo)
df_y2$residuals <- residuals(perron_io2)# Test de Dickey-Fuller Aumentado usando urca
adf_test_urca <- ur.df(df_y2$residuals, type = "none", lags = 1)
summary(adf_test_urca)##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression none
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.62634 -0.17141 -0.00947 0.18054 0.50611
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -1.0374 0.1387 -7.478 3.73e-11 ***
## z.diff.lag 0.1040 0.1033 1.007 0.317
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2471 on 95 degrees of freedom
## Multiple R-squared: 0.4688, Adjusted R-squared: 0.4576
## F-statistic: 41.92 on 2 and 95 DF, p-value: 8.919e-14
##
##
## Value of test-statistic is: -7.4782
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.6 -1.95 -1.61
##
## Call:
## lm(formula = Y ~ Ylag + Dp + Dl, data = df_y2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.69250 -0.17460 -0.00654 0.19723 0.52038
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.03888 0.04395 0.885 0.379
## Ylag 0.96659 0.03586 26.958 < 2e-16 ***
## Dp 2.10477 0.27176 7.745 1.03e-11 ***
## Dl 0.06362 0.12821 0.496 0.621
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2681 on 95 degrees of freedom
## Multiple R-squared: 0.978, Adjusted R-squared: 0.9773
## F-statistic: 1409 on 3 and 95 DF, p-value: < 2.2e-16
# 7. Realizar un test F para comparar los modelos
# Esto te ayudará a determinar si las variables de cambio estructural son significativas
anova(lm2_Y2, perron_io2)## Analysis of Variance Table
##
## Model 1: Y ~ Ylag + Dp + Dl
## Model 2: Y ~ Ylag + Dp + Dl + Du + Dt + Dbreak
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 95 6.8269
## 2 92 6.1834 3 0.64353 3.1916 0.02727 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 8. Visualizar los resultados
par(mfrow=c(2,2))
plot(df_y2$Y, type="l", main="Serie Original")
abline(v=breakpoint, col="red", lty=2)
plot(fitted(perron_io2), type="l", main="Valores Ajustados")
abline(v=breakpoint, col="red", lty=2)
plot(df_y2$residuals, type="l", main="Residuos")
abline(v=breakpoint, col="red", lty=2)
acf(df_y2$residuals, main="ACF de Residuos")Interpretación de los Resultados del Test de Perron
Basándose en los resultados detallados que se han compartido, se pueden ofrecer las siguientes conclusiones.
1. Evidencia de cambio estructural significativo
- El modelo que incluye las variables de cambio estructural
(
Du,DtyDbreak) muestra una mejora estadísticamente significativa sobre el modelo base, como lo confirma el test ANOVA (p-valor = 0.02727 < 0.05). - La variable
Dt(cambio en tendencia) es estadísticamente significativa (p-valor = 0.00866) en el modelo completo, lo que indica un cambio en la pendiente después del punto de quiebre.
2. Estacionariedad de los residuos
- El test ADF aplicado a los residuos muestra un valor estadístico de -7.4782, que es mucho más negativo que los valores críticos (-2.6, -1.95, -1.61 para niveles de significancia del 1%, 5% y 10% respectivamente).
- Esto indica un fuerte rechazo de la hipótesis nula de raíz unitaria en los residuos, confirmando que los residuos son estacionarios.
3. Persistencia en la serie
- El coeficiente de
Ylagen el modelo final es 0.928207, que es cercano pero significativamente menor que 1, lo que sugiere un alto grado de persistencia pero no una raíz unitaria.
4. Impacto del cambio estructural
- El coeficiente de
Dp(2.129296) es altamente significativo, indicando un fuerte efecto del cambio estructural en la serie. - El coeficiente negativo de
Dt(-0.008166) sugiere un cambio en la tendencia después del punto de quiebre.
Conclusión final
Se puede concluir que:
- La serie presenta un cambio estructural significativo en el punto 51, como se había identificado previamente.
- La serie es estacionaria alrededor de este cambio estructural, como lo confirma el test ADF en los residuos.
- El modelo de Perron es apropiado para la serie, ya que mejora significativamente el ajuste en comparación con el modelo sin variables de cambio estructural.
- El cambio estructural afecta tanto al nivel como a la tendencia de la serie, como lo indican los coeficientes significativos.
- La hipótesis de raíz unitaria se rechaza cuando se tiene en cuenta el cambio estructural, lo que sugiere que la aparente no estacionariedad de la serie original se debe principalmente al cambio estructural y no a una verdadera raíz unitaria.
Esta conclusión es consistente con la teoría del test de Perron, que sostiene que las pruebas estándar de raíz unitaria pueden fallar en rechazar la hipótesis nula incorrectamente cuando hay cambios estructurales presentes.
Referencia:
Enders, W. (2014). Applied Econometric Time Series. Wiley, 4th Edition. (Capítulo 4)
Hamilton, J. D. (1994). Time Series Analysis. Princeton University Press. (Capítulo 17) Lütkepohl, H., &
Krätzig, M. (2004). Applied Time Series Econometrics. Cambridge University Press. (Capítulo 2)