Pracuję nad algorytmem, który opiera się na fakcie, że obserwacje są normalnie rozłożone, i chciałbym empirycznie przetestować odporność algorytmu na to założenie.
Aby to zrobić, szukałem sekwencji przemian , które stopniowo zakłócić normalność . Na przykład, jeśli są normalne, mają skośność i kurtozę , i byłoby miło znaleźć sekwencję transformacji, która stopniowo zwiększa oba.Y Y = 0 = 3
Moim pomysłem było symulowanie niektórych normalnie w przybliżeniu rozproszonych danych i przetestowanie algorytmu na tym. Następnie algorytm testowy na każdym przekształconym danych , aby zobaczyć, jak bardzo zmienia się wynik.T 1 ( Y ) , … , T n ( y )
Zauważ, że nie kontroluję rozkładu symulowanych , więc nie mogę symulować ich przy użyciu rozkładu, który uogólnia normalne (takie jak Skośny Ogólny Rozkład Błędów).
źródło
Odpowiedzi:
Można tego dokonać za pomocą transformacji sinh-arcsinh z
Transformacja jest zdefiniowana jako
gdzie i . Gdy transformacja ta zostanie zastosowana do normalnego CDF , powstaje rozkład jednomodalny, którego parametry kontrolują odpowiednio skośność i kurtoza (Jones i Pewsey, 2009) w sensie van Zwet (1969) . Ponadto, jeśli i , otrzymamy oryginalny rozkład normalny. Zobacz następujący kod R. δ ∈ R + S ( x ; ϵ , δ ) = Φ [ H ( x ; ϵ , δ ) ] ( ϵ , δ ) ϵ = 0 δ = 1ϵ∈R δ∈R+ S(x;ϵ,δ)=Φ[H(x;ϵ,δ)] (ϵ,δ) ϵ=0 δ=1
Dlatego wybierając odpowiednią sekwencję parametrów , możesz wygenerować sekwencję rozkładów / przekształceń z różnymi poziomami skośności i kurtozy i sprawić, by wyglądały one podobnie lub inaczej niż rozkład normalny, jak chcesz.(ϵn,δn)
Poniższy wykres pokazuje wynik wygenerowany przez kod R. Dla (i) i oraz (ii) i .δ = 1 ϵ = 0 δ = ( 0,5 , 0,75 , 1 , 1,25 , 1,5 )ϵ = ( - 2 , - 1 ,0,1,2) δ= 1 ϵ = 0 δ= ( 0,5 , 0,75 , 1 , 1,25 , 1,5 )
Symulacja tego rozkładu jest prosta, biorąc pod uwagę, że wystarczy przekształcić próbkę normalną za pomocą odwrotności .( ⋆ )
źródło
gamlss.dist::rSHASHo
można wygenerować te rozkłady.Można tego dokonać za pomocą losowych zmiennych / rozkładów Lamberta W x F. Zmienna losowa Lambert W x F (RV) jest nieliniowo transformowaną (RV) X o rozkładzie F.
Dla F jest rozkładem normalnym, aα = 1
Gaussianize()
Są one wdrażane w
Transformacje Lambert W x F występują w 3 wariantach:
type = 's'
type = 'h'
type = 'hh'
Zobacz referencje na temat skośnych i grubych ogonów (zrzeczenie się odpowiedzialności: jestem autorem).
W R możesz symulować, szacować, kreślić itp. Kilka rozkładów W x F Lambert za pomocą pakietu Lambert W.
źródło
Jedną z takich sekwencji jest potęgowanie do różnych stopni. Na przykład
źródło
Ta sama odpowiedź co @ user10525, ale w pythonie
[
źródło