La esencia de esta prueba es determinar si se puede convertir una serie temporal en una versión estacionaria mediante diferenciación, donde se necesita conocer del orden de integración, denotado como “d”, el cual indica cuántas diferenciaciones son necesarias para lograr la estacionariedad, por ejemplo, si d=1, significa que se requiere una diferencia para alcanzar la estacionariedad, representada como I(1).
En sí, dicha prueba tiene por lo menos tres versiones y la elección entre ellas depende del contexto y las características específicas de los datos que se están analizando, por ello, los autores propusieron las siguientes tres formas funcionales para efectuar la prueba:A-No constant, no trend, B-Constant, no trend, C-Constant & Trend.
La elección de la versión de la prueba a utilizar Miguel Angel Mendoza (2016) lo explica de la siguiente manera: “El modelo anida las diferentes alternativas de prueba vistas antes, es decir se puede efectuar la prueba de raíz unitaria con o sin constante, con o sin tendencia determinística y con o sin considerar autocorrelaciones. Esta generalidad y amplitud de las posibilidades de prueba puede llevar a que, en algunos casos, se busque obligar a que la prueba otorgue evidencia favorable a alguna intención a priori de quién la esta efectuando, para evitar falsear la prueba es conveniente seguir alguna estrategia de prueba.”
Se deben graficar los datos para determinar la clasificación del modelo.
Si la serie original presenta tendencia, se debe incluir tendencia e intercepto Si no parece tener tendencia y su media no es cero, sólo incluir intercepto. Si parece fluctuar en torno a su valor medio cero, no incluir ni tendencia e intercepto Para la prueba nosotros cumplimos con un modelo original y llegamos a un modelo diferenciado, pero necesitamos partir de la forma más básica para encontrar dicho modelo diferenciado.
La forma más básica de investigar la existencia de una raíz unitaria implica iniciar con la construcción de un modelo autorregresivo (modelo AR). Este procedimiento consiste en elaborar un modelo AR y luego realizar pruebas estadísticas, como la Prueba de Dickey-Fuller, con el propósito de determinar si la serie temporal presenta una raíz unitaria.
Dicho modelo viene dado por:
yt=ρyt−1+et,t=1,2,…, Donde:
yt es el valor de la serie temporal en el tiempo t . ρ es el coeficiente de autoregresión que cuantifica la dependencia de la serie temporal en el tiempo t respecto a su valor en el tiempo t−1 . yt−1 es el valor de la serie temporal en el periodo anterior (t−1 ). et es el término de error en el tiempo t , asumiéndose que sigue una distribución normal y tiene media cero condicional a la información pasada (yt−1,yt−2,…,y0 ). La condición E(et|yt−1,yt−2,…,y0)=0 establece que, dadas las observaciones pasadas de la serie temporal, el término de error et tiene una media de cero. Esta condición implica que, en promedio, no hay un sesgo sistemático o tendencia en et que no pueda ser explicado por la información pasada disponible. Para llevar a cabo la Prueba de Raíz Unitaria de Dickey & Fuller, se utiliza una ecuación específica que involucra restar el valor yt−1 de ambos lados de la ecuación autorregresiva original y definir un término θ como la diferencia entre el coeficiente de autoregresión ρ y 1.
Consideramos un proceso estocástico de la forma:
yt−yt−1=ρyt−1+et−yt−1
Δyt=(ρ−1)yt−1+et
La ecuación resultante se expresa como:
Δyt=θyt−1+et
Donde:
Δyt representa la diferencia entre los valores sucesivos de la serie temporal. θ es la diferencia entre el coeficiente de autoregresión ρ y 1. yt−1 es el valor de la serie temporal en el periodo anterior (t−1 ). et es el término de error en el tiempo t , asumiéndose que sigue una distribución normal y tiene media cero condicional a la información pasada (yt−1,yt−2,…,y0 ). En esta prueba se puede razonar que dicha transformación es porque se utiliza la diferenciación para calcular la variación entre los valores consecutivos de la serie temporal, representada por Δyt , con el objetivo de eliminar posibles tendencias que puedan hacer que la serie no sea estacionaria. Además, se introduce el coeficiente de autoregresión original ρ , representado por θ , que se obtiene restando 1 de ρ . Al restar yt−1 de ambos lados de la ecuación original, evaluamos cómo la serie cambia de un período a otro en relación con su valor anterior. Si θ es igual a cero, sugiere que la serie tiene una raíz unitaria, lo que implica la falta de estacionariedad. Finalmente, el término de error et refleja que cualquier patrón observable en la serie ha sido capturado por los valores anteriores, y lo que queda en et es esencialmente aleatorio.
Anteriormente se excluyó la constante α y nos centramos en analizar la estacionariedad de la serie una vez que se ha eliminado cualquier componente de tendencia constante, sin embargo, lo mismo se puede aplicar para un modelo AR(1), donde se tenga la constante, es decir, podemos tomar el siguiente modelo:
yt=α+ρyt−1+et,t=1,2,…,
Donde ya conocemos todos los detalles y agregado a esto está α que es la constante o intercepto que refleja el valor esperado de yt cuando yt−1=0 . De esto, al restar el valor yt−1 de ambos lados de la ecuación autorregresiva original y volviendo a definir un término θ como la diferencia entre el coeficiente de autoregresión ρ y 1 podemos obtener lo siguiente:
Δyt=α+θyt−1+et
La única diferencia entre estos modelos se basa en que uno tiene caminata aleatoria pura y otro es caminata aleatoria con deriva, es decir, radica en la constante, y no se expresan conjuntamente dado a la necesidad de modelar adecuadamente la dependencia temporal de los datos, sin embargo, ambos pueden expresarse como la diferencia entre observaciones consecutivas de tal manera que se tenga Δyt=yt−yt−1.
El modelo que empleamos para ilustrar las pruebas DF supone que los datos siguen un proceso AR(1), sin embargo en la práctica muchas series pueden no ajustarse a ello. Si suponemos que los datos siguen un proceso más general como un AR(p), nos hará que se presente problemas como la existencia de autocorrelación en los residuales.
Para abordar esta prueba aumentada empezamos optando por modificar la ecuación original Δyt=α+θyt−1+et . En lugar de restringirnos a una estructura lineal simple, permitimos que yt siga un modelo AR con rezagos adicionales. Esta adaptación busca capturar de manera más precisa la dinámica del proceso subyacente y mejorar la capacidad de la prueba para detectar la presencia de raíces unitarias en el modelo y corregir problemas de autocorrelación.
Δyt=α+θyt−1+γ1yt−1+et
Donde:
α es la constante o término de intercepto que contribuye al cambio en yt . θyt−1 refleja la dependencia lineal de yt en su valor anterior yt−1 . γ1yt−1 añade una componente autorregresiva adicional, modelando la relación específica entre yt−1 y el cambio en yt . et es el término de error, capturando la variación no explicada en el modelo. Es fundamental que el valor de |γ1|<1 para garantizar que el modelo sea estacionario y que las propiedades estadísticas sean significativas, lo que nos permitirá describir un modelo utilizado para comprender cómo cambia una variable yt a lo largo del tiempo, ya sea explicado únicamente por su cambio inmediato o también por su relación con yt−1 en el periodo anterior.
En un sentido más amplio, se puede incorporar p rezagos de Δyt a la ecuación para capturar la dinámica del proceso. La manera de evaluar la hipótesis nula de raíz unitaria es muy parecida: realizar la regresión de Δyt sobre sus rezagos (Δyt−1,Δyt−2,…,Δyt−p ). Esto implica realizar pruebas de hipótesis para determinar si estos coeficientes son diferentes de cero, ya que, si esto es así, podría indicar que las variaciones pasadas están relacionadas de manera significativa con la variación actual (Δyt ), lo que a su vez podría sugerir la presencia de raíces unitarias en el proceso subyacente.
Cuando nos enfrentamos al Modelo de Camino aleatorio con constante, tendencia estocástica y determinística, es necesario ajustar la prueba de raíces unitarias, dado que, al tratar con procesos que exhiben una tendencia estacionaria, es decir, una tendencia lineal en su media pero estacionaria en sus primeras diferencias, la aplicación directa de la prueba de Dickey-Fuller puede presentar problemas. En este sentido, es probable que la prueba tenga limitada capacidad para rechazar la hipótesis de una raíz unitaria, es por ello que se modifica su ecuación básica, donde la ecuación ajustada incluye un término adicional para capturar una posible tendencia temporal lineal en los datos.
Δyt=α+δt+θyt−1+et
Donde:
Δyt representa el cambio en la variable y en el tiempo t . α es una constante. δt es el término que incorpora una posible tendencia temporal lineal. θyt−1 refleja la relación con el valor anterior de y . et es el término de error. La prueba de hipótesis evalúa si hay evidencia estadística para afirmar o refutar la presencia de una tendencia temporal lineal en la serie de tiempo, es decir, la hipótesis nula establece que el coeficiente asociado con la tendencia temporal (δ ) es igual a cero, lo que implica que no hay una tendencia lineal en los datos, agregando que θ=0 , lo cual explicaría una hipótesis nula más apropiada, pero en la realidad se opta solo por probar como hipótesis nula que θ=0 , por lo que, mantenemos los mismos criterios de decisión y el mismo estadístico de prueba, lo que causa que en R se nos facilita la evaluación de esta prueba, ya que, solo nos basamos en cambiar lags dependiendo de la serie de tiempo que estemos tratando y corregimos mediantes diferencias que se van aplicando constantemente hasta obtener un modelo estacionario.
En esta versión ampliada de la prueba los valores críticos y la regla de rechazo son los mismos que las versiones anteriores, ya que a pesar de agregar rezagos a la ecuación, el enfoque general de la prueba sigue siendo el mismo: evaluar si la serie temporal tiene una raíz unitaria, no obstante, en cuantos más rezagos se incluyan se pierden más observaciones iniciales, por lo que, si se incluyen demasiados la prueba se ve afectada, aunque si son muy pocos esto también afecta causando una respuesta incorrecta, por ello, se recomienda que para datos anuales suele bastar con 1 o 2 rezagos, pero para datos mensuales se deberían incluir 12, cabe aclarar que esta no es una regla estricta.
Para saber cuántos son los lags que debemos utilizar según Gujarati (2010) se trata básicamente de un asunto empírico. Una regla práctica es calcular la función de autocorrelación (FAC) hasta un tercio o una cuarta parte de la longitud de la serie de tiempo.
Por otra parte, también podemos utilizar cualquiera de las siguientes pruebas, según Test de Dickey Fuller Aumentado En r - YouTube (2021) nos podemos apoyar del criterio de información de Akaike (AIC, por sus siglas en inglés) o también nos podemos apoyar del criterio de información Bayesiano (BIC), algo que se permite a través de la librería tseries mediante el comando adf.test, con tan solo especificarle la serie de datos nos devuelva los lags pertinentes, donde se conoce que dicho dato lo regresa acorde a una fórmula que es k=trunc((length(x)−1)1/3) en la cual se pide que se trunque el resultado a un número entero al calcular la raíz cúbica del resultado de restar 1 a la longitud del vector ‘x’.
Debemos iniciar especificando que si yt sigue yt=α+ρyt−1+et , tiene un raíz unitaria si y solo si ρ=1 .
A partir de ello, determinamos que un modelo con caminata aleatoria y sin deriva (sin tendencia) se representa como α=0 y ρ=1 , siendo acá donde se satisface la ecuación E(et|yt−1,yt−2,…,y0)=0 , por otro lado, el modelo con caminata aleatoria con deriva (con tendencia) implica que α≠0 y ρ=1 , lo que significa E(yt) es una función lineal de t . Ambos modelos se comportan de manera diferente, pero es común dejar α sin especificar, siendo este un criterio que se adoptará para determinar la hipótesis nula y alternativa.
La prueba de raíz unitaria se realiza evaluando si:
Ho: θ=0 (equivalente a ρ=1 ). Si θ es cero, indica que la serie temporal tiene una raíz unitaria, lo que implica la falta de estacionariedad. Está hipótesis es con base en que si la serie tiene una raíz unitaria, las diferencias entre los valores sucesivos de la serie no convergen a cero, por lo que, sugiere la presencia de tendencias o patrones persistentes a lo largo del tiempo, lo que afectaría la constancia y previsibilidad de la serie.
H1: θ≠0 (equivalente a ρ<1 ). Si θ es diferente de cero, sugiere que la serie es estacionaria y más manejable desde el punto de vista analítico. Esto implica que θ se utiliza para determinar como la serie cambia de un período a otro respecto a su valor anterior.
De acuerdo con el texto de Wooldridge (2009) se menciona: En la práctica, al realizar una Prueba de Raíz Unitaria para un proceso AR(1), se establece que 0<ρ<1 , ya que ρ=0 sería inusual en una serie que se sospecha tiene una raíz unitaria. La alternativa H1:ρ>1 generalmente no se considera, ya que implicaría que la serie yt es explosiva, con una tendencia exponencial en su media cuando ρ>1 .
Cuando |ρ|<1 , el proceso AR(1) es estable, lo que significa que es débilmente dependiente o no se correlaciona asintóticamente. La correlación entre yt y yt+h tiende a cero cuando h se acerca a cero (Corr(yt,yt+h)→0 cuando |ρ|<1 ).
La prueba de raíz unitaria en el modelo yt con la alternativa ρ>1 es en realidad una prueba de si yt es I(1) (tiene una raíz unitaria) en comparación con la alternativa de que yt sea I(0) (es estacionaria). No se toma la hipótesis nula como I(0) debido a que yt es I(0) para cualquier valor de ρ estrictamente entre -1 y 1, lo cual las pruebas de hipótesis clásicas no manejan fácilmente.
Librerías a utilizar:
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
Prueba de Dickey-Fuller ur.df (x, type = c (“none”, “drift”, “trend”), lags = 1, selectlags = c (“Fixed”, “AIC”, “BIC”))
Argumentos:
x: Es el vector que se someterá a la prueba de raíz unitaria.
type: Indica el tipo de prueba (“none” para ninguna intersección ni tendencia, “drift” para una intersección, “trend” para una intersección y una tendencia).
lags: Especifica el número de rezagos a considerar.
selectlags: Permite la selección de los retardos según los criterios de Akaike (“AIC”) o Bayes (“BIC”). Se establece el número máximo de rezagos mediante el parámetro lags, con el valor predeterminado de utilizar una longitud de retraso fija definida por lags.
Prueba de Dickey Fuller Aumentada
adf.test (x, k = 1)
Argumentos:
x: Un vector numérico o una serie de tiempo univariante que se someterá a la prueba.
k: Indica el orden de retraso con el valor predeterminado para calcular la estadística de prueba, el cual, se puede dejar sin especificar para que la misma prueba devuelva un resultado con base a la siguiente fórmula: k=trunc((length(x)−1)1/3)
Para la implementación en R utilizaremos las librerías urca y tseries, ocuparemos ciertos datos financieros que descargaremos de Yahoo Finance y seguiremos la aplicación en R que se detalla en el libro de Miguel Angel Mendoza (2016) del capítulo 9 y apartado 3.
# Carga de paquete para la obtención de datos financieros
library(quantmod)
# Descarga los precios de cierre diarios de TSLA desde Yahoo Finance
getSymbols("TSLA", # Descarga los datos y los asigna a la variable 'TSLA'
src = "yahoo", # Indica que se están obteniendo los datos de Yahoo Finance
from = "2022-01-01", # Especifica la fecha de inicio de los datos
to = "2023-11-18", # Especifica la fecha final
auto.assign = TRUE) # Indica que los datos se asignarán automáticamente a la variable especificada (en este caso, 'TSLA')## [1] "TSLA"
# Extraer los precios de cierre ajustados de la serie temporal 'TSLA'
# 'Ad(TSLA)' utiliza la función 'Ad' para obtener los precios de cierre ajustados
serie_tsla <- Ad(TSLA)# Se asigna el logaritmo de la variable de serie de tiempo al objeto serie_tsla y se aplica la primera y segunda diferencia
log_serie_tsla<-log(serie_tsla)
diff1_tsla<-diff(log_serie_tsla, 1)
diff2_tsla<-diff(diff1_tsla, 1)
# El aplicar logaritmo es una transformación común para estabilizar la varianza y hacer que los datos sean más interpretables# Para analizar el comportamiento de los precios de cierre diarios de TSLA se grafica log_serie_tsla
library(TSstudio)
ts_plot(log_serie_tsla,
Xtitle = "Años/Meses",
title = "Logaritmo de la serie TESLA")En la gráfica se observa el comportamiento de los precios de cierre diarios de TESLA, donde destaca que la tendencia puede explicarse como rotura de tendencia bajista.
# Comportamiento de la primera y segunda diferencia
# Se combinan los datos de la primera y segunda diferencia
combina<-cbind(diff1_tsla, diff2_tsla)
# Eliminando los NA
combina<-combina[complete.cases(combina),]
# Gráfica de ambos datos
ts_plot(combina,
title = "Diferencias del logaritmo de la serie TESLA",
Xtitle = "Años/Meses")De está gráfica se puede observar que con la primera diferencia que se muestra en azul se estabiliza la media del logaritmo. Para revisar si se puede mejorar la estabilidad de la media y la varianza se aplica la segunda diferencia que se muestra en anaranjado y la gráfica muestra que se mejora la estabilidad, sin embargo, convendría aplicar la prueba ADF para cada una de las diferencias y determinar si es suficiente aplicar la primera diferencia o se necesita de la segunda diferencia.
Utilizando libraría urca:
library(urca) # Importar la biblioteca 'urca' que proporciona funciones para realizar pruebas de raíces unitarias
df <- ur.df(serie_tsla, # Aplicar la prueba Dickey-Fuller a la serie de tiempo
type="trend", # Indica que tipo de modelo se esta considerando
# Caminata aleatoria pura (none); Caminata aleatoria con constante (drift); Caminata aleatoria con constante, tendencia estocástica y determinística (trend)
lags = 4, # Especifica la cantidad de retardos que se utilizan en la prueba
selectlags=c("AIC")) # Indica el criterio de información a utilizar para seleccionar el número óptimo de retardos.
summary(df) #Impresión de un resumen de los resultados##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -36.105 -4.927 0.272 5.484 32.831
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.558681 2.603952 1.751 0.08067 .
## z.lag.1 -0.018794 0.008609 -2.183 0.02954 *
## tt -0.001117 0.003562 -0.314 0.75403
## z.diff.lag1 -0.023822 0.046092 -0.517 0.60551
## z.diff.lag2 0.027738 0.046048 0.602 0.54723
## z.diff.lag3 -0.049919 0.045809 -1.090 0.27640
## z.diff.lag4 0.126205 0.045778 2.757 0.00607 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.167 on 461 degrees of freedom
## Multiple R-squared: 0.0323, Adjusted R-squared: 0.0197
## F-statistic: 2.564 on 6 and 461 DF, p-value: 0.01875
##
##
## Value of test-statistic is: -2.183 1.8743 2.6953
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.98 -3.42 -3.13
## phi2 6.15 4.71 4.05
## phi3 8.34 6.30 5.36
Podemos agregar la evaluación con la librería tseries, usando el comando adf.test, teniendo en consideración que se estaría evaluando la prueba DF aumentada, por tanto, tenemos un caso que por default es una versión con tendencia e intercepto, por lo que, los resultados con urca cuando la versión que se especifica es trend serán los mismos con el reultado que se obtenga con la librería tseries.
library(tseries) # Importar la biblioteca 'tseries' que proporciona funciones para realizar pruebas de raíces unitarias ADF
adf.test (serie_tsla, # Aplicar la prueba Dickey-Fuller aumentada a la serie de tiempo
k = 4) # Especifica la cantidad de retardos que se utilizan en la prueba##
## Augmented Dickey-Fuller Test
##
## data: serie_tsla
## Dickey-Fuller = -2.183, Lag order = 4, p-value = 0.5006
## alternative hypothesis: stationary
Con el criterio de Akaike se encontró que el valor mínimo se obtiene con una estructura de cuatro rezagos, lo que podemos visualizar en la parte de los ceficientes, específicamente en los lags (z.diff.lag#) donde el p-value del lag=4 es de 0.00116 lo que lo hace menor al nivel de significancia 0.05. Los resultados de la prueba ADF no nos permiten rechazar la hipótesis de raíz unitaria debido a que tau estimada es menor en valor absoluto al valor critico del 5% de la prueba: 2.183 < 3.42 En conclusión la serie no es estacionaria y por tanto el orden de integración es mayor a cero.
Ahora podemos aplicar el análisis anterior aplicando la prueba ADF con constante y sin constante, ni tendencia.
library(urca)
# Caminata aleatoria pura
df_none <- ur.df(serie_tsla,
type="none",
lags = 4,
selectlags=c("AIC"))
summary(df_none)##
## ###############################################
## # 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
## -37.357 -4.420 0.383 5.315 32.381
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -0.001713 0.001734 -0.988 0.32358
## z.diff.lag1 -0.031143 0.045973 -0.677 0.49848
## z.diff.lag2 0.021367 0.045954 0.465 0.64217
## z.diff.lag3 -0.055879 0.045712 -1.222 0.22217
## z.diff.lag4 0.121579 0.045729 2.659 0.00812 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.193 on 463 degrees of freedom
## Multiple R-squared: 0.02316, Adjusted R-squared: 0.01262
## F-statistic: 2.196 on 5 and 463 DF, p-value: 0.05368
##
##
## Value of test-statistic is: -0.9882
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
# Caminata aleatoria con constante, tendencia estocástica y determinística
df_trend <- ur.df(serie_tsla,
type="drift",
lags = 4,
selectlags=c("AIC"))
summary(df_trend)##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression drift
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -36.053 -4.955 0.179 5.406 32.990
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.991459 1.870955 2.133 0.03342 *
## z.lag.1 -0.017541 0.007617 -2.303 0.02174 *
## z.diff.lag1 -0.025025 0.045887 -0.545 0.58577
## z.diff.lag2 0.026531 0.045842 0.579 0.56304
## z.diff.lag3 -0.051170 0.045591 -1.122 0.26228
## z.diff.lag4 0.125045 0.045584 2.743 0.00632 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.158 on 462 degrees of freedom
## Multiple R-squared: 0.03209, Adjusted R-squared: 0.02162
## F-statistic: 3.064 on 5 and 462 DF, p-value: 0.009869
##
##
## Value of test-statistic is: -2.3027 2.7677
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau2 -3.44 -2.87 -2.57
## phi1 6.47 4.61 3.79
En ambos casos vemos que el valor de tau es menor al valor crítico, de tal manera que hay presencia de una raíz unitaria, los resultados concuerdan. En conclusión la serie de los precios ajustados de TESLA no son estacionarios y por tanto el orden de integración es mayor a cero.
Para determinar el orden de integración de las variables, se aplican las pruebas ADF con sus tres posibilidades: 1) sin tendencia, ni constante; 2) con constante; y, 3) con constante y tendencia, a la primera diferencia del logaritmo de la serie TSLA.
# Pruebas con la primera diferencia
# Quitando los NA
diff1_tsla<-diff1_tsla[complete.cases(diff1_tsla),]
df1_none <- ur.df(diff1_tsla,
type="none",
lags = 4,
selectlags=c("AIC"))
summary(df1_none)##
## ###############################################
## # 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.121410 -0.022145 0.000944 0.021013 0.107935
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 -0.87658 0.09292 -9.433 < 2e-16 ***
## z.diff.lag1 -0.14462 0.07991 -1.810 0.07096 .
## z.diff.lag2 -0.11591 0.06582 -1.761 0.07888 .
## z.diff.lag3 -0.14821 0.04597 -3.224 0.00135 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.03853 on 463 degrees of freedom
## Multiple R-squared: 0.5268, Adjusted R-squared: 0.5227
## F-statistic: 128.9 on 4 and 463 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -9.4333
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression drift
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.120699 -0.021464 0.001679 0.021745 0.108628
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.0007301 0.0017865 -0.409 0.68296
## z.lag.1 -0.8784059 0.0931152 -9.434 < 2e-16 ***
## z.diff.lag1 -0.1432052 0.0800523 -1.789 0.07429 .
## z.diff.lag2 -0.1148867 0.0659234 -1.743 0.08205 .
## z.diff.lag3 -0.1476386 0.0460314 -3.207 0.00143 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.03856 on 462 degrees of freedom
## Multiple R-squared: 0.527, Adjusted R-squared: 0.5229
## F-statistic: 128.7 on 4 and 462 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -9.4335 44.4968
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau2 -3.44 -2.87 -2.57
## phi1 6.47 4.61 3.79
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.119069 -0.021759 0.001261 0.021863 0.110757
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.205e-03 3.640e-03 -0.880 0.37911
## z.lag.1 -8.847e-01 9.351e-02 -9.462 < 2e-16 ***
## tt 1.037e-05 1.329e-05 0.780 0.43559
## z.diff.lag1 -1.383e-01 8.033e-02 -1.721 0.08584 .
## z.diff.lag2 -1.116e-01 6.608e-02 -1.689 0.09192 .
## z.diff.lag3 -1.460e-01 4.610e-02 -3.167 0.00164 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.03858 on 461 degrees of freedom
## Multiple R-squared: 0.5276, Adjusted R-squared: 0.5225
## F-statistic: 103 on 5 and 461 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -9.4617 29.8424 44.7626
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.98 -3.42 -3.13
## phi2 6.15 4.71 4.05
## phi3 8.34 6.30 5.36
##
## Augmented Dickey-Fuller Test
##
## data: diff1_tsla
## Dickey-Fuller = -9.0653, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
Resultados:
Caminata aleatoria pura: tau es mayor al valor crítico con nivel de significancia de 5% (9.43 > 1.95). Caminata aleatoria con constante: tau es mayor al valor crítico con nivel de significancia de 5% (9.43 > 2.87). Caminata aleatoria con tendencia y constante: tau es mayor al valor crítico con nivel de significancia de 5% (9.46 > 3.42); p-value es menor al nivel de significancia (0.01 < 0.05).
Intepretación: Efectuando los tres tipos de pruebas se rechaza la hipótesis de raíz unitaria por lo que se puede concluir que la serie es integrada de orden uno I(1).
A partir de la sintaxis de implementación en R de la prueba podemos explicar el estadístico de la prueba, incluyendo el criterio de decisión para poder dar interpretación a los resultados obtenidos de los precios de cierre ajustados de la compañía TESLA para el año 2022 hasta el año actual.
El estadístico de prueba τ en la prueba de Dickey-Fuller en R se utiliza para verificar si un parámetro crucial en el modelo es igual a cero, lo que sugiere la presencia de una raíz unitaria en la serie temporal. Debido a la no estacionariedad bajo la hipótesis nula (H0), no podemos aplicar directamente el teorema del límite central al τ , en cambio, utilizamos la distribución de Dickey-Fuller en R para comprender la importancia estadística del τ .
Para facilitar la interpretación y aplicación de la prueba en R, hemos obtenido los valores necesarios mediante la librería urca, de los cuales, podemos interpretar los datos del p-value resultante o del estadístico de prueba τ en comparación con el nivel de significancia (0.05) o el valor crítico, respectivamente, lo que nos evita la tabulación de datos y simplifica el proceso.
Para detallar el estadístico de prueba nos apoyaremos de los resultados obtenidos en primera instancia con la sintaxis de la implementación en R, es por ello que tenemos la siguiente explicación acorde con el resultado de la librería urca:
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend (En este apartado de trend aparece la versión de la prueba que se está aplicando)
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -36.105 -4.927 0.272 5.484 32.831
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.558681 2.603952 1.751 0.08067 .
## z.lag.1 -0.018794 0.008609 -2.183 0.02954 *
## tt -0.001117 0.003562 -0.314 0.75403
## z.diff.lag1 -0.023822 0.046092 -0.517 0.60551
## z.diff.lag2 0.027738 0.046048 0.602 0.54723
## z.diff.lag3 -0.049919 0.045809 -1.090 0.27640
## z.diff.lag4 0.126205 0.045778 2.757 0.00607 ** En la columna de Pr(>|t|) se muestran los p-value para cada lag o rezago que se aplique, nos basta con que sea un p-value menor a 5%, lo que indicará el rezago más adecuado para aplicar.
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.167 on 461 degrees of freedom
## Multiple R-squared: 0.0323, Adjusted R-squared: 0.0197
## F-statistic: 2.564 on 6 and 461 DF, p-value: 0.01875
##
##
## Value of test-statistic is: -2.183 1.8743 2.6953 En esta parte se presenta el estadístico tau, donde nos centramos en el primer valor reflajado de -2.183, específicamente en su valor abosluto, el cual se ha de comparar respecto al valor tau crítico o valor crítico que se presenta en el cuadro de abajo.
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.98 -3.42 -3.13 Con un nivel de significancia de 5% (5pct) y reflejado como tau3 se tiene el valor crítico que es -3.42
## phi2 6.15 4.71 4.05
## phi3 8.34 6.30 5.36Ahora tenemos la siguiente explicación acorde con el resultado de la librería tseries:
##
## Augmented Dickey-Fuller Test (Esta librería se aplica esencialmente para una prueba de Dickey y Fuller aumentada)
##
## data: serie_tsla
## Dickey-Fuller = -2.183, Lag order = 4, p-value = 0.5006
## alternative hypothesis: stationary
## Dickey-Fuller = -2.183 es el valor estadístico o simplemente tau
## Lag order = 4 son los rezagos que se han considerado
## p-value = 0.5006 es el valor que se compararía con el nivel de significancia de 5% para interpretación de la pruebaNo se rechaza la hipótesis nula.{|τ|<|V.C|p-value>0.05
Se rechaza la hipótesis nula.{|τ|>|V.C|p-value<0.05
Explicación de como se pueden interpretar los datos de acuerdo con los resultados que se puedan obtener:
Si |τ|<|τcrítico| y p-value > 0.05, entonces no se rechaza la hipótesis nula y se tiene evidencia que la serie temporal no es estacionaria y presenta una raíz unitaria, lo que indica la presencia de patrones o tendencias que persisten en el tiempo que pueden hacer que la serie sea menos predecible y más variable.
Si |τ|>|τcrítico| y p-value < 0.05, entonces se rechaza la hipótesis nula y se tiene evidencia que la serie temporal es estacionaria y no presenta una raíz unitaria, lo que indica que no hay presencia de patrones o tendencias que persistan en el tiempo haciendo que la serie sea más predecible y menos variable.
Se debe realizar la prueba de Dickey-Fuller para determinar si la serie temporal “AirPassengers” es estacionaria o necesita ser diferenciada para lograr la estacionariedad, de lo cual se debe concluir entonces con el orden de integración.
# Cargar el conjunto de datos
data(AirPassengers)
# Verificar las primeras filas de la columna DAX
head(AirPassengers)## [1] 112 118 132 129 121 135
# Tomar logaritmos de los datos
log_air<- log(AirPassengers)
# Generar la primera diferencia
diff1_log_air <- diff(log_air, 1)
# Generar la segunda diferencia
diff2_log_air<- diff(diff1_log_air, 1)# Analizamos el comportamiento de los datos mediante gráficas
library(TSstudio)
# Grafica
ts_plot(log_air,
Xtitle = "Años/Meses",
title = "Logaritmo de la serie mensual AirPassengers (1949-1960)")Interpretación: En la gráfica se observa el comportamiento de la cantidad mensual de pasajeros internacionales de aerolíneas (miles), desde 1949 hasta 1960, donde destaca que una marcada tendencia, por lo que, se tiene en consideración agregar tendencia y constante.
# Comportamiento de la primera y segunda diferencia
# Se combinan los datos de la primera y segunda diferencia
combina_air<-cbind(diff1_log_air, diff2_log_air)
# Gráfica de ambos datos
ts_plot(combina_air,
title = "Diferencias del logaritmo de la serie temporal de AirPassengers (1949-1960)",
Xtitle = "Años/Meses")Interpretación: Por medio de está gráfica se puede observar que con la primera diferencia que se muestra en azul se estabiliza la media del logaritmo. Para revisar si se puede mejorar la estabilidad de la media y la varianza se aplica la segunda diferencia que se muestra en anaranjado y la gráfica muestra que se mejora más la estabilidad y por tanto puede ser necesario tender a aplicar la segunda diferencia.
library(urca)
# Caminata aleatoria con tendencia y constante
df_air <- ur.df(log_air,
type="trend",
lags = 12, # Elegimos un lag de 12, ya que, conocemos que son datos mensuales
selectlags=c("AIC"))
summary(df_air)##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.106413 -0.021888 -0.002483 0.022499 0.113217
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.6815772 0.4113000 1.657 0.100196
## z.lag.1 -0.1327437 0.0866197 -1.532 0.128125
## tt 0.0011675 0.0008854 1.319 0.189900
## z.diff.lag1 -0.1219509 0.1114312 -1.094 0.276044
## z.diff.lag2 -0.2088775 0.1073422 -1.946 0.054085 .
## z.diff.lag3 -0.1782933 0.1013791 -1.759 0.081269 .
## z.diff.lag4 -0.2478058 0.0977496 -2.535 0.012573 *
## z.diff.lag5 -0.1715613 0.0914730 -1.876 0.063233 .
## z.diff.lag6 -0.2421693 0.0875050 -2.767 0.006577 **
## z.diff.lag7 -0.2225068 0.0843831 -2.637 0.009514 **
## z.diff.lag8 -0.3282357 0.0825288 -3.977 0.000122 ***
## z.diff.lag9 -0.2122753 0.0802073 -2.647 0.009260 **
## z.diff.lag10 -0.3034244 0.0773964 -3.920 0.000150 ***
## z.diff.lag11 -0.2134502 0.0760974 -2.805 0.005902 **
## z.diff.lag12 0.5816486 0.0747977 7.776 3.36e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.04199 on 116 degrees of freedom
## Multiple R-squared: 0.8647, Adjusted R-squared: 0.8484
## F-statistic: 52.95 on 14 and 116 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -1.5325 7.7556 2.7865
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
##
## Augmented Dickey-Fuller Test
##
## data: log_air
## Dickey-Fuller = -1.5325, Lag order = 12, p-value = 0.7711
## alternative hypothesis: stationary
Interpretación: Ya que |τ|<|τcrítico|: 1.5325 < 3.43 y el p-value > 0.05: 0.7711 > 0.05, entonces no se rechaza la hipótesis nula y se tiene evidencia que la serie temporal no es estacionaria y presenta una raíz unitaria, lo que indica la presencia de patrones o tendencias que persisten en el tiempo que pueden hacer que la serie sea menos predecible y más variable.
Aplicamos la misma prueba para una versión solo con constante y una versión sin constante ni tendencia:
# Caminata aleatoria sin tendencia ni constante
df_air_none <- ur.df(log_air,
type="none",
lags = 12,
selectlags=c("AIC"))
summary(df_air_none)##
## ###############################################
## # 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.103864 -0.023652 -0.001455 0.022160 0.126649
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 0.005439 0.001436 3.787 0.000241 ***
## z.diff.lag1 -0.198813 0.072080 -2.758 0.006737 **
## z.diff.lag2 -0.273730 0.073309 -3.734 0.000292 ***
## z.diff.lag3 -0.233607 0.072258 -3.233 0.001589 **
## z.diff.lag4 -0.293133 0.073926 -3.965 0.000126 ***
## z.diff.lag5 -0.206562 0.072058 -2.867 0.004915 **
## z.diff.lag6 -0.266919 0.071493 -3.734 0.000292 ***
## z.diff.lag7 -0.234526 0.071847 -3.264 0.001436 **
## z.diff.lag8 -0.327393 0.073197 -4.473 1.79e-05 ***
## z.diff.lag9 -0.198455 0.073623 -2.696 0.008054 **
## z.diff.lag10 -0.279931 0.072710 -3.850 0.000192 ***
## z.diff.lag11 -0.176122 0.073011 -2.412 0.017394 *
## z.diff.lag12 0.627402 0.072683 8.632 3.34e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.04308 on 118 degrees of freedom
## Multiple R-squared: 0.8564, Adjusted R-squared: 0.8406
## F-statistic: 54.14 on 13 and 118 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: 3.7872
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.58 -1.95 -1.62
# Caminata aleatoria con constante
df_air_drift <- ur.df(log_air,
type="drift",
lags = 12,
selectlags=c("AIC"))
summary(df_air_drift)##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression drift
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.111372 -0.023197 -0.000526 0.022918 0.117195
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.14446 0.05713 2.529 0.012778 *
## z.lag.1 -0.01927 0.00987 -1.952 0.053330 .
## z.diff.lag1 -0.23447 0.07188 -3.262 0.001451 **
## z.diff.lag2 -0.31255 0.07331 -4.263 4.10e-05 ***
## z.diff.lag3 -0.27231 0.07230 -3.766 0.000261 ***
## z.diff.lag4 -0.33246 0.07395 -4.496 1.64e-05 ***
## z.diff.lag5 -0.24605 0.07218 -3.409 0.000895 ***
## z.diff.lag6 -0.30851 0.07182 -4.296 3.62e-05 ***
## z.diff.lag7 -0.27991 0.07251 -3.860 0.000186 ***
## z.diff.lag8 -0.37657 0.07417 -5.077 1.46e-06 ***
## z.diff.lag9 -0.25085 0.07492 -3.348 0.001094 **
## z.diff.lag10 -0.33350 0.07419 -4.495 1.65e-05 ***
## z.diff.lag11 -0.23307 0.07486 -3.113 0.002327 **
## z.diff.lag12 0.57051 0.07455 7.652 6.15e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.04212 on 117 degrees of freedom
## Multiple R-squared: 0.8627, Adjusted R-squared: 0.8474
## F-statistic: 56.53 on 13 and 117 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -1.952 10.6966
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau2 -3.46 -2.88 -2.57
## phi1 6.52 4.63 3.81
Interpretación: Los resultados ahora muestran consistencia con el comportamiento de la serie de tiempo de AirPassenger en la gráfica anterior. Esto es, con el estadístico ADF con constante no se puede rechazar la hipótesis de raíz unitaria debido a que la tau estimada es menor en valor absoluto al valor crítico del 5% de la prueba: 1.952 < 2.88. En el caso de la prueba ADF sin constante y tendencia, el resultado muestra que la tau es positiva y con ello se indica que se encuentra en el caso de una raíz característica mayor que uno. En los dos casos, los resultados concuerdan con el hecho de tener una serie con tendencia determinista. En conclusión la serie de AirPassengers no es estacionaria y por tanto el orden de integración es mayor a cero.
A partir de acá solo nos centramos en evaluar los resultados con base a que el tipo de modelo considerado es “trend”, es decir, caminata aleatoria con constante y tendencia.
Para corregir ese problema se aplica la prueba a la primera diferencia:
# Caminata aleatoria con tendencia y constante
# Librería urca
df1_air <- ur.df(diff1_log_air,
type="trend",
lags = 12,
selectlags=c("AIC"))
summary(df1_air)##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.09788 -0.02072 -0.00344 0.02193 0.10109
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.851e-02 1.313e-02 2.933 0.00406 **
## z.lag.1 -2.676e+00 7.950e-01 -3.366 0.00104 **
## tt -1.477e-04 9.979e-05 -1.480 0.14164
## z.diff.lag1 1.263e+00 7.623e-01 1.656 0.10037
## z.diff.lag2 9.973e-01 7.002e-01 1.424 0.15709
## z.diff.lag3 8.069e-01 6.336e-01 1.274 0.20539
## z.diff.lag4 5.316e-01 5.697e-01 0.933 0.35271
## z.diff.lag5 3.807e-01 5.025e-01 0.758 0.45021
## z.diff.lag6 1.397e-01 4.405e-01 0.317 0.75168
## z.diff.lag7 -6.398e-02 3.773e-01 -0.170 0.86565
## z.diff.lag8 -3.776e-01 3.149e-01 -1.199 0.23289
## z.diff.lag9 -5.342e-01 2.491e-01 -2.145 0.03406 *
## z.diff.lag10 -7.901e-01 1.885e-01 -4.191 5.47e-05 ***
## z.diff.lag11 -9.327e-01 1.318e-01 -7.075 1.25e-10 ***
## z.diff.lag12 -2.890e-01 8.855e-02 -3.264 0.00145 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.04074 on 115 degrees of freedom
## Multiple R-squared: 0.9203, Adjusted R-squared: 0.9105
## F-statistic: 94.79 on 14 and 115 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -3.3656 3.8693 5.8033
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
##
## Augmented Dickey-Fuller Test
##
## data: diff1_log_air
## Dickey-Fuller = -3.3656, Lag order = 12, p-value = 0.06313
## alternative hypothesis: stationary
Interpretación: Nuevamente |τ|<|τcrítico|: 3.3656 < 3.43 y el p-value > 0.05: 0.06313 > 0.05, entonces no se rechaza la hipótesis nula y se tiene evidencia que la serie temporal no es estacionaria y presenta una raíz unitaria, lo que indica la presencia de patrones o tendencias que persisten en el tiempo que pueden hacer que la serie sea menos predecible y más variable.
Volvemos a aplicar la prueba ahora para la segunda diferencia:
# Caminata aleatoria con tendencia y constante
# Librería urca
df2_air <- ur.df(diff2_log_air,
type="trend",
lags = 12,
selectlags=c("AIC"))
summary(df2_air)##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.107376 -0.024107 -0.007095 0.027827 0.109327
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.542e-03 8.646e-03 0.410 0.683
## z.lag.1 -1.592e+01 1.047e+00 -15.199 < 2e-16 ***
## tt -4.596e-05 1.011e-04 -0.455 0.650
## z.diff.lag1 1.363e+01 9.687e-01 14.065 < 2e-16 ***
## z.diff.lag2 1.228e+01 8.848e-01 13.883 < 2e-16 ***
## z.diff.lag3 1.098e+01 7.992e-01 13.734 < 2e-16 ***
## z.diff.lag4 9.613e+00 7.112e-01 13.516 < 2e-16 ***
## z.diff.lag5 8.329e+00 6.235e-01 13.357 < 2e-16 ***
## z.diff.lag6 7.019e+00 5.347e-01 13.128 < 2e-16 ***
## z.diff.lag7 5.723e+00 4.444e-01 12.878 < 2e-16 ***
## z.diff.lag8 4.331e+00 3.537e-01 12.244 < 2e-16 ***
## z.diff.lag9 3.016e+00 2.626e-01 11.484 < 2e-16 ***
## z.diff.lag10 1.668e+00 1.734e-01 9.618 < 2e-16 ***
## z.diff.lag11 4.037e-01 8.592e-02 4.698 7.33e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.04268 on 115 degrees of freedom
## Multiple R-squared: 0.9657, Adjusted R-squared: 0.9618
## F-statistic: 249.1 on 13 and 115 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: -15.1993 77.0132 115.5098
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
##
## Augmented Dickey-Fuller Test
##
## data: diff2_log_air
## Dickey-Fuller = -8.4444, Lag order = 12, p-value = 0.01
## alternative hypothesis: stationary
Interpretación: Ahora |τ|>|τcrítico|: 15.1993 > 3.43 y p-value < 0.05: 0.01 < 0.05, entonces se rechaza la hipótesis nula y se tiene evidencia que la serie temporal es estacionaria en segunda diferencia y no presenta una raíz unitaria, lo que indica que no hay presencia de patrones o tendencias que persistan en el tiempo haciendo que la serie sea más predecible y menos variable, por lo que se puede concluir que la serie es integrada de orden dos I(2).
NOTA: Tanto para la explicación de la sintaxis en R de la prueba DF y ADF como para la implementación del ejercicio se han utilizado datos que ya están guardados como series temporales, en ese sentido, si se necesita exportar datos (como por ejemplo desde excel) se deberán guardar los datos como series temporales, dependiendo del tipo de análisis y visualización que se planea realizar, de esa forma se podrán generar gráficas parecidas a las que son planteadas en el ejercicio para la interpretación de los datos de manera más adecuada.
El propósito de la prueba de cointegración en el enfoque de Soren Johansen es determinar si dos o más series de tiempo se mueven en la misma tendencia a lo largo del tiempo. La prueba de cointegración de Johansen es un método estadístico que se utiliza para: -Determinar el número de relaciones de cointegración entre un conjunto de variables de series de tiempo. -Probar relaciones de equilibrio a largo plazo entre series de tiempo económicas. -Evitar los problemas que se crean cuando los errores se trasladan al siguiente paso.
H0 r=0, no existe presencia de cointegración entre las variables en estudio.
H1 r>0, hay presencia de una relación de cointegración entre las variables.
ca.jo(x, type = c(“eigen”, “trace”), ecdet = c(“none”, “const”, “trend”), K = 2, spec=c(“longrun”, “transitory”), season = NULL, dumvar = NULL)
Donde: x = Matriz de información a aplicar el test. type = El tipo de prueba a realizar. ecdet = Indica si la cointegración presentará o no intercepto, constante y tendencia. k = Orden de rezagos de las variables. spec = Determina la especificación del VECM season = Si se incluyen variables estacionales ficticias, la frecuencia de los datos debe ajustarse en consecuencia, es decir, “4” para datos trimestrales dumvar = Si se deben incluir variables ficticias, puede presentar una matriz con una dimensión de fila igual a x.
Para este caso, Johansen presenta dos pruebas que pueden utilizarse (ambas basadas en el criterio de máxima verosimilitud), teniendo por tanto dos posibles estadísticos de prueba, los cuales explica (“RPubs - Cointegración” n.d.):
El estadístico de prueba de la traza es efectuada en la secuencia r=n−1,…,1,0 y verifica la H0 de que el rango de cointegración es r en contraste a la H1 de que dicho rango es n El estadístico de prueba del autovalor máximo se efectúa en la secuencia r=0,1,…,n−1 y verifica la H0 de que el rango de cointegración es r en contraste a la H1 de que dicho rango es r+1.
Aplicando el método del valor crítico, al rechazar H0=0, se procede nuevamente a hacer el contraste de hipótesis, ahora con H0=1, teniendo H1=2, y así sucesivamente se repite el proceso hasta que no se rechace H0.
Al rechazar H0=0, se tendrá que las series de tiempo analizadas presentan cointegración, el largo del vector de cointegración lo determinará el valor de que le correspondió a la última H0 no rechazada.
https://www.youtube.com/watch?v=VjMLj7crVkw Ejercicio tomado del canal de youtube de Justin Eloriaga. [@YouTube_2020]
## Warning: package 'forecast' was built under R version 4.3.3
## Warning: package 'tidyverse' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::first() masks xts::first()
## ✖ dplyr::lag() masks stats::lag()
## ✖ dplyr::last() masks xts::last()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Rows: 69 Columns: 15
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Date
## dbl (14): CPI, GDP, lnCPI, lnGDP, M4, M3, M1, lnM4, lnM3, lnM1, M2, lnM2, Co...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
variables de series temporales
GDP <- ts(Datos$lnGDP, start = c(2003,1,31), frequency = 4)
CPI <- ts(Datos$lnCPI, start = c(2003,1,31), frequency = 4)
M3 <- ts(Datos$lnM3, start = c(2003,1,31), frequency = 4)Vincular las variables de series temporales en un objeto y seleccionar los lags
library(vars)
dset <- cbind(GDP,CPI,M3)
lagselect <- VARselect(dset, lag.max = 7, type = "const")
lagselect$selection## AIC(n) HQ(n) SC(n) FPE(n)
## 6 5 4 5
lags son los optimos para utilizar Traza
##
## ######################
## # Johansen-Procedure #
## ######################
##
## Test type: trace statistic , without linear trend and constant in cointegration
##
## Eigenvalues (lambda):
## [1] 7.408536e-01 2.831294e-01 1.143077e-01 -1.025883e-16
##
## Values of teststatistic and critical values of test:
##
## test 10pct 5pct 1pct
## r <= 2 | 7.89 7.52 9.24 12.97
## r <= 1 | 29.53 17.85 19.96 24.60
## r = 0 | 117.30 32.00 34.91 41.07
##
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
##
## GDP.l4 CPI.l4 M3.l4 constant
## GDP.l4 1.0000000 1.000000 1.0000000 1.000000000
## CPI.l4 -1.9652971 -3.401060 -2.3478809 -1.258575716
## M3.l4 0.1534219 -5.703423 0.1823729 -0.004795708
## constant -4.2100503 15.387818 -4.6126235 -9.216460807
##
## Weights W:
## (This is the loading matrix)
##
## GDP.l4 CPI.l4 M3.l4 constant
## GDP.d 0.027782440 -4.455686e-05 -0.01509218 2.231752e-15
## CPI.d 0.001718154 5.843056e-04 0.01124142 1.957418e-14
## M3.d -0.022303210 5.927883e-02 -0.28911043 -4.671628e-12
-r= 0 <- 117.30 es mayor que 34.91 entonces se rechaza la hipotesis nula y existe cointegración -r= 1 <- 29.53 es mayor a 19.96, por lo tanto se rechaza la hipotesis nula. -r = 2 <- 7.89 es menor a 9.24, por lo tanto no se rechaza la hipotesis nula
Se puede concluir que hay 2 relaciones de cointegración en el modelo Raiz Maxima
##
## ######################
## # Johansen-Procedure #
## ######################
##
## Test type: maximal eigenvalue statistic (lambda max) , without linear trend and constant in cointegration
##
## Eigenvalues (lambda):
## [1] 7.408536e-01 2.831294e-01 1.143077e-01 -1.025883e-16
##
## Values of teststatistic and critical values of test:
##
## test 10pct 5pct 1pct
## r <= 2 | 7.89 7.52 9.24 12.97
## r <= 1 | 21.64 13.75 15.67 20.20
## r = 0 | 87.77 19.77 22.00 26.81
##
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
##
## GDP.l4 CPI.l4 M3.l4 constant
## GDP.l4 1.0000000 1.000000 1.0000000 1.000000000
## CPI.l4 -1.9652971 -3.401060 -2.3478809 -1.258575716
## M3.l4 0.1534219 -5.703423 0.1823729 -0.004795708
## constant -4.2100503 15.387818 -4.6126235 -9.216460807
##
## Weights W:
## (This is the loading matrix)
##
## GDP.l4 CPI.l4 M3.l4 constant
## GDP.d 0.027782440 -4.455686e-05 -0.01509218 2.231752e-15
## CPI.d 0.001718154 5.843056e-04 0.01124142 1.957418e-14
## M3.d -0.022303210 5.927883e-02 -0.28911043 -4.671628e-12
-r = 0 <- 87.77 es mayor a 22.00 por lo tanto, se rechaza la hipotesis nula y existe cointegración -r = 1 <- 21.64 es mayor a 15.67 por lo tanto, se rechaza la hipotesis nula y existe cointegración -r = 2 <- 7.89 es menor a 9.24 por lo tanto no se rechaza la hipotesis nula
Se concluye que hay 2 relaciones de cointegración en el modelo, al igual que en la prueba de la traza.
la prueba de causalidad de Granger se usa para examinar si una serie de tiempo puede usarse para pronosticar otra. Es un test que consistente en comprobar si los resultados de una variable sirven para predecir a otra variable, si tiene carácter unidireccional o bidireccional. Para ello se tiene que comparar y deducir si el comportamiento actual y el pasado de una serie temporal X predice la conducta de una serie temporal Y. Si ocurre el hecho, se dice que “el resultado X” causa en el sentido de Granger “el resultado Y”; el comportamiento es unidireccional. Si sucede lo explicado e igualmente “el resultado Y” predice “el resultado X,” el comportamiento es bidireccional, entonces “el resultado X” causa “el resultado Y,” y “el resultado Y” causa “el resultado X.”
De modo más general, como el futuro no puede predecir el pasado, si la variable X (a la manera de Granger) causa la variable Y, los cambios en X deben preceder a los cambios en Y. Por consiguiente, en una regresión de Y sobre otras variables (con sus propios valores pasados), si incluimos valores pasados o rezagados de X y esto mejora significativamente la predicción de Y, podemos decir que X (a la manera de Granger) causa Y.
Esta prueba genera una estadística de prueba F junto con un valor p.
La Hipotesis Nula H0
Si la serie de tiempo Y no causa en el sentido de granger a la serie de tiempo X, entonces β1, β2,βi serán cero: H0: β1=β2=…=βi=0
La hipótesis alternativa H1
Si la serie de tiempo Y causa en el sentido de granger a la serie de tiempo X, entonces β1, β2,βi serán distintos de cero: H1: β1≠β2=…≠βi≠0
En R, podemos usar la función grangertest () del paquete lmtest para realizar una prueba Granger-Causality, que tiene la siguiente sintaxis:
grangertest(X,Y,orden=1)
Dónde: X: Esta es la primera serie temporal. Y: el segundo conjunto de la serie temporal
Orden: en la primera serie de tiempo, el número de retrasos a utilizar. El valor predeterminado es 1.
Una forma de implementar esta prueba es calcular la suma de residuales al cuadrado de la regresión no restringida.
URSS = ∑t=1nu^2t
y compararla con la suma de residuales al cuadrado de una autorregresión univariada no restringida para X_t ,
RRSS = ∑t=1ne^2t Que surge de la ecuacion.
Xt=γ0+γ1Xt−1+γ2Xt−2+…+γiXt−i+et
Usualmente la ecuación recibe el nombre de regresión restringida.
El Estadístico de prueba es el siguiente
F= (RRSS−URSS/m) / (URSS/(n−k))
Donde los grados de libertad son m : es el numero de términos rezagados de Y, y k es el número de parámetros estimados en la regresión no restringida.
La prueba de causalidad en el sentido de Granger se calcula con la función grangertest() en R. En la presentacion de resultados el Estadistico de Prueba tiene la notacion F .
Se rechaza la Hipótesis Nula si el Estadistico de Prueba F es mayor a valor Critico
Rechazar Ho si F> F(i, n−k)
En la salida o presentacion de resultados de la prueba de causalidad de Granger en R no se presenta el valor critico, pero si el valor-p. El criterio de decision utilizando el valor-p es:
Rechazar Ho si valor p<α
El valor-p en la salida tiene la notacion Pr(>F)
Si se rechaza Ho, existe evidencia suficiente para decir que La serie de tiempo Y causa la serie de tiempo X a la propia causa de Granger.
Si no se rechaza Ho, existe evidencia de que La serie de tiempo Y no causa la serie de tiempo X a la propia causa de Granger.
H0: :“Conocer el numero de pollos no es util para predecir el numero futuro de huevos.”
H1: “Conocer el numero de huevos es util para predecir el numero futuro de pollos.”
## Time Series:
## Start = 1930
## End = 1935
## Frequency = 1
## chicken egg
## 1930 468491 3581
## 1931 449743 3532
## 1932 436815 3327
## 1933 444523 3255
## 1934 433937 3156
## 1935 389958 3081
Usando la función grangertest() para realizar una prueba de causalidad de Granger para ver si el número de huevos fabricados es predictivo del número futuro de pollos. Ejecutaremos la prueba usando tres retardos:
Como 0.002966< 0.05 Se rechaza la H0, por lo tanto se concluye que conocer el numero de huevos es util para predecir el numero futuro de pollos. Prueba de casualidad de Granger a la inversa.
Aunque rechazamos la hipótesis nula de la prueba, en realidad es posible que haya un caso de causalidad inversa. Es decir, es posible que el número de pollos esté haciendo que el número de huevos cambie.
Para descartar esta posibilidad, necesitamos realizar la prueba de Causalidad de Granger a la inversa, utilizando pollos como variable predictora y huevos como variable de respuesta:
Como 0,6238 > 0.05, No se rechaza la H0, por lo que podemos decir que el número de pollos no es predictivo del número futuro de huevos.
podemos concluir que conocer el número de huevos es útil para predecir el número futuro de pollos.