La estadística descriptiva permite resumir y comprender los datos observados. Sin embargo, en muchos problemas de ingeniería el objetivo es obtener conclusiones sobre una población completa a partir de una muestra. La inferencia estadística proporciona herramientas para estimar parámetros poblacionales y evaluar afirmaciones mediante pruebas de hipótesis.

En esta sección se presentan los principales intervalos de confianza y pruebas de hipótesis para una sola población. Los paquetes necesarios se muestran a continuación:

library(ggplot2)

Intervalos de confianza

Los intervalos de confianza son rangos de valores calculados a partir de una muestra. Estos rangos nos dicen dónde es muy probable que se encuentre el valor real o poblacional que estamos buscando, e indican qué tan segura o incierta es nuestra estimación.

Para entender el concepto de intervalo de confianza, simularemos múltiples muestras de una población normal con media y desviación estándar conocidas. Calcularemos el intervalo de confianza del \(95\%\) para cada muestra y los representaremos gráficamente. Los intervalos que no contienen la verdadera media poblacional se resaltan en rojo.

# Parámetros poblacionales
mu_real <- 10      # media poblacional verdadera
sigma <- 2         # desviación estándar conocida
n <- 1000            # tamaño de cada muestra
confianza <- 0.95
alpha <- 1 - confianza
z <- qnorm(1 - alpha/2)

# Número de intervalos a simular
K <- 20

# Inicializar vectores para guardar los límites
limite_inferior <- numeric(K)
limite_superior <- numeric(K)
contiene_mu <- logical(K)

set.seed(123)  # para reproducibilidad

for (i in 1:K) {
  # Generar muestra aleatoria de una normal
  muestra <- rnorm(n, mean = mu_real, sd = sigma)
  media_muestral <- mean(muestra)
  error <- z * sigma / sqrt(n)
  limite_inferior[i] <- media_muestral - error
  limite_superior[i] <- media_muestral + error
  contiene_mu[i] <- (limite_inferior[i] <= mu_real & limite_superior[i] >= mu_real)
}

# Crear data frame para graficar
df_ic <- data.frame(
  id = 1:K,
  LI = limite_inferior,
  LS = limite_superior,
  contiene = contiene_mu
)


ggplot(df_ic, aes(x = id, y = (LI + LS)/2, ymin = LI, ymax = LS, color = contiene)) +
  geom_linerange(linewidth = 1.2) +
  geom_hline(yintercept = mu_real, linetype = "dashed", color = "black", linewidth = 1) +
  scale_color_manual(values = c("red", "blue"), labels = c("No contiene μ", "Contiene μ")) +
  labs(
    title = "Intervalos de confianza del 95% para la media",
    subtitle = paste("Verdadera media poblacional μ =", mu_real),
    x = "Número de muestra",
    y = "Valor de la media",
    color = "Intervalo"
  ) +
  theme_minimal() +
  coord_flip() +  # para mejor visualización horizontal
  theme(legend.position = "bottom")

De los 20 intervalos simulados, aproximadamente el \(95\%\) (19 de 20 en promedio) deberían contener la verdadera media poblacional \(\mu = 10\). En esta simulación particular, los intervalos en rojo son aquellos que no logran capturar a \(\mu\). Esta visualización ayuda a comprender la idea de confianza: si repitiéramos el procedimiento muchas veces, la proporción de intervalos que contienen \(\mu\) sería igual al nivel de confianza.

Intervalos de confianza para la media con varianza conocida

Cuando la variable de interés sigue una distribución normal y la varianza poblacional \(\sigma^2\) es conocida, es posible construir un intervalo de confianza para la media poblacional utilizando la distribución normal estándar.

El intervalo de confianza para \(\mu\) con nivel de confianza \(100(1-\alpha)\%\) es:

\[ IC_{\mu}= \bar{x} \pm z_{\alpha/2} \frac{\sigma}{\sqrt{n}} \]

donde:

  • \(\bar{x}\): media muestral.
  • \(\sigma\): desviación estándar poblacional.
  • \(n\): tamaño de muestra.
  • \(z_{\alpha/2}\): valor crítico de la distribución normal estándar.

Ejemplo en R

Una empresa de bebidas embotelladoras controla la calidad del llenado de sus envases de 500 ml. La máquina llenadora debe tener una media de llenado de 500 ml, pero se sabe por estudios previos que la desviación estándar del proceso es \(\sigma = 1.2\) ml (varianza conocida). Se toma una muestra aleatoria de 15 botellas y se registra el volumen real (en ml) de cada una. Los datos obtenidos son:

