Transformasi untuk meningkatkan kurtosis dan skewness rv normal

20

Saya sedang mengerjakan suatu algoritma yang mengandalkan fakta bahwa pengamatan terdistribusi secara normal, dan saya ingin menguji kekokohan algoritma terhadap asumsi ini secara empiris.Y

Untuk melakukan hal ini, saya sedang mencari urutan transformasi yang progresif akan mengganggu normalitas Y . Sebagai contoh jika Y s normal mereka memiliki kemiringan = 0 dan kurtosis = 3 , dan akan menyenangkan untuk menemukan urutan transformasi yang semakin meningkatkan keduanya.T1(),,Tn()YY=0=3

Gagasan saya adalah untuk mensimulasikan beberapa data kira-kira terdistribusi normal dan menguji algoritme itu. Daripada menguji algoritma pada setiap dataset yang diubah T 1 ( Y ) , ... , T n ( y ) , untuk melihat seberapa banyak output berubah.YT1(Y),,Tn(y)

Perhatikan bahwa saya tidak mengontrol distribusi s yang disimulasikan , jadi saya tidak dapat mensimulasi mereka menggunakan distribusi yang menggeneralisasi Normal (seperti Distribusi Galat Umum Skewed).Y

Matteo Fasiolo
sumber
2
Masalah dengan urutan transformasi seperti itu adalah kesimpulan Anda terbatas pada efek dari urutan tertentu. Urutan Anda akan melacak jejak dalam ruang yang sesuai dengan satu keluarga distribusi yang didasarkan pada (mungkin satu-parameter, karena Anda mengatakan 'urutan') transformasi normal. Berikan bahwa wilayah yang layak ( γ 1 , γ 2 ) adalah 2D dan bahwa untuk titik tertentu di dalamnya ada jumlah tak terbatas dari distribusi yang berbeda, melihat satu keluarga yang menelusuri kurva tunggal akan agak membatasi ... (ctd )(γ1,γ2)(γ1,γ2)
Glen_b -Reinstate Monica
1
(ctd) ... terutama jika keluarga yang Anda hasilkan cenderung tidak mengungkapkan masalah yang mungkin cukup umum.
Glen_b -Reinstate Monica

Jawaban:

22

Ini dapat dilakukan dengan menggunakan transformasi sinh-arcsinh dari

Jones, MC dan Pewsey A. (2009). Distribusi sinh-arcsinh . Biometrika 96: 761-780.

Transformasi didefinisikan sebagai

()H(x;ϵ,δ)=sinh[δsinh-1(x)-ϵ],

dimana dan δ R + . Ketika transformasi ini diterapkan pada CDF S normal ( x ; ϵ , δ ) = Φ [ H ( x ; ϵ , δ ) ] , ia menghasilkan distribusi unimodal yang parameternya ( ϵ , δ ) mengendalikan kemiringan dan kurtosis, masing-masing (Jones). dan Pewsey, 2009), dalam arti van Zwet (1969) . Selain itu, jika ϵ = 0 dan δϵRδR+S(x;ϵ,δ)=Φ[H(x;ϵ,δ)](ϵ,δ)ϵ=0 , kami memperoleh distribusi normal asli. Lihat kode R. berikut.δ=1

fs = function(x,epsilon,delta) dnorm(sinh(delta*asinh(x)-epsilon))*delta*cosh(delta*asinh(x)-epsilon)/sqrt(1+x^2)

vec = seq(-15,15,0.001)

plot(vec,fs(vec,0,1),type="l")
points(vec,fs(vec,1,1),type="l",col="red")
points(vec,fs(vec,2,1),type="l",col="blue")
points(vec,fs(vec,-1,1),type="l",col="red")
points(vec,fs(vec,-2,1),type="l",col="blue")

vec = seq(-5,5,0.001)

plot(vec,fs(vec,0,0.5),type="l",ylim=c(0,1))
points(vec,fs(vec,0,0.75),type="l",col="red")
points(vec,fs(vec,0,1),type="l",col="blue")
points(vec,fs(vec,0,1.25),type="l",col="red")
points(vec,fs(vec,0,1.5),type="l",col="blue")

