Cómo realizar una transformación Box-Cox en Python

Una transformación box-cox es un método comúnmente utilizado para transformar un conjunto de datos que no se distribuye normalmente en uno con una distribución más normal .

La idea básica detrás de este método es encontrar algún valor para λ tal que los datos transformados estén lo más cerca posible de la distribución normal, utilizando la siguiente fórmula:

  • y (λ) = (y λ – 1) / λ si y ≠ 0
  • y (λ) = log (y) si y = 0

Podemos realizar una transformación box-cox en Python usando la función scipy.stats.boxcox () .

El siguiente ejemplo muestra cómo utilizar esta función en la práctica.

Ejemplo: transformación Box-Cox en Python

Supongamos que generamos un conjunto aleatorio de 1,000 valores que provienen de una distribución exponencial :

#cargar los paquetes necesarios 
import numpy as np 
 from scipy. estadísticas de  importación boxcox 
 importar seaborn como sns

#Haga que este ejemplo sea reproducible
 np. al azar . semilla (0)

#generate dataset
 data = np. al azar . exponencial (tamaño = 1000 )

# trazar la distribución de valores de datos
 sns. distplot (datos, hist = Falso , kde = Verdadero ) 

Podemos ver que la distribución no parece normal.

Podemos usar la función boxcox () para encontrar un valor óptimo de lambda que produzca una distribución más normal:

# realizar la transformación de Box-Cox en datos originales
 transform_data, best_lambda = boxcox (datos)

# trazar la distribución de los valores de datos transformados
 sns. distplot ( datos_transformados , hist = Falso , kde = Verdadero )

Transformación de box-cox en Python

Podemos ver que los datos transformados siguen una distribución mucho más normal.

También podemos encontrar el valor lambda exacto utilizado para realizar la transformación Box-Cox:

# mostrar impresión de valor lambda óptimo
 (best_lambda)

0,2420131978174143

Se encontró que la lambda óptima era aproximadamente 0,242 .

Por lo tanto, cada valor de los datos se transformó utilizando la siguiente ecuación:

Nuevo = (antiguo 0,242 – 1) / 0,242

Podemos confirmar esto mirando los valores de los datos originales en comparación con los datos transformados:

#ver los primeros cinco valores de los datos del conjunto de datos original
 [0: 5]

matriz ([0.79587451, 1.25593076, 0.92322315, 0.78720115, 0.55104849])

#ver los primeros cinco valores del conjunto de datos
 transformado transform_data [0: 5]

matriz ([- 0.22212062, 0.23427768, -0.07911706, -0.23247555, -0.55495228])

El primer valor del conjunto de datos original fue 0,79587 . Por lo tanto, aplicamos la siguiente fórmula para transformar este valor:

Nuevo = (0,79587 0,242 – 1) / 0,242 = -0,222

Podemos confirmar que el primer valor en el conjunto de datos transformado es de hecho -0,222 .

Recursos adicionales

Cómo crear e interpretar una gráfica QQ en Python
Cómo realizar una prueba de normalidad Shapiro-Wilk en Python

  • https://r-project.org
  • https://www.python.org/
  • https://www.stata.com/

Deja un comentario

Un diagrama de tallo y hojas es un gráfico que podemos usar para mostrar datos dividiendo cada valor en un…
statologos comunidad-2

Compartimos información EXCLUSIVA y GRATUITA solo para suscriptores (cursos privados, programas, consejos y mucho más)

You have Successfully Subscribed!