# Datos de ejemplo
x <- c(500.2, 499.8, 501.0, 500.5, 499.7, 500.3, 500.9, 499.5, 500.1, 500.4, 500.0, 501.2, 499.6, 500.7, 500.8)

Construya un intervalo de confianza del \(95\%\) para la media poblacional \(\mu\) e interprete el resultado.

# Varianza conocida
sigma <- 1.2
alpha <- 0.05 # Nivel de significancia

# Media del conjunto de datos
media <- mean(x)

# Cantidad de datos
n <- length(x)

# Valor de la normal estandar
z <- qnorm(1 - alpha/2)

# Limites superior e inferior del intervalo de confianza con varianza conocida
LI <- media - z * sigma/sqrt(n)
LS <- media + z * sigma/sqrt(n)

# Mostrar resultados
cat("Media muestral:", round(media, 3), "ml\n")
## Media muestral: 500.313 ml
cat("Desviación estándar poblacional:", round(sigma, 3), "ml\n")
## Desviación estándar poblacional: 1.2 ml
cat("Intervalo de confianza del 95%: [", round(LI, 3), ",", round(LS, 3), "]\n")
## Intervalo de confianza del 95%: [ 499.706 , 500.921 ]

Gráfico

# Crear data frame para la curva normal de la media muestral
x_norm <- seq(LI - 0.5, LS + 0.5, length = 200)
y_norm <- dnorm(x_norm, mean = media, sd = sigma / sqrt(n))

ggplot() +
  # Curva de la distribución de la media muestral
  geom_area(aes(x = x_norm, y = y_norm), fill = "lightblue", alpha = 0.5) +
  geom_line(aes(x = x_norm, y = y_norm), color = "blue", size = 1) +
  # Intervalo de confianza
  geom_segment(aes(x = LI, xend = LS, y = 0, yend = 0),
               color = "blue", size = 2, lineend = "round") +
  geom_point(aes(x = media, y = 0), color = "green3", size = 4) +
  # Datos individuales (jitter en y para visibilidad)
  geom_point(aes(x = x, y = -0.02), shape = 21, fill = "gray", size = 2.5, alpha = 0.7) +
  # Anotaciones
  annotate("text", x = media, y = 0.05, label = paste("Media =", round(media,2)), color = "green3") +
  annotate("text", x = LI, y = -0.03, label = round(LI,2), hjust = 1.2) +
  annotate("text", x = LS, y = -0.03, label = round(LS,2), hjust = -0.2) +
  labs(title = "Intervalo de confianza del 95% (varianza conocida)",
       subtitle = paste("σ = 1.2 conocida | n =", n),
       x = "Volumen de llenado (ml)", y = "Densidad de la media muestral") +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Intervalos de confianza para la media con varianza desconocida

Cuando la variable de interés sigue una distribución normal pero la varianza poblacional \(\sigma^{2}\) es desconocida (situación mucho más frecuente en la práctica), se utiliza la distribución \(t\) de Student en lugar de la normal estándar. La desviación estándar poblacional \(\sigma\) se estima mediante la desviación estándar muestral \(s\).

El intervalo de confianza para \(\mu\) con nivel de confianza \(100(1-\alpha)\%\) es:

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

donde:

  • \(\bar{x}\): media muestral.
  • \(s\): desviación estándar muestral \(\left(\frac{1}{n-1}\sum_{i=1}^{n}(x_{i} - \bar{x})^{2}\right)\)
  • \(n\): tamaño de muestra.
  • \(t_{\alpha/2,n-1}\): valor crítico de la distribución \(t\)-Student con \(n-1\) grados de libertad.