Oleh karena itu, dengan memilih urutan parameter yang sesuai , Anda dapat menghasilkan urutan distribusi / transformasi dengan berbagai tingkat kemiringan dan kurtosis dan membuatnya terlihat sama atau berbeda dengan distribusi normal seperti yang Anda inginkan.(ϵn,δn)

Plot berikut menunjukkan hasil yang dihasilkan oleh kode R. Untuk (i) dan δ = 1 , dan (ii) ϵ = 0 dan δ = ( 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)

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Simulasi distribusi ini mudah karena Anda hanya perlu mengubah sampel normal menggunakan invers dari .()

H-1(x;ϵ,δ)=sinh[δ-1(sinh-1(x)+ϵ)]

sumber
2
Terima kasih banyak Penunda! Ini persis apa yang saya cari.
Matteo Fasiolo
2
Tampaknya gamlss.dist::rSHASHodapat menghasilkan distribusi ini.
Artem Klevtsov
7

Ini dapat dilakukan dengan menggunakan Lambert W x F variabel acak / distribusi. Variabel acak Lambert W x F (RV) adalah X (non-linearly transformed) dengan distribusi F.

α=1Gaussianize()

Mereka diimplementasikan dalam

Transformasi Lambert W x F datang dalam 3 rasa:

  • type = 's'γR
  • type = 'h'δ0α
  • type = 'hh'δl,δr0

Lihat Referensi tentang miring dan berat (Penafian: Saya penulis.)

Dalam R Anda dapat mensimulasikan, memperkirakan, memplot, dll. Beberapa distribusi Lambert W x F dengan paket LambertW .

library(LambertW)
library(RColorBrewer)
# several heavy-tail parameters
delta.v <- seq(0, 2, length = 11)
x.grid <- seq(-5, 5, length = 100)
col.v <- colorRampPalette(c("black", "orange"))(length(delta.v))

plot(x.grid, dnorm(x.grid), lwd = 2, type = "l", col = col.v[1],
     ylab = "")
for (ii in seq_along(delta.v)) {
  lines(x.grid, dLambertW(x.grid, "normal", 
                          theta = list(delta = delta.v[ii], beta = c(0, 1))),
        col = col.v[ii])
}
legend("topleft", paste(delta.v), col = col.v, lty = 1,
       title = "delta = ")

masukkan deskripsi gambar di sini

γδlδr

Georg M. Goerg
sumber
5

Salah satu urutan tersebut adalah eksponensial ke berbagai tingkatan. Misalnya

library(moments)
x <- rnorm(1000) #Normal data
x2 <- 2^x #One transformation
x3 <- 2^{x^2} #A stronger transformation
test <- cbind(x, x2, x3) 
apply(test, 2, skewness) #Skewness for the three distributions
apply(test, 2, kurtosis) #Kurtosis for the three distributions

Anda bisa menggunakannya x1.1,x1.2...x2 untuk mendapatkan derajat transformasi menengah.

Peter Flom - Pasang kembali Monica
sumber
0

Jawaban yang sama seperti @ user10525 tetapi dengan python

import numpy as np
from scipy.stats import norm
def sinh_archsinh_transformation(x,epsilon,delta):
    return norm.pdf(np.sinh(delta*np.arcsinh(x)-epsilon))*delta*np.cosh(delta*np.arcsinh(x)-epsilon)/np.sqrt(1+np.power(x,2))


vec = np.arange(start=-15,stop=15+0.001,step=0.001)

import matplotlib.pyplot as plt
plt.plot(vec,sinh_archsinh_transformation(vec,0,1))
plt.plot(vec,sinh_archsinh_transformation(vec,1,1),color='red')
plt.plot(vec,sinh_archsinh_transformation(vec,2,1),color='blue')
plt.plot(vec,sinh_archsinh_transformation(vec,-1,1),color='red')
plt.plot(vec,sinh_archsinh_transformation(vec,-2,1),color='blue')

[1]

JPlatts
sumber