Jak przekształcić rozkład lepeptyczny w normalność?

12

Załóżmy, że mam zmienną leptokurtyczną, którą chciałbym przekształcić do normalności. Jakie transformacje mogą wykonać to zadanie? Doskonale zdaję sobie sprawę z tego, że przekształcanie danych nie zawsze może być pożądane, ale dla celów akademickich załóżmy, że chcę „wbić” dane w normalność. Ponadto, jak można zauważyć na podstawie wykresu, wszystkie wartości są ściśle dodatnie.

Próbowałem różnych transformacji (prawie wszystkiego, co widziałem wcześniej, w tym itp.), Ale żadna z nich nie działa szczególnie dobrze. Czy są dobrze znane transformacje, dzięki którym rozkłady lepeptyczne są bardziej normalne?1X,X,asinh(X)

Zobacz przykładowy wykres Normalnej QQ poniżej:

wprowadź opis zdjęcia tutaj

Underminer
źródło
5
Czy znasz transformatę całkową prawdopodobieństwa ? Został przywołany w kilku wątkach na tej stronie , jeśli chcesz zobaczyć go w akcji.
whuber
8
Potrzebujesz czegoś, co działa symetrycznie (zmienna „środkowa”), a jednocześnie szanuje znak. Nic, czego próbowałeś, nie jest bliskie, jeśli nie masz „środka”. Użyj mediany dla „środka” i spróbuj pierwiastek sześcienny odchyleń, pamiętając, aby zaimplementować pierwiastek sześcienny jako znak (.) * Abs (.) ^ (1/3). Brak gwarancji i bardzo ad hoc, ale powinien iść we właściwym kierunku. -
Nick Cox,
1
Uh, co sprawia, że ​​nazywacie to platykurtic? Chyba że coś przeoczyłem, wygląda na to, że ma wyższą kurtozę niż normalnie.
Glen_b
3
@Glen_b Myślę, że ma rację: jest leptokurtyczny. Ale oba te terminy są dość głupie, chyba że pozwalają na odniesienie do oryginalnej kreskówki Studenta w Biometrice . Kryterium to kurtoza; wartości są wysokie lub niskie lub (nawet lepiej) określone ilościowo.
Nick Cox,
3
Dlaczego leptokurtic określa się jako „cienki ogon”? Chociaż nie ma koniecznego związku między grubością ogona a kurtozą, ogólną tendencją jest łączenie ciężkich ogonów z kurtozą (np. Porównanie z normalnym, dla standardowych gęstości)t6
Glen_b

Odpowiedzi:

12

Używam rozkładów ciężkiego ogona Lambert W x F do opisu i transformacji danych leptokurtycznych. Zobacz (moje) następujące posty, aby uzyskać więcej informacji i odniesień:

Oto powtarzalny przykład z wykorzystaniem pakietu LambertW R.

library(LambertW)
set.seed(1)
theta.tmp <- list(beta = c(2000, 400), delta = 0.2)
yy <- rLambertW(n = 100, distname = "normal", 
                theta = theta.tmp)

test_norm(yy)

test normalności oryginalnych danych

## $seed
## [1] 267509
## 
## $shapiro.wilk
## 
##  Shapiro-Wilk normality test
## 
## data:  data.test
## W = 1, p-value = 0.008
## 
## 
## $shapiro.francia
## 
## 	Shapiro-Francia normality test
## 
## data:  data.test
## W = 1, p-value = 0.003
## 
## 
## $anderson.darling
## 
##  Anderson-Darling normality test
## 
## data:  data
## A = 1, p-value = 0.01

Wykres qq yyjest bardzo zbliżony do wykresu qqplot w oryginalnym poście, a dane są rzeczywiście nieco lepki z kurtozą 5. Stąd dane można dobrze opisać rozkładem Gaussa Lambert W z wejściem i parametr tail (co oznacza, że ​​istnieją tylko momenty do zamówienia ).X N ( 2000 , 400 ) δ = 0,2 5×XN.(2000,400)δ=0.25

Wróćmy do pytania: jak przywrócić normalność tych danych leptokurtycznych? Cóż, możemy oszacować parametry rozkładu za pomocą MLE (lub metod użycia momentów IGMM()),

mod.Lh <- MLE_LambertW(yy, distname = "normal", type = "h")
summary(mod.Lh)

## Call: MLE_LambertW(y = yy, distname = "normal", type = "h")
## Estimation method: MLE
## Input distribution: normal
## 
##  Parameter estimates:
##        Estimate  Std. Error  t value Pr(>|t|)    
## mu     2.05e+03    4.03e+01    50.88   <2e-16 ***
## sigma  3.64e+02    4.36e+01     8.37   <2e-16 ***
## delta  1.64e-01    7.84e-02     2.09    0.037 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## -------------------------------------------------------------- 
## 
## Given these input parameter estimates the moments of the output random variable are 
##   (assuming Gaussian input): 
##  mu_y = 2052; sigma_y = 491; skewness = 0; kurtosis = 13.

