Trasformazione per aumentare la curtosi e l'asimmetria del camper normale


20

Sto lavorando a un algoritmo che si basa sul fatto che le osservazioni sono normalmente distribuite e vorrei testare empiricamente la solidità dell'algoritmo a questa ipotesi.Y

Per fare questo, ero alla ricerca di una sequenza di trasformazioni che avrebbe progressivamente interrompere la normalità di . Ad esempio se gli sono normali hanno asimmetria e curtosi , e sarebbe bello trovare una sequenza di trasformazione che aumenti progressivamente entrambi.Y Y = 0 = 3T1(),,Tn()YY=0=3

La mia idea era di simulare alcuni dati approssimativamente distribuiti approssimativamente e testare l'algoritmo su quello. Quindi prova l'algoritmo su ogni set di dati trasformato , per vedere quanto sta cambiando l'output.T 1 ( Y ) , , T n ( y )YT1(Y),...,Tn(y)

Si noti che non controllo la distribuzione degli simulati , quindi non posso simularli usando una distribuzione che generalizza il normale (come la distribuzione degli errori generalizzata obliqua).Y


2
Il problema con una sequenza di trasformazioni del genere è che la tua conclusione è limitata agli effetti di quella particolare sequenza. La tua sequenza traccia in effetti un percorso nello spazio corrispondente a una singola famiglia di distribuzioni basata su una (presumibilmente un parametro, dal momento che dici "sequenza") della normale. Supponiamo che la regione vitale ( γ 1 , γ 2 ) sia 2D e che per ogni dato punto al suo interno ci sia un numero infinito di diverse distribuzioni, osservando una singola famiglia tracciare una singola curva sarebbe alquanto limitante ... (ctd )(γ1,γ2)(γ1,γ2)
Glen_b -Restate Monica

1
(ctd) ... specialmente se la particolare famiglia che generi non tende a rivelare problemi che potrebbero altrimenti essere abbastanza comuni.
Glen_b

Risposte:


22

Questo può essere fatto usando la trasformazione sinh-arcsinh di

Jones, MC e Pewsey A. (2009). Distribuzioni Sinh-arcsinh . Biometrika 96: 761–780.

La trasformazione è definita come

()H(X;ε,δ)=sinh[δsinh-1(X)-ε],

dove e δ R + . Quando questa trasformazione viene applicata al normale CDF S ( x ; ϵ , δ ) = Φ [ H ( x ; ϵ , δ ) ] , produce una distribuzione unimodale i cui parametri ( ϵ , δ ) controllano rispettivamente l'asimmetria e la curtosi (Jones e Pewsey, 2009), nel senso di van Zwet (1969) . Inoltre, se ϵ = 0 e δεRδR+S(X;ε,δ)=Φ[H(X;ε,δ)](ε,δ)ε=0 , otteniamo la distribuzione normale originale. Vedi il seguente codice R.δ=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")

Pertanto, scegliendo una sequenza appropriata di parametri , è possibile generare una sequenza di distribuzioni / trasformazioni con diversi livelli di asimmetria e curtosi e farli sembrare simili o diversi rispetto alla distribuzione normale che si desidera.(εn,δn)

Il diagramma seguente mostra il risultato prodotto dal codice R. Per (i) e δ = 1 , e (ii) ϵ = 0 e δ = ( 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)

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

La simulazione di questa distribuzione è semplice dato che devi solo trasformare un campione normale usando l'inverso di .()

H-1(X;ε,δ)=sinh[δ-1(sinh-1(X)+ε)]

2
Grazie mille Procrastinator! Questo e 'esattamente quello che stavo cercando.
Matteo Fasiolo,

2
Sembra in gamlss.dist::rSHASHogrado di generare queste distribuzioni.
Artem Klevtsov,

7

Questo può essere fatto usando le variabili / distribuzioni casuali di Lambert W x F. Una variabile casuale Lambert W x F (RV) è una X non linearmente trasformata (RV) con distribuzione F.

α=1Gaussianize()

Sono implementati nel

Le trasformazioni di Lambert W x F sono disponibili in 3 gusti:

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

Vedi riferimenti su inclinato e coda pesante (Disclaimer: io sono l'autore.)

In R è possibile simulare, stimare, tracciare, ecc. Diverse distribuzioni Lambert W x F con il pacchetto 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 = ")

inserisci qui la descrizione dell'immagine

γδlδr


5

Una di queste sequenze è l'esponenziazione a vari livelli. Per esempio

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

x1.1,x1.2x2


0

Stessa risposta di @utente10525 ma in pitone

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]

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.