Come trasformare la distribuzione leptokurtic in normalità?


12

Supponiamo che io abbia una variabile leptocurtica che vorrei trasformare in normalità. Quali trasformazioni possono svolgere questo compito? Sono ben consapevole che la trasformazione dei dati potrebbe non essere sempre auspicabile, ma come ricerca accademica, supponiamo che io voglia "martellare" i dati in normalità. Inoltre, come puoi vedere dalla trama, tutti i valori sono strettamente positivi.

Ho provato una varietà di trasformazioni (praticamente tutto ciò che ho visto usato prima, tra cui , ecc.), Ma nessuno di loro funziona particolarmente bene. Esistono trasformazioni note per rendere più normali le distribuzioni leptokurtiche?1X,X,ASINH(X)

Vedi l'esempio di QQ normale qui sotto:

inserisci qui la descrizione dell'immagine


5
Conoscete la trasformazione integrale di probabilità ? È stato invocato in alcuni thread su questo sito , se si desidera vederlo in azione.
whuber

8
Hai bisogno di qualcosa che funzioni simmetricamente su (variabile "medio") rispettando anche il segno. Nulla di ciò che hai provato si avvicina se non hai un "mezzo". Usa la mediana per "medio" e prova la radice cubica delle deviazioni, ricordando di implementare la radice cubica come segno (.) * Abs (.) ^ (1/3). Nessuna garanzia e molto ad hoc, ma dovrebbe spingere nella giusta direzione. -
Nick Cox,

1
Uh, come ti chiama quel platykurtic? A meno che non mi sia perso qualcosa, sembra che abbia una curtosi più alta del normale.
Glen_b -Restate Monica

3
@Glen_b Penso sia giusto: è leptokurtic. Ma entrambi questi termini sono piuttosto sciocchi, tranne nella misura in cui consentono il riferimento al fumetto originale di Student in Biometrika . Il criterio è la curtosi; i valori sono alti o bassi o (anche meglio) quantificati.
Nick Cox,

3
Perché il leptokurtic è descritto come "dalla coda sottile"? Sebbene non vi sia alcuna relazione necessaria tra lo spessore della coda e la curtosi, la tendenza generale è che le code pesanti siano associate alla curtosi (ad es. Confrontare con normale, per densità standardizzate)t6
Glen_b -Reinstate Monica

Risposte:


12

Uso le distribuzioni Lambert W x F della coda pesante per descrivere e trasformare i dati leptokurtic. Vedi (i miei) post seguenti per maggiori dettagli e riferimenti:

Ecco un esempio riproducibile usando il pacchetto 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)

testare la normalità dei dati originali

## $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

yy×X~N(2000,400)δ=0.25

Ora torniamo alla tua domanda: come rendere di nuovo normali questi dati leptokurtici? Bene, possiamo stimare i parametri della distribuzione usando MLE (o per i metodi di utilizzo dei momenti 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.

W_delta()X

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

testare la normalità dei dati gaussianizzati

## $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

Ecco!


Sono un fan e ho iniziato a lavorare su una versione simile a scikit-learn per Python: github.com/gregversteeg/gaussianize
Greg Ver Steeg

Georg è possibile per te fornire una spiegazione più intuitiva di come funziona la tua trasformazione?
azzurro

Z=Uexp(δ/2U2)Uδ>0Z

9

cartello(.)addominali(.)13Y-mediano(Y)

Sebbene la trasformazione della radice del cubo non abbia funzionato bene, risulta che la radice quadrata e la radice di tre quarti più oscura funzionano bene.

Ecco la trama della densità del kernel originale corrispondente alla trama QQ della variabile leptokurtic nella domanda originale:

inserisci qui la descrizione dell'immagine


Dopo aver applicato la trasformazione della radice quadrata alle deviazioni, il diagramma QQ è simile al seguente:

inserisci qui la descrizione dell'immagine

Meglio, ma può essere più vicino.


Martellare ancora un po ', applicando la trasformazione di radice di tre quarti alle deviazioni dà:

inserisci qui la descrizione dell'immagine


E la densità finale del kernel di questa variabile trasformata è simile alla seguente:

inserisci qui la descrizione dell'immagine

Mi sembra vicino.


8

In molti casi, potrebbe non esserci semplicemente una trasformazione monotonica in forma semplice che produrrà un risultato quasi normale.

Ad esempio, immagina di avere una distribuzione che è una miscela finita di distribuzioni lognormali di vari parametri. Una trasformazione del registro trasformerebbe qualsiasi componente della miscela in normalità, ma la miscela di normali nei dati trasformati ti lascia con qualcosa che non è normale.

Oppure potrebbe esserci una trasformazione relativamente piacevole, ma non di uno dei moduli che potresti pensare di provare: se non conosci la distribuzione dei dati, potresti non trovarli. Ad esempio, se i dati fossero distribuiti in gamma, non troverai nemmeno l'esatta trasformazione in normalità (che certamente esiste) a meno che non ti dica esattamente quale sia la distribuzione (anche se potresti imbatterti nella trasformazione radice-cubo che in questo case lo renderebbe abbastanza vicino alla norma purché il parametro shape non sia troppo piccolo).

Ci sono una miriade di modi in cui i dati possono sembrare ragionevolmente suscettibili di essere trasformati ma che non sembrano grandiosi in nessuno di un elenco di trasformazioni ovvie.

Se puoi darci l'accesso ai dati, potrebbe anche essere che possiamo individuare una trasformazione che va bene o che possiamo mostrarti perché non ne troverai una.

Proprio dall'impressione visiva lì, sembra piuttosto una miscela di due normali con scale diverse. C'è solo un leggero accenno di asimmetria, che potresti facilmente osservare per caso. Ecco un esempio di un campione da una miscela di due normali con media comune - come vedi sembra un po 'come la tua trama (ma altri campioni possono sembrare più pesanti o più leggeri) - a questa dimensione del campione ci sono molte variazioni nell'ordine statistiche al di fuori di 1 sd su entrambi i lati della media).

inserisci qui la descrizione dell'immagine

In effetti ecco i tuoi e i miei sovrapposti:

inserisci qui la descrizione dell'immagine


Certamente sembra una miscela di due distribuzioni normali di diversa scala, eccellente osservazione.
Underminer
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.