a następnie za pomocą bijective przekształcenie odwrotne (w oparciu o W_delta()) do backtransform dane do wejściowego , który - przy projektowaniu - powinno być bardzo zbliżone do normalnego.X

# get_input() handles does the right transformations automatically based on
# estimates in mod.Lh
xx <- get_input(mod.Lh)
test_norm(xx)

testowa normalność danych Gaussa

## $seed
## [1] 218646
## 
## $shapiro.wilk
## 
##  Shapiro-Wilk normality test
## 
## data:  data.test
## W = 1, p-value = 1
## 
## 
## $shapiro.francia
## 
## 	Shapiro-Francia normality test
## 
## data:  data.test
## W = 1, p-value = 1
## 
## 
## $anderson.darling
## 
##  Anderson-Darling normality test
## 
## data:  data
## A = 0.1, p-value = 1

Voila!

Georg M. Goerg
źródło
Jestem fanem i zacząłem pracować nad wersją Pythona do nauki scikit
Greg Ver Steeg
Georg, czy możesz podać bardziej intuicyjne wyjaśnienie działania transformacji?
azuryczny
Z=Uexp(δ/2)U2))Uδ>0Z
9

sign(.)abs(.)13Ymedian(Y)

Chociaż transformacja pierwiastka sześciennego nie zadziałała dobrze, okazuje się, że pierwiastek kwadratowy i bardziej niejasny pierwiastek z trzech czwartych działają dobrze.

Oto oryginalny wykres gęstości jądra odpowiadający wykresowi QQ zmiennej leptokurtycznej w pierwotnym pytaniu:

wprowadź opis zdjęcia tutaj


Po zastosowaniu transformacji pierwiastka kwadratowego do odchyleń wykres QQ wygląda następująco:

wprowadź opis zdjęcia tutaj

Lepiej, ale może być bliżej.


Jeszcze bardziej wbijając, stosując transformację korzenia o trzy czwarte do odchyleń, uzyskuje się:

wprowadź opis zdjęcia tutaj


A ostateczna gęstość jądra tej transformowanej zmiennej wygląda następująco:

wprowadź opis zdjęcia tutaj

Wygląda na mnie blisko.

Underminer
źródło
8

W wielu przypadkach po prostu może nie być prostej transformacji monotonicznej, która dałaby wynik zbliżony do normalnego.

Wyobraźmy sobie na przykład, że mamy rozkład, który jest skończoną mieszanką logarytmicznych rozkładów różnych parametrów. Logarytmiczna transformacja przekształciłaby dowolny ze składników mieszanki w normalność, ale mieszanka normalnych w przekształconych danych pozostawia ci coś, co nie jest normalne.

Lub może być względnie fajna transformacja, ale nie jedna z form, które warto wypróbować - jeśli nie znasz rozkładu danych, możesz go nie znaleźć. Na przykład, jeśli dane byłyby dystrybuowane gamma, nie znajdziesz nawet dokładnej transformacji do normalności (która z pewnością istnieje), chyba że powiem ci dokładnie, co to jest dystrybucja (chociaż możesz natknąć się na transformację z pierwiastkiem kostki, która w tym przypadek sprawiłby, że byłby prawie normalny, o ile parametr kształtu nie byłby zbyt mały)

Istnieją niezliczone sposoby, w jakie dane mogą wyglądać na podatne na transformację, ale nie wygląda to dobrze na żadnej z listy oczywistych transformacji.

Jeśli możesz dać nam dostęp do danych, być może uda nam się dostrzec transformację, która jest w porządku - lub że pokażemy ci, dlaczego jej nie znajdziesz.

Na podstawie wrażenia wizualnego wygląda raczej jak mieszanina dwóch normalnych o różnych skalach. Jest tylko niewielka nuta asymetrii, którą można łatwo zaobserwować przypadkowo. Oto przykład próbki z mieszanki dwóch normalnych o wspólnej średniej - jak widać, wygląda trochę podobnie do twojego wykresu (ale inne próbki mogą wyglądać na cięższe lub jaśniejsze) - przy tej wielkości próbki istnieje duża zmienność w kolejności statystyki poza 1 sd po obu stronach średniej).

wprowadź opis zdjęcia tutaj

W rzeczywistości są nałożone na ciebie i moje:

wprowadź opis zdjęcia tutaj

Glen_b - Przywróć Monikę
źródło
Z pewnością wygląda jak mieszanina dwóch normalnych rozkładów o różnej skali, doskonała obserwacja.
Underminer