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

Puedes opinar sobre este contenido:
  • 0
  • 0
  • 0
  • 0

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/

Redactor del artículo

  • Luis Benites
    Director de Statologos.com

    Tengo una Maestría en Ciencias en Estadística Aplicada y he trabajado en algoritmos de aprendizaje automático para empresas profesionales tanto en el sector de la salud como en el comercio minorista.

    Ver todas las entradas

¿Te hemos ayudado?

Ayudanos ahora tú, dejanos un comentario de agradecimiento, nos ayuda a motivarnos y si te es viable puedes hacer una donación:

La ayuda no cuesta nada

Por otro lado te rogamos que compartas nuestro sitio con tus amigos, compañeros de clase y colegas, la educación de calidad y gratuita debe ser difundida, recuerdalo:

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!