1. Distribución t de Student

1.1 Introducción

La distribución t de Student es una familia de distribuciones simétricas alrededor de cero, caracterizadas por un parámetro llamado grados de libertad (df). Esta distribución es fundamental cuando:

  • La desviación estándar poblacional es desconocida
  • El tamaño de muestra es pequeño (n < 30)
  • Se necesita mayor precisión en las estimaciones

A medida que los grados de libertad aumentan, la distribución t se aproxima a la distribución normal estándar.

La distribución t se define por la siguiente función de densidad:

\[f(t) = \frac{\Gamma\left(\frac{df + 1}{2}\right)}{\sqrt{df \pi} \, \Gamma\left(\frac{df}{2}\right)} \left(1 + \frac{t^2}{df}\right)^{-\frac{df + 1}{2}}\]

donde:
- \(\Gamma\) es la función gamma
- \(df\) son los grados de libertad

La distribución t fue desarrollada por William Sealy Gosset bajo el seudónimo “Student” en 1908., por eso se le conoce como distribución t de Student.

1.2 Comparación con la Distribución Normal

# Crear datos para la comparación
x <- seq(-4, 4, length.out = 100)

t_data <- data.frame(x = x) %>%
  mutate(
    normal = dnorm(x),
    t2 = dt(x, df = 2),
    t5 = dt(x, df = 5),
    t30 = dt(x, df = 30)
  )

# Convertir a formato largo
t_data_long <- t_data %>%
  pivot_longer(cols = c(t2, t5, t30), 
               names_to = "df", 
               values_to = "density") %>%
  mutate(df = factor(df, 
                     levels = c("t2", "t5", "t30"), 
                     labels = c("2 df", "5 df", "30 df")))

# Gráfica
ggplot(t_data_long, aes(x = x, y = density, color = df)) +
  geom_line(size = 1) +
  geom_line(aes(y = normal), linetype = "dashed", 
            color = "black", size = 1) +
  labs(x = "Valor",
       y = "Densidad",
       caption = "Línea discontinua negra: Distribución Normal Estándar") +
  scale_color_manual(values = c("blue", "red", "green")) +
  theme_minimal() +
  theme(legend.title = element_blank(),
        plot.title = element_text(hjust = 0.5, face = "bold"))