El intervalo es válido si los datos provienen de una población aproximadamente normal (o si \(n\) es grande, por el Teorema Límite Central.

Ejemplo en R

Una empresa de bebidas embotelladoras controla la calidad del llenado de sus envases de 500 ml. No se conoce la desviación estándar del proceso de llenado, por lo que se estima a partir de la muestra. Se toma una muestra aleatoria de 15 botellas y se registra el volumen real (en ml). Los datos obtenidos son:

x <- c(500.2, 499.8, 501.0, 500.5, 499.7, 500.3, 500.9, 499.5, 
       500.1, 500.4, 500.0, 501.2, 499.6, 500.7, 500.8,499.0)

Construya un intervalo de confianza del 95% para la media poblacional \(\mu\) e interprete el resultado.

alpha <- 0.05           # nivel de significancia
n <- length(x)          # tamaño de muestra
media <- mean(x)        # media muestral
s <- sd(x)              # desviación estándar muestral

# Valor crítico t de Student con n-1 grados de libertad
t_critico <- qt(1 - alpha/2, df = n - 1)

# Límites del intervalo
LI <- media - t_critico * s / sqrt(n)
LS <- media + t_critico * s / sqrt(n)

# Mostrar resultados
cat("Media muestral:", round(media, 3), "ml\n")
## Media muestral: 500.231 ml
cat("Desviación estándar muestral:", round(s, 3), "ml\n")
## Desviación estándar muestral: 0.612 ml
cat("Intervalo de confianza del 95%: [", round(LI, 3), ",", round(LS, 3), "]\n")
## Intervalo de confianza del 95%: [ 499.905 , 500.557 ]

Con un \(95\%\) de confianza, la verdadera media poblacional del volumen de llenado se encuentra entre el límite inferior y el superior calculados. Si el intervalo incluye el valor objetivo de 500 ml, no hay evidencia suficiente para afirmar que la máquina está descalibrada; en caso contrario, se recomendaría una revisión del proceso.

Gráfico

# Nota: Usamos media como centro estimado (la verdadera media es desconocida)
x_vals <- seq(LI - 0.3, LS + 0.3, length = 300)
dens_t_scaled <- dt((x_vals - media) / (s / sqrt(n)), df = n-1) / (s / sqrt(n))

# Graficar
ggplot() +
  # Curva de densidad t escalada (área sombreada)
  geom_area(aes(x = x_vals, y = dens_t_scaled), fill = "orange", alpha = 0.4) +
  geom_line(aes(x = x_vals, y = dens_t_scaled), color = "darkorange", size = 1) +
  # Intervalo de confianza (azul)
  geom_segment(aes(x = LI, xend = LS, y = 0, yend = 0),
               color = "blue", size = 2, lineend = "round") +
  geom_point(aes(x = media, y = 0), color = "green3", size = 4) +
  # Datos individuales (ligero desplazamiento en y)
  geom_point(aes(x = x, y = -0.02), shape = 21, fill = "gray", size = 2.5, alpha = 0.7) +
  # Anotaciones
  annotate("text", x = media, y = 0.05, label = paste("Media =", round(media, 2)), color = "green3") +
  annotate("text", x = LI, y = -0.03, label = round(LI, 2), hjust = 1.2) +
  annotate("text", x = LS, y = -0.03, label = round(LS, 2), hjust = -0.2) +
  labs(title = "Intervalo de confianza del 95% (varianza desconocida)",
       subtitle = paste("s =", round(s, 2), "| n =", n, "| t crítico =", round(t_critico, 3)),
       x = "Volumen de llenado (ml)", 
       y = "Densidad de la media muestral (distribución t escalada)") +
  theme_minimal()

Diferencias clave entre los dos métodos

Aspecto Varianza conocida (\(\sigma\) conocida) Varianza desconocida (se estima \(s\))
Distribución usada Normal estándar \(N(0,1)\) t de Student con \(n-1\) g.l.
Valor crítico \(z_{\alpha/2}\) \(t_{\alpha/2,\, n-1}\)
Ancho del intervalo Depende solo de \(\sigma\) fijo Depende de \(s\) (más amplio para \(n\) pequeño)

Cuando \(n\) es grande (por ejemplo \(n > 30\)), la distribución \(t\) se aproxima a la normal, y ambos intervalos son muy similares. Sin embargo, con muestras pequeñas usar la \(t\) es crucial para mantener el nivel de confianza especificado.

Intervalos de confianza para la varianza

Cuando se desea estimar la variabilidad de una población que sigue una distribución normal, se construye un intervalo de confianza para la varianza \(\sigma^2\) (o para la desviación estándar \(\sigma\)) a partir de la varianza muestral \(s^2\).

Supongamos que \(X_1, X_2, \dots, X_n\) es una muestra aleatoria de una población normal con media \(\mu\) y varianza \(\sigma^2\) (ambas desconocidas). Se sabe que:

\[ \frac{(n-1)s^2}{\sigma^2} \sim \chi^2_{(n-1)} \]

donde \(s^2 = \frac{1}{n-1}\sum_{i=1}^n (X_i - \bar{X})^2\) es la varianza muestral insesgada y \(\chi^2_{(n-1)}\) denota la distribución chi-cuadrado con \(n-1\) grados de libertad.

Para un nivel de confianza \(100(1-\alpha)\%\), se pueden encontrar los valores críticos \(\chi^2_{\alpha/2, n-1}\) y \(\chi^2_{1-\alpha/2, n-1}\) tales que:

\[ P\left( \chi^2_{1-\alpha/2, n-1} \le \frac{(n-1)s^2}{\sigma^2} \le \chi^2_{\alpha/2, n-1} \right) = 1-\alpha \]

Invirtiendo la desigualdad se obtiene el intervalo de confianza para \(\sigma^2\):

\[ IC_{\sigma^2} = \left( \frac{(n-1)s^2}{\chi^2_{\alpha/2,\, n-1}},\; \frac{(n-1)s^2}{\chi^2_{1-\alpha/2,\, n-1}} \right) \]

Para la desviación estándar \(\sigma\), el intervalo es simplemente la raíz cuadrada de los límites anteriores.

Nota: Este procedimiento asume que los datos provienen de una distribución normal o al menos aproximadamente normal. Si la normalidad es dudosa, se deben usar métodos alternativos (bootstrap, intervalos basados en la distribución chi-cuadrado no son robustos ante desviaciones de la normalidad).

Ejemplo en R

Se registran los tiempos (en minutos) que tarda un servicio de entrega en completar un pedido. Se toma una muestra aleatoria de 20 entregas. Los datos son:

# Datos de ejemplo: tiempos de entrega (minutos)
tiempos <- c(22.3, 21.8, 22.5, 23.1, 21.9, 22.6, 23.2, 22.0, 22.9, 21.5,
             22.7, 23.0, 21.6, 22.4, 22.2, 22.8, 23.3, 21.7, 22.1, 23.4)

Construya un intervalo de confianza del \(95\%\) para la varianza y para la desviación estándar del tiempo de entrega.

alpha <- 0.05
n <- length(tiempos)
s2 <- var(tiempos)
gl <- n - 1

# Valores críticos de la chi-cuadrado
chi_inf <- qchisq(1 - alpha/2, gl)   # χ²_{α/2}
chi_sup <- qchisq(alpha/2, gl)       # χ²_{1-α/2}

# Intervalo para la varianza
LI_var <- (gl * s2) / chi_inf
LS_var <- (gl * s2) / chi_sup

# Intervalo para la desviación estándar
LI_sd <- sqrt(LI_var)
LS_sd <- sqrt(LS_var)

cat("IC 95% para σ²: [", round(LI_var, 4), ",", round(LS_var, 4), "]\n")
## IC 95% para σ²: [ 0.2024 , 0.7466 ]
cat("IC 95% para σ:  [", round(LI_sd, 3), ",", round(LS_sd, 3), "]\n")
## IC 95% para σ:  [ 0.45 , 0.864 ]

Con un \(95\%\) de confianza, la varianza verdadera del tiempo de entrega se encuentra entre el límite inferior y superior calculados. Equivalentemente, la desviación estándar poblacional se encuentra entre la raíz de dichos límites. Si se tuviera un valor objetivo de variabilidad (por ejemplo, una desviación estándar máxima tolerable), se podría verificar si ese valor cae dentro del intervalo.

Gráfico

# Rango de valores para la chi-cuadrado
x_chi <- seq(0, 35, length = 300)
dens_chi <- dchisq(x_chi, df = gl)

# Crear data frame para la curva
df_chi <- data.frame(x = x_chi, y = dens_chi)

# Identificar la región central (entre chi_sup y chi_inf)
region <- subset(df_chi, x >= chi_sup & x <= chi_inf)

# Gráfico
ggplot() +
  # Curva completa
  geom_line(data = df_chi, aes(x, y), color = "black", size = 1) +
  # Área sombreada (intervalo de confianza)
  geom_area(data = region, aes(x, y), fill = "steelblue", alpha = 0.4) +
  # Líneas verticales para los valores críticos
  geom_vline(xintercept = chi_sup, linetype = "dashed", color = "red", size = 0.8) +
  geom_vline(xintercept = chi_inf, linetype = "dashed", color = "red", size = 0.8) +
  # Etiquetas de los valores críticos
  annotate("text", x = chi_sup, y = 0.05, label = round(chi_sup, 2), 
           color = "red", hjust = 1.2, size = 4) +
  annotate("text", x = chi_inf, y = 0.05, label = round(chi_inf, 2), 
           color = "red", hjust = -0.2, size = 4) +
  # Título y ejes
  labs(title = "Distribución chi cuadrado con 14 grados de libertad",
       subtitle = "Área sombreada: 95% de confianza (valores críticos que definen el IC para σ²)",
       x = expression(chi^2), y = "Densidad") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5))

