Spójrz na ciężkie ogony Lambert W x F lub przekrzywione rozkłady Lambert W x F spróbuj (zrzeczenie się: jestem autorem). W wersji R są zaimplementowane w pakiecie LambertW .
Powiązane posty:
Jedną zaletą w porównaniu z rozkładem Cauchy'ego lub studenta-t ze stałymi stopniami swobody jest to, że parametry ogona można oszacować na podstawie danych - dzięki czemu możesz decydować, które momenty istnieją. Ponadto platforma Lambert W x F pozwala przekształcać dane i usuwać skośność / ciężkie ogony. ITT to ważne, aby pamiętać jednak, że OLS nie wymaga normalności lub . Jednak dla Twojej EDA może to być opłacalne.XyX
Oto przykład szacunków Lamberta W x Gaussa zastosowanych do zwrotów funduszy akcyjnych.
library(fEcofin)
ret <- ts(equityFunds[, -1] * 100)
plot(ret)
Podsumowujące wskaźniki zwrotów są podobne (nie tak ekstremalne) jak w poście PO.
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
Większość serii wykazuje wyraźnie nietypowe cechy (silna skośność i / lub duża kurtoza). Gaussianizujmy każdą serię za pomocą gruboogoniastego rozkładu L Lamberta x Gaussa (= h Tukeya), stosując metody estymatora momentów ( IGMM
).
library(LambertW)
ret.gauss <- Gaussianize(ret, type = "h", method = "IGMM")
colnames(ret.gauss) <- gsub(".X", "", colnames(ret.gauss))
plot(ts(ret.gauss))
Wykresy szeregów czasowych pokazują znacznie mniej ogonów, a także bardziej stabilne zmiany w czasie (choć nie stałe). Ponowne obliczenie metryk w szeregach czasowych Gaussianized daje:
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
IGMM
Algorytm osiągnąć dokładnie to, co zostało określone zrobić: przekształcić dane mieć kurtoza równą . Co ciekawe, wszystkie szeregi czasowe mają teraz ujemną skośność, co jest zgodne z większością literatury dotyczącej finansowych szeregów czasowych. Ważne, aby wskazać tutaj, że działa tylko marginalnie, a nie łącznie (analogicznie do ).3Gaussianize()
scale()
Prosta regresja dwuwymiarowa
Aby wziąć pod uwagę wpływ gaussianizacji na OLS, należy przewidzieć powrót „EASTEU” z zwrotów „INDIA” i odwrotnie. Nawet jeśli patrzymy na samych zwrotów dziennie między na (brak opóźnione zmienne), to nadal stanowi wartość dla prognozowania giełdowego danego różnica 6h + czas między Indiami i Europą. r I N D I A , trEASTEU,trINDIA,t
layout(matrix(1:2, ncol = 2, byrow = TRUE))
plot(ret[, "INDIA"], ret[, "EASTEU"])
grid()
plot(ret.gauss[, "INDIA"], ret.gauss[, "EASTEU"])
grid()
Lewy wykres rozrzutu oryginalnej serii pokazuje, że silne wartości odstające nie wystąpiły w tych samych dniach, ale w różnych czasach w Indiach i Europie; poza tym nie jest jasne, czy chmura danych w centrum nie obsługuje korelacji ani zależności ujemnej / dodatniej. Ponieważ wartości odstające silnie wpływają na szacunki wariancji i korelacji, warto przyjrzeć się zależności z usuniętymi ciężkimi ogonami (prawy wykres rozrzutu). Tutaj wzorce są znacznie wyraźniejsze, a pozytywny związek między Indiami a rynkiem Europy Wschodniej staje się widoczny.
# 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)
Przyczynowość Grangera
Test przyczynowości Grangera oparty na modelu (używam do uchwycenia tygodniowego efektu codziennych transakcji) dla „EASTEU” i „INDIA” odrzuca „brak przyczynowości Grangera” dla obu kierunków.p = 5VAR(5)p=5
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
Jednak w przypadku danych Gaussianized odpowiedź jest inna! Oto test może nie odrzucić H0 że „Indie czy nie Granger-przyczyna EASTEU”, ale nadal odrzuca że „EASTEU nie Granger-przyczyna India”. Tak więc dane gaussowskie potwierdzają hipotezę, że rynki europejskie napędzają rynki w Indiach następnego dnia.
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
Zauważ, że nie jest dla mnie jasne, która z nich jest właściwą odpowiedzią (jeśli w ogóle), ale jest to interesujące spostrzeżenie. Nie trzeba dodawać, że to całe testowanie przyczynowości zależy od tego, czy jest poprawnym modelem - czego najprawdopodobniej nie jest; ale myślę, że dobrze to ilustruje.VAR(5)