Figura 1. Distribución Normal vs Distribución t. A medida que los grados de libertad aumentan, la distribución t se aproxima a la distribución normal estándar (línea negra entrecortada.


2. Inferencia con Una Muestra

A menudo, necesitamos hacer inferencias sobre la media de una población basándonos en una muestra. Cuando la desviación estándar poblacional es desconocida y el tamaño de muestra es pequeño, utilizamos la distribución t de Student. .

A continuación se presentan los pasos para realizar inferencias con una muestra utilizando la distribución t y compararemos la media muestral con un valor hipotético de la media poblacional.

2.1 Estadístico t para Una Muestra

El estadístico t se calcula como:

\[t = \frac{\bar{x} - \mu_0}{s/\sqrt{n}}\]

donde:

  • \(\bar{x}\) = media muestral
  • \(\mu_0\) = valor hipotético de la media poblacional
  • \(s\) = desviación estándar muestral
  • \(n\) = tamaño de la muestra

2.2 Intervalo de Confianza

El intervalo de confianza al nivel \((1-\alpha)\) para la media poblacional \(\mu\) es:

\[\bar{x} \pm t_{\alpha/2, n-1} \cdot \frac{s}{\sqrt{n}}\]

donde \(t_{\alpha/2, n-1}\) es el valor crítico de la distribución t con \(n-1\) grados de libertad.

2.3 Hipótesis

  • Hipótesis nula (H₀): \(\mu = \mu_0\)
  • Hipótesis alternativa (Hₐ):
    • Bilateral (dos colas): \(\mu \neq \mu_0\)
    • Unilateral derecha (una cola): \(\mu > \mu_0\)
    • Unilateral izquierda (una cola): \(\mu < \mu_0\)

2.4 Ejemplo: Biomarcador en Orina

Tenemos una muestra de 10 pacientes con concentraciones de un biomarcador en orina (mg/dL). Queremos probar si la media muestral es significativamente mayor de 2.0 mg/dL.

# Datos de la muestra
concentracion <- c(2.5, 2.7, 2.6, 2.4, 2.8, 2.9, 3.0, 2.3, 2.4, 2.5)

# Estadísticas descriptivas
n <- length(concentracion)
media <- mean(concentracion)
desv_std <- sd(concentracion)

# Prueba t
mu_0 <- 2.0
alpha <- 0.05

resultado_t <- t.test(concentracion, mu = mu_0, alternative = "greater")

Resultados del Análisis:

Tamaño de muestra: 10
Media muestral: 2.61
Desviación estándar: 0.233

=== PRUEBA DE HIPÓTESIS ===
H₀: μ = 2.0 mg/dL
Hₐ: μ > 2.0 mg/dL
Estadístico t: 8.2755
Valor p: 8.436e-06
Grados de libertad: 9
Decisión: Rechazar H₀ (α = 0.05)
Conclusión: Hay evidencia significativa de que la media es mayor que 2.0 mg/dL

Intervalo de Confianza

# Calcular intervalo de confianza del 95%
t_critico <- qt(1 - alpha/2, df = n - 1)
error_std <- desv_std / sqrt(n)

ic_inferior <- media - t_critico * error_std
ic_superior <- media + t_critico * error_std

Intervalo de Confianza del 95%:
[ 2.443, 2.777 ]

Visualización

# Crear distribución t
x_t <- seq(media - 4 * error_std, media + 4 * error_std, length.out = 100)
t_density <- dt((x_t - media) / error_std, df = n - 1) / error_std

t_data_plot <- data.frame(x = x_t, density = t_density)

ggplot(t_data_plot, aes(x = x, y = density)) +
  geom_line(size = 1, color = "blue") +
  geom_vline(xintercept = media, linetype = "dashed", 
             color = "red", size = 1) +
  geom_vline(xintercept = ic_inferior, linetype = "dashed", 
             color = "darkgreen", size = 1) +
  geom_vline(xintercept = ic_superior, linetype = "dashed", 
             color = "darkgreen", size = 1) +
  geom_area(data = t_data_plot %>% 
              filter(x >= ic_inferior & x <= ic_superior), 
            aes(y = density), fill = "lightblue", alpha = 0.5) +
  labs(x = "Concentración (mg/dL)",
       y = "Densidad") +
  annotate("text", x = media, y = max(t_density) * 1.1, 
           label = paste("Media =", round(media, 2)), color = "red") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

Figura 2. Distribución t con IC del 95%. La línea roja indica la media muestral, las líneas verdes los límites del intervalo de confianza.


3. Inferencia con Muestras Pareadas.

Muestras pareadas se utilizan cuando las observaciones en una muestra están emparejadas con observaciones en otra muestra o consigo misma en el tiempo, como en estudios antes y después o estudios de gemelos. En este caso, analizamos las diferencias entre las parejas.

3.1 Estadístico t para Muestras Pareadas

Para datos pareados, trabajamos con las diferencias:

\[t = \frac{\bar{d}}{s_d/\sqrt{n}}\]

donde:
- \(\bar{d}\) = media de las diferencias
- \(s_d\) = desviación estándar de las diferencias
- \(n\) = número de pares

3.2 Intervalo de Confianza

\[\bar{d} \pm t_{\alpha/2, n-1} \cdot \frac{s_d}{\sqrt{n}}\]

3.3 Hipótesis

  • Hipótesis nula (H₀): \(\mu_d = 0\) (no hay diferencia)
  • Hipótesis alternativa (Hₐ):
    • Bilateral: \(\mu_d \neq 0\)
    • Unilateral: \(\mu_d > 0\) o \(\mu_d < 0\)

3.4 Ejemplo: Concentración de PM2.5

Datos de concentración de PM2.5 en seis ciudades antes y después de un programa de reducción de emisiones.

# Datos de PM2.5
pm25_data <- read.csv("pm25-antes-despues.csv")

# Crear diferencia con mutate
pm25_data <- pm25_data %>%
  mutate(diferencia = antes - despues)

# Tabla de datos
pm25_data %>%
  gt() %>%
  tab_header(
    title = "Concentración de PM2.5 (μg/m³) Antes y Después del Programa"
  ) %>%
  fmt_number(columns = c(antes, despues, diferencia), decimals = 1) %>%
  cols_label(
    ciudad = "Ciudad",
    antes = "Antes",
    despues = "Después",
    diferencia = "Diferencia"
  )
Concentración de PM2.5 (μg/m³) Antes y Después del Programa
Ciudad Antes Después Diferencia
Ciudad_1 35.2 30.5 4.7
Ciudad_2 40.1 32.8 7.3
Ciudad_3 38.5 33.1 5.4
Ciudad_4 42.0 35.0 7.0
Ciudad_5 39.7 34.2 5.5
Ciudad_6 41.3 41.0 0.3

Estadísticas Descriptivas

# Estadísticas de las diferencias
estadisticas_pareado <- data.frame(
  Media_diferencia = mean(pm25_data$diferencia),
  DE_diferencia = sd(pm25_data$diferencia),
  n = length(pm25_data$diferencia)
)

estadisticas_pareado %>%
  gt() %>%
  tab_header(title = "Estadísticas de las Diferencias") %>%
  fmt_number(columns = c(Media_diferencia, DE_diferencia), decimals = 3) %>%
  cols_label(
    Media_diferencia = "Media (Antes - Después)",
    DE_diferencia = "Desviación Estándar",
    n = "n"
  )
Estadísticas de las Diferencias
Media (Antes - Después) Desviación Estándar n
5.033 2.525 6

Prueba t Pareada

# Prueba t pareada (unilateral: antes > después)
resultado_pareado <- t.test(pm25_data$antes, pm25_data$despues, 
                             paired = TRUE, 
                             alternative = "greater")

=== PRUEBA t PAREADA ===
H₀: μd = 0 (no hay reducción)
Hₐ: μd > 0 (hay reducción)
Estadístico t: 4.8832
Valor p: 0.00227
Grados de libertad: 5
IC 95%: [ 2.956, Inf]
Decisión: Rechazar H₀
Conclusión: Hay evidencia significativa de reducción en PM2.5

Visualización de Datos Pareados

# Preparar datos para gráfica
pm25_long <- data.frame(
  ciudad = rep(1:6, 2),
  momento = rep(c("Antes", "Después"), each = 6),
  concentracion = c(pm25_data$antes, pm25_data$despues)
)

ggplot(pm25_long, aes(x = momento, y = concentracion, group = ciudad)) +
  geom_line(color = "gray60", size = 0.8) +
  geom_point(aes(color = momento), size = 3) +
  scale_color_manual(values = c("Antes" = "red", "Después" = "blue")) +
  labs(x = "Momento",
       y = "Concentración PM2.5 (μg/m³)",
       color = "Momento") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        legend.position = "none")