Intervalos de confianza para una proporción

Cuando se trabaja con variables cualitativas (categóricas) que solo pueden tomar dos resultados posibles (éxito/fracaso, sí/no, etc.), interesa estimar la proporción poblacional \(p\) (por ejemplo, la proporción de clientes satisfechos, la proporción de piezas defectuosas).

Supongamos que se toma una muestra aleatoria de tamaño \(n\) y se observan \(x\) individuos que poseen la característica de interés. La proporción muestral es:

\[ \hat{p} = \frac{x}{n} \]

Para \(n\) suficientemente grande, el Teorema Central del Límite permite aproximar la distribución de \(\hat{p}\) mediante una normal:

\[ \hat{p} \approx N\left(p,\; \frac{p(1-p)}{n}\right) \]

Estandarizando y reemplazando \(p\) por \(\hat{p}\) en el error estándar (para poder construir el intervalo), se obtiene el intervalo de Wald:

\[ IC_{p} = \hat{p} \pm z_{\alpha/2} \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]

donde \(z_{\alpha/2}\) es el valor crítico de la distribución normal estándar.

Para que la aproximación normal sea razonable se suele exigir:

\[ n\hat{p} \ge 5 \quad \text{y} \quad n(1-\hat{p}) \ge 5 \]

Cuando estas condiciones no se cumplen, es preferible usar otros métodos (intervalo exacto de Clopper-Pearson, o el intervalo de Wilson).

