Echa un vistazo a cola pesada Lambert W x F o Lambert sesgado W x F distribuciones un intento (descargo de responsabilidad: soy el autor). En R se implementan en el LambertW paquete.
Puestos relacionados:
Una ventaja sobre la distribución Cauchy o student-t con grados de libertad fijos es que los parámetros de la cola se pueden estimar a partir de los datos, por lo que se puede dejar que los datos decidan qué momentos existen. Además, el marco Lambert W x F permite transformar los datos y eliminar la asimetría y las colas pesadas. Sin embargo, es importante tener en cuenta que OLS no requiere la normalidad de $y$ o $X$ . Sin embargo, para su EDA podría valer la pena.
He aquí un ejemplo de las estimaciones Lambert W x Gaussian aplicadas a los rendimientos de los fondos de renta variable.
library(fEcofin)
ret <- ts(equityFunds[, -1] * 100)
plot(ret)
Las métricas resumidas de los rendimientos son similares (no tan extremas) como en el post de OP.
data_metrics <- function(x) {
c(mean = mean(x), sd = sd(x), min = min(x), max = max(x),
skewness = skewness(x), kurtosis = kurtosis(x))
}
ret.metrics <- t(apply(ret, 2, data_metrics))
ret.metrics
## mean sd min max skewness kurtosis
## EASTEU 0.1300 1.538 -18.42 12.38 -1.855 28.95
## LATAM 0.1206 1.468 -6.06 5.66 -0.434 4.21
## CHINA 0.0864 0.911 -4.71 4.27 -0.322 5.42
## INDIA 0.1515 1.502 -12.72 14.05 -0.505 15.22
## ENERGY 0.0997 1.187 -5.00 5.02 -0.271 4.48
## MINING 0.1315 1.394 -7.72 5.69 -0.692 5.64
## GOLD 0.1098 1.855 -10.14 6.99 -0.350 5.11
## WATER 0.0628 0.748 -5.07 3.72 -0.405 6.08
La mayoría de las series muestran características claramente no normales (fuerte asimetría y/o gran curtosis). Vamos a gaussianizar cada serie utilizando una distribución de cola pesada Lambert W x Gaussiana (= h de Tukey) utilizando un estimador de métodos de momentos estimador ( IGMM
).
library(LambertW)
ret.gauss <- Gaussianize(ret, type = "h", method = "IGMM")
colnames(ret.gauss) <- gsub(".X", "", colnames(ret.gauss))
plot(ts(ret.gauss))
Los gráficos de las series temporales muestran muchas menos colas y también una variación más estable en el tiempo (aunque no constante). El cálculo de las métricas de nuevo en la serie temporal gaussianizada da como resultado:
ret.gauss.metrics <- t(apply(ret.gauss, 2, data_metrics))
ret.gauss.metrics
## mean sd min max skewness kurtosis
## EASTEU 0.1663 0.962 -3.50 3.46 -0.193 3
## LATAM 0.1371 1.279 -3.91 3.93 -0.253 3
## CHINA 0.0933 0.734 -2.32 2.36 -0.102 3
## INDIA 0.1819 1.002 -3.35 3.78 -0.193 3
## ENERGY 0.1088 1.006 -3.03 3.18 -0.144 3
## MINING 0.1610 1.109 -3.55 3.34 -0.298 3
## GOLD 0.1241 1.537 -5.15 4.48 -0.123 3
## WATER 0.0704 0.607 -2.17 2.02 -0.157 3
Le site IGMM
El algoritmo consiguió exactamente lo que se proponía: transformar los datos para que la curtosis fuera igual a $3$ . Curiosamente, todas las series temporales tienen ahora una asimetría negativa, lo que coincide con la mayor parte de la literatura sobre series temporales financieras. Es importante señalar aquí que Gaussianize()
opera sólo marginalmente, no conjuntamente (análogamente a scale()
).
Regresión bivariada simple
Para considerar el efecto de la gaussianización en OLS, considere la predicción de la rentabilidad de "EASTEU" a partir de la rentabilidad de "INDIA" y viceversa. Aunque estemos considerando los rendimientos del mismo día entre $r_{EASTEU, t}$ en $r_{INDIA,t}$ (sin variables retardadas), sigue siendo valioso para una predicción bursátil dada la diferencia horaria de más de 6 horas entre la India y Europa.
layout(matrix(1:2, ncol = 2, byrow = TRUE))
plot(ret[, "INDIA"], ret[, "EASTEU"])
grid()
plot(ret.gauss[, "INDIA"], ret.gauss[, "EASTEU"])
grid()
El gráfico de dispersión de la izquierda de la serie original muestra que los valores atípicos fuertes no se produjeron en los mismos días, sino en momentos diferentes en la India y en Europa; aparte de eso, no está claro si la nube de datos del centro admite la no correlación o la dependencia negativa/positiva. Dado que los valores atípicos afectan en gran medida a las estimaciones de la varianza y la correlación, merece la pena observar la dependencia con las colas pesadas eliminadas (gráfico de dispersión de la derecha). Aquí los patrones son mucho más claros y la relación positiva entre la India y el mercado de Europa del Este se hace evidente.
# try these models on your own
mod <- lm(EASTEU ~ INDIA * CHINA, data = ret)
mod.robust <- rlm(EASTEU ~ INDIA, data = ret)
mod.gauss <- lm(EASTEU ~ INDIA, data = ret.gauss)
summary(mod)
summary(mod.robust)
summary(mod.gauss)
Causalidad de Granger
Una prueba de causalidad de Granger basada en un $VAR(5)$ modelo (yo utilizo $p = 5$ para captar el efecto semanal de las operaciones diarias) para "EASTEU" e "INDIA" rechaza la "no causalidad de Granger" para cualquier dirección.
library(vars)
mod.vars <- vars::VAR(ret[, c("EASTEU", "INDIA")], p = 5)
causality(mod.vars, "INDIA")$Granger
##
## Granger causality H0: INDIA do not Granger-cause EASTEU
##
## data: VAR object mod.vars
## F-Test = 3, df1 = 5, df2 = 3000, p-value = 0.02
causality(mod.vars, "EASTEU")$Granger
##
## Granger causality H0: EASTEU do not Granger-cause INDIA
##
## data: VAR object mod.vars
## F-Test = 4, df1 = 5, df2 = 3000, p-value = 0.003
Sin embargo, para los datos gaussianizados la respuesta es diferente. Aquí la prueba puede no rechazar H0 que "INDIA hace no Granger-cause EASTEU", pero sigue rechazando que "EASTEU no Granger-cause INDIA". Así pues, los datos gaussianizados apoyan la hipótesis de que los mercados europeos impulsan los mercados de la India al día siguiente.
mod.vars.gauss <- vars::VAR(ret.gauss[, c("EASTEU", "INDIA")], p = 5)
causality(mod.vars.gauss, "INDIA")$Granger
##
## Granger causality H0: INDIA do not Granger-cause EASTEU
##
## data: VAR object mod.vars.gauss
## F-Test = 0.8, df1 = 5, df2 = 3000, p-value = 0.5
causality(mod.vars.gauss, "EASTEU")$Granger
##
## Granger causality H0: EASTEU do not Granger-cause INDIA
##
## data: VAR object mod.vars.gauss
## F-Test = 2, df1 = 5, df2 = 3000, p-value = 0.06
Tenga en cuenta que no me queda claro cuál es el a la derecha respuesta (si es que la hay), pero es una observación interesante. No hace falta decir que toda esta prueba de causalidad está supeditada a la $VAR(5)$ siendo el modelo correcto - lo que probablemente no es; pero creo que sirve bien para ilustrar.