Figura 3. Perfiles individuales mostrando el cambio en concentración de PM2.5 para cada ciudad.


4. Inferencia con Dos Muestras Independientes

Se utiliza para comparar las medias de dos poblaciones que se suponen independientes. Es fundamental verificar los supuestos de normalidad y homogeneidad de varianzas antes de aplicar la prueba t.

4.1 Estadístico t para Dos Muestras

Cuando las varianzas son iguales (pooled):

\[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\), \(\bar{x}_2\) = medias muestrales
- \(s_1^2\), \(s_2^2\) = varianzas muestrales
- \(n_1\), \(n_2\) = tamaños de las muestras

Los grados de libertad son: \(df = n_1 + n_2 - 2\)

4.2 Prueba t de Welch (varianzas desiguales)

Cuando las varianzas no son iguales:

\[t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}}\]

con grados de libertad ajustados (fórmula de Welch-Satterthwaite): \[df = \frac{\left(\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}\right)^2}{\frac{\left(\frac{s_1^2}{n_1}\right)^2}{n_1 - 1} + \frac{\left(\frac{s_2^2}{n_2}\right)^2}{n_2 - 1}}\]

4.3 Intervalo de Confianza

\[(\bar{x}_1 - \bar{x}_2) \pm t_{\alpha/2} \cdot \sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}\]

