¿Cómo transformar la distribución leptokurtic a la normalidad?

12

Supongamos que tengo una variable leptokurtic que me gustaría transformar a la normalidad. ¿Qué transformaciones pueden lograr esta tarea? Soy muy consciente de que la transformación de datos puede no ser siempre deseable, pero como búsqueda académica, supongo que quiero "forzar" los datos a la normalidad. Además, como se puede deducir de la gráfica, todos los valores son estrictamente positivos.

He intentado una variedad de transformaciones (casi todo lo que he visto usado anteriormente, incluyendo , etc.), pero ninguna de ellas funciona particularmente bien. ¿Hay transformaciones bien conocidas para hacer que las distribuciones leptokurtic sean más normales?1X,X,asinh(X)

Vea el gráfico de QQ normal a continuación:

ingrese la descripción de la imagen aquí

Socavador
fuente
55
¿Está familiarizado con la transformación integral de probabilidad ? Se ha invocado en algunos hilos en este sitio , si desea verlo en acción.
whuber
8
Necesita algo que funcione simétricamente en (variable "medio") y al mismo tiempo respetar el signo. Nada de lo que intentaste se acerca si no tienes un "medio". Use la mediana para "medio" e intente la raíz cúbica de las desviaciones, recordando implementar la raíz cúbica como signo (.) * Abs (.) ^ (1/3). Sin garantías y muy ad hoc, pero debe avanzar en la dirección correcta. -
Nick Cox
1
¿Qué te hace llamar a eso platykurtic? A menos que me haya perdido algo, parece que tiene una curtosis más alta de lo normal.
Glen_b -Reinstale a Monica
3
@Glen_b Creo que es correcto: es leptokurtic. Pero ambos términos son bastante tontos, excepto en la medida en que permiten hacer referencia a la caricatura original de Student en Biometrika . El criterio es la curtosis; los valores son altos o bajos o (incluso mejores) cuantificados.
Nick Cox
3
¿Por qué se describe leptokurtic como 'cola delgada'? Si bien no hay relación necesaria entre el espesor de la cola y curtosis, la tendencia general es para colas pesadas para ser asociados con la kurtosis (por ejemplo, comparar con normal, para densidades estandarizados)t6 6
Glen_b -Reinstate Monica

Respuestas:

12

Utilizo distribuciones de cola pesada Lambert W x F para describir y transformar datos leptokurtic. Consulte (mis) publicaciones siguientes para obtener más detalles y referencias:

Aquí hay un ejemplo reproducible usando el paquete 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)

probar la normalidad de los datos originales

## $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×Xnorte(2000,400)δ=0.2 0.25 5

Ahora volvamos a su pregunta: ¿cómo volver a normalizar estos datos leptokurtic? Bueno, podemos estimar los parámetros de la distribución usando MLE (o para métodos de uso de momentos 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)

prueba de normalidad de datos gaussianizados

## $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
fuente
Soy fanático y comencé a trabajar en una versión similar a scikit-learn para python: github.com/gregversteeg/gaussianize
Greg Ver Steeg
Georg, ¿es posible que proporciones una explicación más intuitiva de cómo funciona tu transformación?
azúrico
Z=UExp(δ/ /2U2)Uδ>0 0Z
9

firmar(.)abdominales(.)13Y-mediana(Y)

Aunque la transformación de la raíz cúbica no funcionó bien, resulta que la raíz cuadrada y la raíz más oscura de tres cuartos funcionan bien.

Aquí estaba el gráfico original de densidad del kernel correspondiente al gráfico QQ de la variable leptokurtic en la pregunta original:

ingrese la descripción de la imagen aquí


Después de aplicar la transformación de raíz cuadrada a las desviaciones, la gráfica QQ se ve así:

ingrese la descripción de la imagen aquí

Mejor, pero puede estar más cerca.


Martilleando un poco más, aplicando la transformación de raíz de tres cuartos a las desviaciones da:

ingrese la descripción de la imagen aquí


Y la densidad final del núcleo de esta variable transformada se ve así:

ingrese la descripción de la imagen aquí

Se ve cerca de mi

Socavador
fuente
8

En muchos casos, puede que simplemente no haya una transformación monotónica de forma simple que produzca un resultado cercano a lo normal.

Por ejemplo, imagine que tenemos una distribución que es una mezcla finita de distribuciones lognormales de varios parámetros. Una transformación logarítmica transformaría cualquiera de los componentes de la mezcla a la normalidad, pero la mezcla de normales en los datos transformados te deja con algo que no es normal.

O puede haber una transformación relativamente agradable, pero no una de las formas que pensaría probar: si no conoce la distribución de los datos, es posible que no la encuentre. Por ejemplo, si los datos se distribuyeron en gamma, ni siquiera encontrará la transformación exacta a la normalidad (que ciertamente existe) a menos que le diga exactamente cuál es la distribución (aunque podría tropezar con la transformación de raíz cúbica que en este case lo haría bastante cerca de lo normal siempre que el parámetro de forma no sea demasiado pequeño).

Hay innumerables formas en que los datos pueden parecer razonablemente susceptibles de ser transformados, pero que no se ven muy bien en ninguna lista de transformaciones obvias.

Si puede darnos acceso a los datos, es posible que podamos detectar una transformación que funciona bien o que podamos mostrarle por qué no encontrará una.

Solo por la impresión visual allí, parece más bien una mezcla de dos normales con diferentes escalas. Solo hay un ligero indicio de asimetría, que puedes observar fácilmente por casualidad. Aquí hay un ejemplo de una muestra de una mezcla de dos normales con una media común, como puede ver, se parece bastante a su trama (pero otras muestras pueden parecer más pesadas o más livianas), en este tamaño de muestra hay mucha variación en el orden estadísticas fuera de 1 sd a ambos lados de la media).

ingrese la descripción de la imagen aquí

De hecho, aquí están los tuyos y los míos superpuestos:

ingrese la descripción de la imagen aquí

Glen_b -Reinstate a Monica
fuente
Ciertamente parece una mezcla de dos distribuciones normales de diferente escala, excelente observación.
Underminer