Transformación de Variable Tipo Box-Cox en R Quarto

La transformación de variable tipo Box-Cox es una técnica utilizada en análisis estadístico para mejorar la adecuación de los datos a los supuestos de normalidad y homogeneidad de varianza. Esta transformación es especialmente útil para variables continuas positivas que presentan asimetría o heterogeneidad de varianza. La transformación de Box-Cox se define mediante la siguiente ecuación:

                    y ( λ ) = (x^(λ) - 1) / λ 

Donde:

  • λ es lambda.
  • x es la variable original.
  • y(λ) es la variable transformada para un valor determinado de λ.
  • λ es el parámetro de transformación que puede variar desde -∞ hasta +∞.

El valor de λ determina el tipo de transformación aplicada:

  • Si λ = 0 , la transformación de Box-Cox es equivalente al logaritmo natural (ln).
  • Si λ = 1 , la transformación de Box-Cox es equivalente a una transformación lineal (sin transformación).
  • Si λ < 0 , se aplica una transformación inversa.

Preparo Pre-análisis

Para realizar este tipo de transformación, se utiliza el paquete MASS en R.

Codigo
library(MASS)
library(ggthemes)
library(ggplot2)

Ejemplo con Datos: InsectSprays

Utilizaremos el conjunto de datos InsectSprays disponible en R para ilustrar la transformación de Box-Cox. La función boxcox() se utiliza para calcular la transformación de Box-Cox y encontrar el valor óptimo de λ para una variable específica. Esta función devuelve una lista de resultados, incluyendo el valor óptimo de λ y gráficos de diagnóstico.

1. Cargar los datos de InsectSprays:

Codigo
insects <- InsectSprays

2. Aplicar la transformación de Box-Cox:

Primero, se ajusta un modelo lineal simple para la variable count con un ajuste adicional de 0.1 para evitar valores cero.

Codigo
b <- boxcox(lm(insects$count + 0.1 ~ 1))

3. Encontrar el valor óptimo de λ:

El valor óptimo de λ se encuentra seleccionando el valor de λ que maximiza la log-verosimilitud devuelta por boxcox().

Codigo
lambda <- b$x[which.max(b$y)]
lambda
[1] 0.4242424
Codigo
# Crear DataFrame a partir de los resultados de boxcox
boxcox_df <- data.frame(
  lambda = b$x,
  log_likelihood = b$y
)

# Graficar con ggplot2
ggplot(boxcox_df, aes(x = lambda, y = log_likelihood)) +
  geom_line(color = "blue", size = 1) +
  geom_vline(xintercept = lambda, linetype = "dashed", color = "red") +
  geom_point(aes(x = lambda, y = max(log_likelihood)), color = "red", size = 1) +
  annotate("text", x = lambda + 0.2, y = -130,
           label = paste("Lambda =", round(lambda, 3)),color = "black") +
  labs(title = "Transformación de Box-Cox",
       x = "λ Lambda",
       y = "Log-Verosimilitud") +
  theme_few()+
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    axis.title = element_text(face = "bold", size = 12),
    axis.text = element_text(size = 10)
  )

4. Transformar la variable count:

Utilizando el valor óptimo de λ, se transforma la variable count y se almacena en una nueva variable count2.

Codigo
insects$count2 <- (insects$count ^ lambda - 1) / lambda

5. Visualizar la distribución antes y después de la transformación:

Se crean histogramas para comparar la distribución de la variable original y la transformada.

Codigo
par(mfrow = c(1, 2))  # Dividir la ventana gráfica en 2 columnas
hist(insects$count, main = "'Count' Original", xlab = "count")
hist(insects$count2, main = " 'Count' Transformado", xlab = "count2")

Aprendizaje del día

La transformación de Box-Cox es una herramienta útil para transformar datos y cumplir con los supuestos de normalidad y homogeneidad de varianza necesarios en muchos métodos estadísticos. Mediante el ajuste del parámetro λ, se pueden lograr distribuciones de datos más simétricas y con varianza constante, facilitando análisis más precisos y válidos.