4.4 Hipótesis

  • Hipótesis nula (H₀): \(\mu_1 = \mu_2\)
  • Hipótesis alternativa (Hₐ):
    • Bilateral: \(\mu_1 \neq \mu_2\)
    • Unilateral: \(\mu_1 > \mu_2\) o \(\mu_1 < \mu_2\)

4.5 Ejemplo: Niveles de Insulina

Comparación de niveles de insulina entre personas con y sin diabetes tipo II.

# Nota: Este código requiere el archivo diabetes.csv
# Cargar y preparar datos
diabetes <- read.csv("diabetes.csv")
diabetes <- diabetes[diabetes$Insulin != 0, ]

insulina_data <- data.frame(
  insulina = diabetes$Insulin,
  diabetes = factor(diabetes$Outcome, 
                   levels = c(0, 1), 
                   labels = c("sin diabetes", "con diabetes"))
)

Estadísticas Descriptivas

estadisticas_grupos <- insulina_data %>%
  group_by(diabetes) %>%
  summarise(
    Media = mean(insulina),
    Mediana = median(insulina),
    DE = sd(insulina),
    n = n()
  )

estadisticas_grupos %>%
  gt() %>%
  tab_header(
    title = "Estadísticas Descriptivas: Niveles de Insulina por Grupo"
  ) %>%
  fmt_number(columns = c(Media, Mediana, DE), decimals = 1) %>%
  cols_label(
    diabetes = "Grupo",
    Media = "Media",
    Mediana = "Mediana",
    DE = "Desviación Estándar",
    n = "n"
  )
Estadísticas Descriptivas: Niveles de Insulina por Grupo
Grupo Media Mediana Desviación Estándar n
sin diabetes 130.3 102.5 102.5 264
con diabetes 206.8 169.5 132.7 130

Visualización

ggplot(insulina_data, aes(x = diabetes, y = insulina, fill = diabetes)) +
  geom_boxplot(alpha = 0.7, outlier.colour = "red", outlier.size = 2) +
  stat_summary(fun = mean, geom = "point", 
               shape = 18, size = 4, color = "blue") +
  labs(x = "Grupo",
       y = "Insulina (μU/mL)",
       caption = "Puntos azules: media; Línea horizontal: mediana; Puntos rojos: outliers") +
  scale_fill_manual(values = c("lightblue", "lightcoral")) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        legend.position = "none")

Figura 4. Comparación de niveles de insulina entre grupos.

Verificación de Supuestos

Prueba de Normalidad (Shapiro-Wilk)

# Prueba de normalidad para cada grupo de diabetes
shapiro_sin <- shapiro.test(insulina_data$insulina[insulina_data$diabetes == "sin diabetes"])
shapiro_con <- shapiro.test(insulina_data$insulina[insulina_data$diabetes == "con diabetes"])

cat("=== PRUEBA DE NORMALIDAD (Shapiro-Wilk) ===\n")
## === PRUEBA DE NORMALIDAD (Shapiro-Wilk) ===
cat("Sin diabetes - W:", round(shapiro_sin$statistic, 4), 
    ", p-valor:", format.pval(shapiro_sin$p.value, digits = 4), "\n")
## Sin diabetes - W: 0.7707 , p-valor: < 2.2e-16
cat("Con diabetes - W:", round(shapiro_con$statistic, 4), 
    ", p-valor:", format.pval(shapiro_con$p.value, digits = 4), "\n\n")
## Con diabetes - W: 0.826 , p-valor: 4.192e-11

Prueba de Homogeneidad de Varianzas (Levene)

# Prueba de Levene
levene_result <- leveneTest(insulina ~ diabetes, data = insulina_data)

cat("=== PRUEBA DE LEVENE (Homogeneidad de Varianzas) ===\n")
## === PRUEBA DE LEVENE (Homogeneidad de Varianzas) ===
cat("F:", round(levene_result$`F value`[1], 4), "\n")
## F: 4.8139
cat("p-valor:", format.pval(levene_result$`Pr(>F)`[1], digits = 4), "\n\n")
## p-valor: 0.02882

Prueba t con Varianzas Iguales

resultado_t_igual <- t.test(insulina ~ diabetes, 
                             data = insulina_data, 
                             var.equal = TRUE)