Ejemplo en R

Un centro de salud desea estimar la proporción de pacientes que están satisfechos con la atención recibida. Se encuesta a una muestra aleatoria de 120 pacientes, de los cuales 96 manifiestan estar satisfechos.

Construya un intervalo de confianza del \(95\%\) para la verdadera proporción de satisfacción en la población.

# Datos del ejemplo
n <- 120          # tamaño de muestra
x <- 96           # número de éxitos (satisfechos)
alpha <- 0.05     # nivel de significancia

# Proporción muestral
p_hat <- x / n
cat("Proporción muestral p_hat =", round(p_hat, 3), "\n")
## Proporción muestral p_hat = 0.8
# Valor crítico z
z <- qnorm(1 - alpha/2)

# Error estándar estimado
ee <- sqrt(p_hat * (1 - p_hat) / n)

# Límites del intervalo (Wald)
LI <- p_hat - z * ee
LS <- p_hat + z * ee

cat("Intervalo de confianza del 95% (Wald):\n")
## Intervalo de confianza del 95% (Wald):
cat("[", round(LI, 3), ",", round(LS, 3), "]\n")
## [ 0.728 , 0.872 ]

Gráfico

# Valores para la curva normal
media_aprox <- p_hat
sd_aprox <- sqrt(p_hat * (1 - p_hat) / n)
x_vals <- seq(max(0, media_aprox - 4*sd_aprox), min(1, media_aprox + 4*sd_aprox), length = 200)
y_vals <- dnorm(x_vals, mean = media_aprox, sd = sd_aprox)

# Límites del intervalo (asegurar que estén dentro de [0,1])
LI_plot <- max(0, LI)
LS_plot <- min(1, LS)

ggplot() +
  # Curva normal de la distribución muestral de p_hat
  geom_area(aes(x = x_vals, y = y_vals), fill = "lightblue", alpha = 0.5) +
  geom_line(aes(x = x_vals, y = y_vals), color = "blue", size = 1) +
  # Intervalo de confianza en el eje horizontal
  geom_segment(aes(x = LI_plot, xend = LS_plot, y = 0, yend = 0),
               color = "darkblue", size = 2, lineend = "round") +
  # Punto de la estimación puntual
  geom_point(aes(x = p_hat, y = 0), color = "red", size = 4) +
  # Anotaciones
  annotate("text", x = p_hat, y = 0.5, label = paste("p_hat =", round(p_hat, 2)), color = "red") +
  annotate("text", x = LI_plot, y = -0.03, label = round(LI_plot, 2), hjust = 1.2) +
  annotate("text", x = LS_plot, y = -0.03, label = round(LS_plot, 2), hjust = -0.2) +
  labs(title = "Intervalo de confianza del 95% para una proporción",
       subtitle = paste("n =", n, ", éxitos =", x, ", p_hat =", round(p_hat, 3)),
       x = "Proporción", y = "Densidad") +
  xlim(0, 1) +
  theme_minimal()