Siempre me enfrento a un dilema sobre si asumir que los precios tienen una tendencia temporal o no al modelar. También es, en parte, un problema de estadística. Me explico. Supongamos que tengo series temporales, $y_t$ del precio de un producto que, al trazarlo, parece tener una pendiente ascendente (lo que, al fin y al cabo, es cierto para la mayoría de los artículos).
Cuando aplico la prueba de root unitaria sin deriva, el resultado es el no rechazo de root unitaria. Sin embargo, si incluyo un término de deriva, el resultado es el rechazo de root unitaria.
Ahora bien, si el verdadero proceso es un paseo aleatorio sin deriva, es muy probable que la inclusión de la deriva rechace incorrectamente la nulidad (a continuación se presenta un estudio de simulación que muestra que si el verdadero proceso es un paseo aleatorio puro, la inclusión de la deriva rechaza la nulidad alrededor del 34% de las veces). La línea roja es la distribución del estadístico t cuando se aplica la prueba ADF con deriva, y la línea azul cuando se aplica sin deriva (que es el verdadero proceso).
(la línea vertical es el valor del cuantil 0,05 de la distribución DF - curva azul)
Ahora bien, si la serie tuviera una tendencia temporal (sin root unitaria), la prueba ADF (sin deriva) casi nunca rechaza la nulidad de root unitaria.
De ahí el dilema. Mi opinión es que la respuesta (si la tendencia es estocástica o determinista) tiene que venir de la teoría. Así que la cuestión se reduce a ¿Por qué los precios deben tener una tendencia determinista? ¿Qué dinámica económica justificaría la modelización de la serie como, por ejemplo, un proceso AR(1) con tendencia temporal?
Código:
'%>%'=magrittr::'%>%'
n=1e4
tt_coef = 0.1
ar1 = function(phi, n=1000, tt=0, tt_coef=0,sd) {
y = numeric(1000+100)
for (i in 2:length(y)) {
y[i] = phi*y[i-1] + tt*tt_coef*i + rnorm(1,mean = 0, sd = 1)
}
return(tail(y,n)) # first 100 observations burned to remove impact of initial condtns
}
samples_tt = replicate(n,ar1(phi = 0.7,tt = 1, tt_coef = tt_coef, sd = 8),simplify = F)
df_stats_tt = lapply(samples_tt, function(x) urca::ur.df(x,lags = 0,
type = 'none')@teststat) %>%
unlist()
samples_rw = replicate(n,ar1(phi = 1, sd = 1),simplify = F)
df_stats_rw = lapply(samples_rw, function(x) urca::ur.df(x,lags = 0,
type = 'none')@teststat) %>%
unlist()
df_stats_drift = lapply(samples_rw, function(x) urca::ur.df(x,lags = 0,
type = 'drift')@teststat[,1]) %>%
unlist()
sum(df_stats_drift<quantile(df_stats_rw, probs = 0.05))/n
sum(df_stats_tt < quantile(df_stats_rw, probs = 0.05))/n
plot(density(df_stats_drift), type = 'l', lwd = 2,
col = 'red', main = 'DF-Distribution', xlab = '')
lines(density(df_stats_rw), type = 'l', lwd = 2, col = 'blue')
abline(v = quantile(df_stats_rw, prob = 0.05))
legend('topleft', legend = c('Without Drift', 'With Drift'),
col = c('blue', 'red'), lwd = 2, bty = 'n')