Inferencias con Dos Muestras Independientes

La prueba t para dos muestras independientes se utiliza cuando se tienen dos conjuntos de datos no relacionados y se desea comparar sus medias, para saber si provienen de una misma población de datos. Esta prueba evalúa si hay una diferencia significativa entre las medias de los dos conjuntos de datos.

Hipótesis Nula y Alternativa

  • Hipótesis nula (\(H_0\)): \(\mu_1 = \mu_2\), donde \(\mu_1\) y \(\mu_2\) son las medias poblacionales de los dos conjuntos de datos.
  • Hipótesis alternativa (\(H_a\)): \(\mu_1 \neq \mu_2\) (prueba bilateral) o \(\mu_1 > \mu_2\) o \(\mu_1 < \mu_2\) (pruebas unilaterales).

Estadístico de Prueba

El estadístico de prueba se calcula utilizando la siguiente fórmula: \[ t = \frac{\bar x_1 - \bar x_2}{\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}} \]

donde:

  • \(\bar x_1\) y \(\bar x_2\) son las medias muestrales de los dos conjuntos de datos.

  • \(s_1\) y \(s_2\) son las desviaciones estándar muestrales de los dos conjuntos de datos.

  • \(n_1\) y \(n_2\) son los tamaños de las muestras de los dos conjuntos de datos.

Valor P

El valor p se calcula utilizando la distribución t con \(n_1 + n_2 - 2\) grados de libertad. El valor p representa la probabilidad de observar un estadístico de prueba tan extremo como el calculado, dado que la hipótesis nula es verdadera.

Decisión

La decisión se toma comparando el valor p con el nivel de significancia \(\alpha\): - Si \(p \leq \alpha\), se rechaza la hipótesis nula. - Si \(p > \alpha\), no se rechaza la hipótesis nula.

Ejemplo de Aplicación

Queremos comparar los niveles de insulina en sangre entre dos grupos de personas: un grupo con diagnosis de diabetes tipo II y otro grupo sin diabetes.

Extracción de los datos

Los datos los vamos a extraer del archivo diabetes.csv que contiene los niveles de insulina en la columna Insulin y el grupo al que pertenecen en la columna Outcome (0 = sin diabetes, 1 = con diabetes). Además debemos filtrar los casos en los que no reportan el nivel de insulina (0). Los datos los vamos a guardar en un archivo .csv: insulina.csv que contiene las columnas insulina y diabetes.

# Cargar los datos
diabetes <- read.csv("diabetes.csv")

# Filtrar los datos para eliminar los casos con insulina 0
diabetes <- diabetes[diabetes$Insulin != 0, ]

# Cambiar el nombre de la columna "Insulin" a "insulina" y "Outcome" a "diabetes"
colnames(diabetes)[colnames(diabetes) == "Insulin"] <- "insulina"
colnames(diabetes)[colnames(diabetes) == "Outcome"] <- "diabetes"
# Convertir la columna "diabetes" a factor
diabetes$diabetes <- factor(diabetes$diabetes, levels = c(0, 1), labels = c("sin diabetes", "con diabetes"))

# Guardar los datos en un archivo .csv
write.csv(diabetes[, c("insulina", "diabetes")], "insulina.csv", row.names = FALSE)

Estadísticas descriptivas de la dos muestras

# Cargar los datos 
insulina <- read.csv("insulina.csv")

#Calcular estadísticas descriptivas
library(dplyr)

estadisticas <- insulina %>%
  group_by(diabetes) %>%
  summarise(
    media = mean(insulina),
    mediana = median(insulina),
    sd = sd(insulina),
    n = n()
  )

# Crear una tabla gt con los resultados con un solo decimal
library(gt)
tabla1 <- estadisticas %>%
  gt() %>%
  tab_header(
    title = "TABLA 1. Estadísticas descriptivas de los niveles de insulina"
  ) %>%
  cols_label(
    diabetes = "Grupo",
    media = "Media",
    mediana = "Mediana",
    sd = "Desviación estándar",
    n = "Tamaño de muestra"
  ) %>%
  fmt_number(
    columns = c(media, mediana, sd),
    decimals = 1
  ) %>%
  fmt_number(
    columns = c(n),
    decimals = 0
  )
# Mostrar la tabla
tabla1
TABLA 1. Estadísticas descriptivas de los niveles de insulina
Grupo Media Mediana Desviación estándar Tamaño de muestra
con diabetes 206.8 169.5 132.7 130
sin diabetes 130.3 102.5 102.5 264

Gráfica de caja incluyendo la media

library(ggplot2)
# Gráfico de caja (boxplot) con la media
ggplot(insulina, aes(x = diabetes, y = insulina)) +
  geom_boxplot(outlier.colour = "red", outlier.size = 2) +
  geom_jitter(width = 0.2, alpha = 0.5) +
  stat_summary(fun = mean, geom = "point", shape = 18, size = 3, color = "blue") +
  labs(x = "Grupo", y = "Insulina") +
  theme_minimal()

