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.
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.
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.
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.
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.
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)
# 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 |
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
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 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.
# 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
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.
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
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