cat("=== PRUEBA T (Varianzas Iguales) ===\n")
## === PRUEBA T (Varianzas Iguales) ===
cat("Estadístico t:", round(resultado_t_igual$statistic, 4), "\n")
## Estadístico t: -6.3054
cat("Valor p:", format.pval(resultado_t_igual$p.value, digits = 4), "\n")
## Valor p: 7.755e-10
cat("Grados de libertad:", resultado_t_igual$parameter, "\n")
## Grados de libertad: 392
cat("IC 95%: [", round(resultado_t_igual$conf.int[1], 2), ",", 
    round(resultado_t_igual$conf.int[2], 2), "]\n\n")
## IC 95%: [ -100.43 , -52.69 ]

Prueba t de Welch (Varianzas Desiguales)

resultado_welch <- t.test(insulina ~ diabetes, 
                           data = insulina_data, 
                           var.equal = FALSE)

cat("=== PRUEBA T DE WELCH (Varianzas Desiguales) ===\n")
## === PRUEBA T DE WELCH (Varianzas Desiguales) ===
cat("Estadístico t:", round(resultado_welch$statistic, 4), "\n")
## Estadístico t: -5.7833
cat("Valor p:", format.pval(resultado_welch$p.value, digits = 4), "\n")
## Valor p: 2.672e-08
cat("Grados de libertad:", round(resultado_welch$parameter, 2), "\n")
## Grados de libertad: 207.14
cat("IC 95%: [", round(resultado_welch$conf.int[1], 2), ",", 
    round(resultado_welch$conf.int[2], 2), "]\n\n")
## IC 95%: [ -102.66 , -50.46 ]
if(resultado_welch$p.value < 0.05) {
  cat("Decisión: Rechazar H₀\n")
  cat("Conclusión: Hay diferencia significativa entre los grupos\n")
} else {
  cat("Decisión: No rechazar H₀\n")
}
## Decisión: Rechazar H₀
## Conclusión: Hay diferencia significativa entre los grupos

Alternativa No Paramétrica: Mann-Whitney U

resultado_mw <- wilcox.test(insulina ~ diabetes, data = insulina_data)

cat("=== PRUEBA DE MANN-WHITNEY U (No Paramétrica) ===\n")
## === PRUEBA DE MANN-WHITNEY U (No Paramétrica) ===
cat("Estadístico W:", resultado_mw$statistic, "\n")
## Estadístico W: 9210.5
cat("Valor p:", format.pval(resultado_mw$p.value, digits = 4), "\n")
## Valor p: 7.477e-14

5. Resumen de Decisiones

5.1 Criterios para Elegir la Prueba Apropiada

Guía para Selección de Pruebas Estadísticas
Situación Prueba Recomendada Supuestos Principales
Una muestra, n < 30 t de Student (una muestra) Normalidad
Una muestra, n ≥ 30 t de Student o Z TLC aplica
Datos pareados t pareada Normalidad de diferencias
Dos muestras, varianzas iguales t de Student (dos muestras) Normalidad, homogeneidad de varianzas
Dos muestras, varianzas desiguales t de Welch Normalidad
Datos no normales Pruebas no paramétricas (Wilcoxon, Mann-Whitney) Ninguno (distribución libre)

5.2 Interpretación del Valor p

  • p ≤ 0.01: Evidencia muy fuerte contra H₀
  • 0.01 < p ≤ 0.05: Evidencia fuerte contra H₀
  • 0.05 < p ≤ 0.10: Evidencia débil contra H₀
  • p > 0.10: Evidencia insuficiente contra H₀

6. Referencias y Recursos

Funciones R Principales

  • t.test(): Pruebas t (una muestra, pareada, dos muestras)
  • wilcox.test(): Pruebas de Wilcoxon y Mann-Whitney
  • var.test(): Prueba F para igualdad de varianzas
  • leveneTest(): Prueba de Levene (paquete car)
  • shapiro.test(): Prueba de normalidad de Shapiro-Wilk

Paquetes Utilizados

install.packages(c("ggplot2", "dplyr", "tidyr", "gt", "car"))

Documento generado: 2025-11-04