Figura 1. Gráfico de caja de los niveles de insulina en sangre por grupo (sin diabetes y con diabetes). Las líneas horizontales gruesas representan la mediana y los puntos azules la media. Los puntos rojos son los valores atípicos (outliers).

Cálculo de la prueba t para dos muestras independientes

# Cálculo de la prueba t para dos muestras independientes
t_test_result <- t.test(insulina ~ diabetes, data = insulina, var.equal = TRUE)

# Extraer resultados
t_statistic <- t_test_result$statistic
p_value <- t_test_result$p.value
degrees_of_freedom <- t_test_result$parameter
confidence_interval <- t_test_result$conf.int

# Mostrar resultados
cat("Estadístico t:", t_statistic, "\n")
## Estadístico t: 6.305413
cat("Valor p:", p_value, "\n")
## Valor p: 7.754791e-10
cat("Grados de libertad:", degrees_of_freedom, "\n")
## Grados de libertad: 392
cat("Intervalo de confianza:", confidence_interval, "\n")
## Intervalo de confianza: 52.68733 100.4292

Verificación de supuestos

Normalidad
# Verificación de normalidad
# Histograma de los niveles de insulina con línea de la media
ggplot(insulina, aes(x = insulina)) +
  geom_histogram(aes(y = ..density..), bins = 30, fill = "lightblue", color = "black") +
  geom_vline(aes(xintercept = mean(insulina)), color = "red", linetype = "dashed", linewidth = 1) +
  labs(x = "Insulina", y = "Densidad") +
  theme_minimal()

# Prueba de normalidad de Shapiro-Wilk
shapiro_test <- shapiro.test(insulina$insulina)
# Mostrar resultados
cat("Estadístico W de Shapiro-Wilk:", shapiro_test$statistic, "\n")
## Estadístico W de Shapiro-Wilk: 0.8040996
cat("Valor p de Shapiro-Wilk:", shapiro_test$p.value, "\n")
## Valor p de Shapiro-Wilk: 1.698218e-21

Figura 2. Histograma de los niveles de insulina en sangre. La línea roja representa la media.

Homogeneidad de varianzas

# Verificación de homogeneidad de varianzas
# Prueba de Levene
library(car)
levene_test <- leveneTest(insulina ~ diabetes, data = insulina)
# Mostrar resultados
cat("Estadístico de Levene:", levene_test$F[1], "\n")
## Estadístico de Levene: 4.813888
cat("Valor p de Levene:", levene_test$`Pr(>F)`[1], "\n")
## Valor p de Levene: 0.02881759
Conclusiones
  • Si el valor p de la prueba de Shapiro-Wilk es menor que 0.05, se rechaza la hipótesis nula de normalidad.

  • Si el valor p de la prueba de Levene es menor que 0.05, se rechaza la hipótesis nula de homogeneidad de varianzas.

  • Si ambos supuestos son válidos, se puede utilizar la prueba t para dos muestras independientes.

  • Si alguno de los supuestos no es válido, se puede utilizar la prueba t de Welch o una prueba no paramétrica como la prueba de Mann-Whitney U.

Prueba t de Welch

Esta prueba se utiliza cuando no se cumple el supuesto de homogeneidad de varianzas. La prueba t de Welch es una versión modificada de la prueba t que ajusta los grados de libertad para tener en cuenta la desigualdad de varianzas.

# Cálculo de la prueba t de Welch
t_test_result_welch <- t.test(insulina ~ diabetes, data = insulina, var.equal = FALSE)

# Extraer resultados
t_statistic_welch <- t_test_result_welch$statistic
p_value_welch <- t_test_result_welch$p.value
degrees_of_freedom_welch <- t_test_result_welch$parameter
confidence_interval_welch <- t_test_result_welch$conf.int
# Mostrar resultados
cat("Estadístico t de Welch:", t_statistic_welch, "\n")
## Estadístico t de Welch: 5.783322
cat("Valor p de Welch:", p_value_welch, "\n")
## Valor p de Welch: 2.672116e-08
cat("Grados de libertad de Welch:", degrees_of_freedom_welch, "\n")
## Grados de libertad de Welch: 207.1366
cat("Intervalo de confianza de Welch:", confidence_interval_welch, "\n")
## Intervalo de confianza de Welch: 50.46025 102.6563

Prueba no paramétrica de Mann-Whitney U

La prueba de Mann-Whitney U es una prueba no paramétrica que se utiliza para comparar dos grupos independientes cuando no se cumplen los supuestos de normalidad u homogeneidad de varianzas. Esta prueba evalúa si hay diferencias significativas entre las distribuciones de los dos grupos.

# Cálculo de la prueba de Mann-Whitney U
mann_whitney_result <- wilcox.test(insulina ~ diabetes, data = insulina)
# Extraer resultados
mann_whitney_statistic <- mann_whitney_result$statistic
p_value_mann_whitney <- mann_whitney_result$p.value
# Mostrar resultados
cat("Estadístico U de Mann-Whitney:", mann_whitney_statistic, "\n")
## Estadístico U de Mann-Whitney: 25109.5
cat("Valor p de Mann-Whitney:", p_value_mann_whitney, "\n")
## Valor p de Mann-Whitney: 7.476986e-14