1 Presentación

Este documento reúne, en un solo recorrido paso a paso y pensado para ejecutarse íntegramente en R, el repaso de Estadística Inferencial con el que abrimos el curso de Muestreo y Estadística No Paramétrica. Partimos de la distribución más fundamental de toda la inferencia clásica —la distribución Normal— y construimos, una encima de la otra, las tres distribuciones muestrales que sustentan la inferencia sobre varianzas y medias cuando los parámetros poblacionales son desconocidos: la Chi-cuadrado (\(\chi^2\)), la \(t\) de Student y la \(F\) de Fisher-Snedecor.

La idea central que guía todo el documento es la siguiente:

Todas estas distribuciones nacen de la misma semilla: combinaciones de variables Normales estándar independientes. Entender bien la Normal es entender, en germen, a las otras tres.

Cada sección sigue la misma estructura:

  1. Definición formal de la distribución.
  2. Propiedades teóricas (media, varianza, forma).
  3. Visualización de la densidad con R.
  4. Cálculo de probabilidades y valores críticos con las funciones nativas de R (d, p, q, r).
  5. Aplicación práctica a la inferencia estadística, con un ejemplo numérico completamente resuelto.

Todo el código es autocontenido: basta con ejecutar los bloques en orden (o simplemente publicar este archivo en RPubs) para reproducir cada gráfico y cada resultado.


2 La familia de funciones de distribuciones en R

Antes de empezar, conviene saber que R tiene, para cada distribución de probabilidad, una familia de cuatro funciones con un patrón de nombre muy consistente. Para la distribución Normal, por ejemplo:

Prefijo Significado Ejemplo Normal Uso típico
d densidad, \(f(x)\) dnorm() Dibujar la curva de densidad
p probabilidad acumulada, \(P(X\le x)\) pnorm() Calcular probabilidades (como usar la tabla)
q quantil o valor crítico, inverso de p qnorm() Hallar percentiles o valores críticos
r random, generación de números aleatorios rnorm() Simular datos que siguen esa distribución

Esta misma lógica se repite exactamente igual para chisq, t y f. Es decir, una vez que se domina el patrón, se dominan las cuatro distribuciones del curso:

Familia de funciones de distribución en R (base, sin paquetes adicionales)
Distribucion Densidad Acumulada Cuantil Aleatorios
Normal dnorm() pnorm() qnorm() rnorm()
Chi-cuadrado dchisq() pchisq() qchisq() rchisq()
t de Student dt() pt() qt() rt()
F de Fisher-Snedecor df() pf() qf() rf()

3 1. La distribución Normal (Gaussiana)

3.1 1.1 Definición

Decimos que una variable aleatoria continua \(X\) sigue una distribución Normal (o Gaussiana) con parámetros \(\mu\in\mathbb{R}\) (media) y \(\sigma^2>0\) (varianza), lo que se denota \(X\sim N(\mu,\sigma^2)\), si su función de densidad de probabilidad es

\[ f(x)=\frac{1}{\sigma\sqrt{2\pi}}\exp\left[-\frac{(x-\mu)^2}{2\sigma^2}\right], \qquad x\in\mathbb{R}. \]

Sus propiedades básicas son:

  • \(E[X]=\mu\) y \(\operatorname{Var}(X)=\sigma^2\).
  • La densidad es simétrica respecto de \(x=\mu\), unimodal y con forma de campana.
  • El área bajo toda la curva es igual a 1.
  • Regla empírica (68-95-99.7): aproximadamente el \(68.27\%\) de la probabilidad se concentra en \([\mu-\sigma,\mu+\sigma]\), el \(95.45\%\) en \([\mu-2\sigma,\mu+2\sigma]\) y el \(99.73\%\) en \([\mu-3\sigma,\mu+3\sigma]\).

3.2 1.2 Visualizando la densidad Normal en R

La función dnorm(x, mean, sd) evalúa \(f(x)\). Importante: en R, el segundo parámetro de la Normal es sd (la desviación estándar \(\sigma\)), no la varianza \(\sigma^2\).

# Rango de valores de x donde vamos a evaluar la densidad
x <- seq(-4, 4, length.out = 500)

# Densidad Normal estándar: mu = 0, sigma = 1
y <- dnorm(x, mean = 0, sd = 1)

plot(x, y, type = "l", lwd = 2, col = "steelblue",
     main = expression(paste("Densidad Normal estándar  ", N(0, 1))),
     xlab = "x", ylab = "f(x)")
abline(v = 0, col = "gray50", lty = 2)

3.2.1 Comparando distintas medias y desviaciones estándar

x <- seq(-10, 15, length.out = 500)

plot(x, dnorm(x, mean = 0, sd = 1), type = "l", lwd = 2, col = "steelblue",
     ylim = c(0, 0.45), xlab = "x", ylab = "f(x)",
     main = "Efecto de mu y sigma en la densidad Normal")
lines(x, dnorm(x, mean = 3, sd = 1), lwd = 2, col = "darkorange")
lines(x, dnorm(x, mean = 0, sd = 2), lwd = 2, col = "forestgreen")
legend("topright",
       legend = c("N(0, 1)", "N(3, 1)  -> se desplaza", "N(0, 2)  -> se ensancha"),
       col = c("steelblue", "darkorange", "forestgreen"), lwd = 2, bty = "n")

Lectura del gráfico: cambiar \(\mu\) desplaza la campana horizontalmente sin cambiar su forma; cambiar \(\sigma\) ensancha o angosta la campana (a mayor \(\sigma\), mayor dispersión, curva más “achatada”).

3.3 1.3 Regla empírica verificada con R

# P(mu - 1*sigma <= X <= mu + 1*sigma), con mu=0, sigma=1
p1 <- pnorm(1) - pnorm(-1)
p2 <- pnorm(2) - pnorm(-2)
p3 <- pnorm(3) - pnorm(-3)

cat(sprintf("P(-1 <= Z <= 1) = %.4f  (regla empírica: 0.6827)\n", p1))
## P(-1 <= Z <= 1) = 0.6827  (regla empírica: 0.6827)
cat(sprintf("P(-2 <= Z <= 2) = %.4f  (regla empírica: 0.9545)\n", p2))
## P(-2 <= Z <= 2) = 0.9545  (regla empírica: 0.9545)
cat(sprintf("P(-3 <= Z <= 3) = %.4f  (regla empírica: 0.9973)\n", p3))
## P(-3 <= Z <= 3) = 0.9973  (regla empírica: 0.9973)

3.4 1.4 Función de distribución acumulada: pnorm()

pnorm(q, mean, sd) calcula \(P(X\le q)\). Esto es, literalmente, lo mismo que buscar un valor en la tabla Normal impresa, pero sin las limitaciones de una tabla (sin necesidad de interpolar, con cualquier decimal, y para cualquier \(\mu\) y \(\sigma\)).

# P(Z <= 1.5) para la Normal estándar
pnorm(1.5)
## [1] 0.9331928
# P(Z <= 1.234)  --- en una tabla impresa esto exigiría interpolar
pnorm(1.234)
## [1] 0.8913985

3.4.1 Ejemplo resuelto 1: estandarización y probabilidad

Sea \(X\) el puntaje de un examen, \(X\sim N(70, 10^2)\), es decir \(\mu=70\) y \(\sigma=10\). Un estudiante obtuvo \(X=85\). ¿Qué porcentaje del grupo superó, asumiendo normalidad de los puntajes?

Paso 1. Estandarizar. \(z=\dfrac{X-\mu}{\sigma}=\dfrac{85-70}{10}=1.5\).

Paso 2. Calcular \(P(Z\le 1.5)\) y convertir a porcentaje.

mu    <- 70
sigma <- 10
X     <- 85

z <- (X - mu) / sigma
cat(sprintf("z = %.4f\n", z))
## z = 1.5000
# Con la Normal estándar (tras estandarizar)
p_estandar <- pnorm(z)

# Alternativa: sin estandarizar, indicando mean y sd directamente en pnorm()
p_directo <- pnorm(X, mean = mu, sd = sigma)

cat(sprintf("P(Z <= %.1f)        = %.4f\n", z, p_estandar))
## P(Z <= 1.5)        = 0.9332
cat(sprintf("P(X <= %d) directo  = %.4f\n", X, p_directo))
## P(X <= 85) directo  = 0.9332
cat(sprintf("\nEl estudiante superó aproximadamente al %.2f%% del grupo.\n", p_estandar * 100))
## 
## El estudiante superó aproximadamente al 93.32% del grupo.

Nótese que pnorm() acepta trabajar directamente con la variable original \(X\) (indicando mean y sd) sin necesidad de estandarizar a mano primero: ambos caminos dan el mismo resultado.

3.5 1.5 Cuantiles y valores críticos: qnorm()

qnorm(p, mean, sd) es la función inversa de pnorm(): dado un área (probabilidad) \(p\), devuelve el valor \(x\) tal que \(P(X\le x)=p\). Esto reemplaza directamente a la interpolación inversa que se hace a mano con las tablas impresas.

# Valor crítico z tal que P(Z <= z) = 0.876  (equivalente al Ejemplo 4.2 de las sesiones teóricas)
qnorm(0.876)
## [1] 1.155221
# Valores críticos clásicos usados en intervalos de confianza
z_90 <- qnorm(1 - 0.10/2)   # z_(0.05)  para 90% de confianza
z_95 <- qnorm(1 - 0.05/2)   # z_(0.025) para 95% de confianza
z_99 <- qnorm(1 - 0.01/2)   # z_(0.005) para 99% de confianza

cat(sprintf("z crítico (90%% confianza) = %.4f\n", z_90))
## z crítico (90% confianza) = 1.6449
cat(sprintf("z crítico (95%% confianza) = %.4f\n", z_95))
## z crítico (95% confianza) = 1.9600
cat(sprintf("z crítico (99%% confianza) = %.4f\n", z_99))
## z crítico (99% confianza) = 2.5758

Nota pedagógica: el valor \(z_{0.025}=1.96\) que memorizamos para el 95% de confianza es, exactamente, lo que acaba de calcular qnorm(0.975). La tabla impresa y qnorm() responden la misma pregunta; R simplemente lo hace con precisión total y sin interpolar.

3.6 1.6 Simulando datos Normales: rnorm()

# Generamos 10 000 observaciones simuladas de N(70, 10^2)
muestra_normal <- rnorm(10000, mean = 70, sd = 10)

hist(muestra_normal, breaks = 60, freq = FALSE, col = rgb(0.27, 0.51, 0.71, 0.5),
     main = "Histograma de 10 000 datos simulados ~ N(70, 10^2)",
     xlab = "x", ylab = "Densidad")
curve(dnorm(x, mean = 70, sd = 10), col = "darkred", lwd = 2, add = TRUE)
legend("topright", legend = c("Datos simulados", "Densidad teórica"),
       fill = c(rgb(0.27,0.51,0.71,0.5), NA), border = c(NA, NA),
       lty = c(NA, 1), col = c(NA, "darkred"), lwd = c(NA, 2), bty = "n")

cat(sprintf("Media muestral:    %.4f  (teórica: 70)\n", mean(muestra_normal)))
## Media muestral:    69.9365  (teórica: 70)
cat(sprintf("Desv. est. muestral: %.4f  (teórica: 10)\n", sd(muestra_normal)))
## Desv. est. muestral: 10.0024  (teórica: 10)

3.7 1.7 El rol de la Normal en el muestreo: Teorema Central del Límite

En el muestreo casi nunca observamos a toda la población: trabajamos con una muestra aleatoria \(X_1,\dots,X_n\) y su media muestral \(\bar X=\frac1n\sum X_i\). Dos resultados son la base de todo el curso:

  • Si la población ya es Normal: \(\bar X\sim N\!\left(\mu,\dfrac{\sigma^2}{n}\right)\) exactamente, para cualquier tamaño de muestra \(n\).
  • Si la población NO es Normal (Teorema Central del Límite): cuando \(n\) es suficientemente grande (regla práctica: \(n\gtrsim 30\)), \(\bar X\) se aproxima a \(N\!\left(\mu,\dfrac{\sigma^2}{n}\right)\) de todas formas.

Vamos a verificar el TCL con una simulación, partiendo de una población claramente no normal: una distribución exponencial.

simular_medias_muestrales <- function(n, poblacion_media = 5, n_replicas = 20000) {
  # Cada fila es una muestra de tamaño n de una población Exponencial(media = poblacion_media)
  muestras <- matrix(rexp(n_replicas * n, rate = 1/poblacion_media),
                      nrow = n_replicas, ncol = n)
  rowMeans(muestras)
}

par(mfrow = c(1, 3))
for (n in c(2, 10, 50)) {
  medias <- simular_medias_muestrales(n)
  hist(medias, breaks = 60, freq = FALSE, col = rgb(0.27, 0.51, 0.71, 0.5),
       main = paste("n =", n), xlab = expression(bar(X)), ylab = "Densidad")
  curve(dnorm(x, mean = 5, sd = 5/sqrt(n)), col = "darkred", lwd = 2, add = TRUE)
}

par(mfrow = c(1, 1))

Lectura: con \(n=2\) el histograma de \(\bar X\) todavía es asimétrico (hereda la asimetría de la exponencial). Con \(n=10\) ya se parece bastante a una campana. Con \(n=50\) el ajuste a la curva Normal teórica (línea roja) es prácticamente perfecto. Este es el TCL en acción, y es la razón por la que la distribución Normal es el punto de partida obligado de todo el curso.


4 2. De la Normal a la Chi-cuadrado (\(\chi^2\))

4.1 2.1 Motivación

En la práctica, \(\sigma^2\) casi nunca se conoce: también debe estimarse con la muestra, mediante la varianza muestral

\[ S^2=\frac{1}{n-1}\sum_{i=1}^n (X_i-\bar X)^2. \]

Para hacer inferencia sobre \(\sigma^2\) necesitamos conocer la distribución de \(S^2\), o, de forma equivalente, de \(\dfrac{(n-1)S^2}{\sigma^2}\). Esa distribución es la Chi-cuadrado.

4.2 2.2 Definición

Si \(Z_1,\dots,Z_k\) son variables aleatorias independientes, cada una \(N(0,1)\), se define

\[ Q=\sum_{i=1}^k Z_i^2 \;\sim\; \chi^2_k \qquad (\text{"}Q\text{ sigue una Chi-cuadrado con } k \text{ grados de libertad"}). \]

Propiedades: \(E[Q]=k\), \(\operatorname{Var}(Q)=2k\); la densidad es asimétrica (sesgada a la derecha) y se acerca a una Normal cuando \(k\) es grande.

4.3 2.3 Construyendo la \(\chi^2\) desde su definición (simulación)

La forma más didáctica de entender la \(\chi^2\) es construirla nosotros mismos a partir de normales estándar, y comparar el histograma resultante con la densidad teórica que da dchisq().

construir_chi2 <- function(k, n_simulaciones = 100000) {
  # Genera una matriz de n_simulaciones x k normales estándar, las eleva al
  # cuadrado y suma cada fila: esto ES la definición de la Chi-cuadrado.
  Z <- matrix(rnorm(n_simulaciones * k), nrow = n_simulaciones, ncol = k)
  rowSums(Z^2)
}

k <- 5
Q_sim <- construir_chi2(k)

hist(Q_sim, breaks = 100, freq = FALSE, col = rgb(0.18, 0.55, 0.34, 0.5),
     xlim = c(0, 25), main = paste("Chi-cuadrado construida desde su definición, k =", k),
     xlab = "q", ylab = "Densidad")
curve(dchisq(x, df = k), col = "darkred", lwd = 2, add = TRUE)
legend("topright", legend = c("Suma de k normales al cuadrado (simulación)",
                               "Densidad teórica dchisq()"),
       fill = c(rgb(0.18,0.55,0.34,0.5), NA), border = c(NA,NA),
       lty = c(NA,1), col = c(NA,"darkred"), lwd = c(NA,2), bty = "n")

cat(sprintf("Media simulada:    %.3f   (teórica E[Q] = k = %d)\n", mean(Q_sim), k))
## Media simulada:    4.997   (teórica E[Q] = k = 5)
cat(sprintf("Varianza simulada: %.3f   (teórica Var(Q) = 2k = %d)\n", var(Q_sim), 2*k))
## Varianza simulada: 9.996   (teórica Var(Q) = 2k = 10)

4.4 2.4 Densidad para distintos grados de libertad

x <- seq(0, 40, length.out = 500)
gl <- c(2, 5, 10, 20, 30)
colores <- c("steelblue", "darkorange", "forestgreen", "purple", "black")

plot(x, dchisq(x, df = gl[1]), type = "l", lwd = 2, col = colores[1], ylim = c(0, 0.35),
     xlab = "q", ylab = "f(q)", main = "Densidad Chi-cuadrado según los grados de libertad")
for (i in 2:length(gl)) lines(x, dchisq(x, df = gl[i]), lwd = 2, col = colores[i])
legend("topright", legend = paste("k =", gl), col = colores, lwd = 2, bty = "n")

Lectura: a mayor \(k\), la distribución se desplaza a la derecha (su media es \(k\)) y se vuelve más simétrica, acercándose a una campana Normal.

4.5 2.5 Probabilidades y valores críticos con pchisq() y qchisq()

# P(Q <= 20) con 14 grados de libertad
pchisq(20, df = 14)
## [1] 0.8698586
# Valor crítico chi^2_(0.025, 14): el valor q tal que P(Q > q) = 0.025
qchisq(1 - 0.025, df = 14)
## [1] 26.11895
# Valor crítico chi^2_(0.975, 14)
qchisq(1 - 0.975, df = 14)
## [1] 5.628726

4.6 2.6 Aplicación: intervalo de confianza para la varianza poblacional

Si \(X_1,\dots,X_n\) son i.i.d. \(N(\mu,\sigma^2)\), puede demostrarse que \(\dfrac{(n-1)S^2}{\sigma^2}\sim\chi^2_{n-1}\). Despejando \(\sigma^2\) de la probabilidad pivotal \(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\) se obtiene el intervalo de confianza:

\[ \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). \]

4.6.1 Ejemplo resuelto: control de calidad

Un ingeniero mide el diámetro (mm) de \(n=15\) piezas y obtiene \(S^2=0.045\). Suponiendo normalidad, construya un intervalo de confianza del 95% para \(\sigma^2\).

n     <- 15
S2    <- 0.045
conf  <- 0.95
alpha <- 1 - conf
gl    <- n - 1

chi2_sup <- qchisq(1 - alpha/2, df = gl)   # chi^2_(alpha/2, n-1)
chi2_inf <- qchisq(alpha/2,     df = gl)   # chi^2_(1-alpha/2, n-1)

lim_inf <- (gl * S2) / chi2_sup
lim_sup <- (gl * S2) / chi2_inf

cat(sprintf("Grados de libertad: %d\n", gl))
## Grados de libertad: 14
cat(sprintf("chi^2_(0.025,%d) = %.4f\n", gl, chi2_sup))
## chi^2_(0.025,14) = 26.1189
cat(sprintf("chi^2_(0.975,%d) = %.4f\n", gl, chi2_inf))
## chi^2_(0.975,14) = 5.6287
cat(sprintf("\nIC 95%% para sigma^2: (%.4f, %.4f) mm^2\n", lim_inf, lim_sup))
## 
## IC 95% para sigma^2: (0.0241, 0.1119) mm^2
cat(sprintf("IC 95%% para sigma:   (%.4f, %.4f) mm\n", sqrt(lim_inf), sqrt(lim_sup)))
## IC 95% para sigma:   (0.1553, 0.3346) mm

4.7 2.7 Propiedad de aditividad (verificación por simulación)

Si \(Q_1\sim\chi^2_{k_1}\) y \(Q_2\sim\chi^2_{k_2}\) son independientes, entonces \(Q_1+Q_2\sim\chi^2_{k_1+k_2}\).

k1 <- 4; k2 <- 7
Q1 <- rchisq(100000, df = k1)
Q2 <- rchisq(100000, df = k2)
suma <- Q1 + Q2

hist(suma, breaks = 100, freq = FALSE, col = rgb(0.55, 0.34, 0.18, 0.5),
     xlim = c(0, 40), main = "Verificación: suma de dos Chi-cuadrado independientes",
     xlab = "q", ylab = "Densidad")
curve(dchisq(x, df = k1 + k2), col = "darkred", lwd = 2, add = TRUE)
legend("topright", legend = c(paste0("Simulación: chi2_", k1, " + chi2_", k2),
                               paste0("Teórica: chi2_", k1 + k2)),
       fill = c(rgb(0.55,0.34,0.18,0.5), NA), border = c(NA,NA),
       lty = c(NA,1), col = c(NA,"darkred"), lwd = c(NA,2), bty = "n")


5 3. De la Normal y la Chi-cuadrado a la \(t\) de Student

5.1 3.1 Motivación

En el estadístico \(Z=\dfrac{\bar X-\mu}{\sigma/\sqrt n}\sim N(0,1)\), ¿qué ocurre si \(\sigma\) es desconocida y la reemplazamos por \(S\)? El nuevo estadístico

\[ T=\frac{\bar X-\mu}{S/\sqrt n} \]

ya no es exactamente Normal, porque ahora el denominador también es aleatorio. Su distribución es la \(t\) de Student.

5.2 3.2 Definición

Si \(Z\sim N(0,1)\) y \(Q\sim\chi^2_k\) son independientes,

\[ T=\frac{Z}{\sqrt{Q/k}} \;\sim\; t_k. \]

Propiedades: simétrica respecto de 0, \(E[T]=0\) (para \(k>1\)), \(\operatorname{Var}(T)=\dfrac{k}{k-2}\) (para \(k>2\)) — siempre mayor que 1, lo que refleja colas más pesadas que la Normal. Cuando \(k\to\infty\), \(t_k\to N(0,1)\).

5.3 3.3 Construyendo la \(t\) desde su definición (simulación)

construir_t <- function(k, n_simulaciones = 100000) {
  Z <- rnorm(n_simulaciones)
  Q <- rchisq(n_simulaciones, df = k)
  Z / sqrt(Q / k)
}

k <- 8
T_sim <- construir_t(k)

hist(T_sim, breaks = 150, freq = FALSE, col = rgb(0.27, 0.51, 0.71, 0.5),
     xlim = c(-6, 6), main = paste("t de Student construida desde su definición, k =", k),
     xlab = "t", ylab = "Densidad")
curve(dt(x, df = k), col = "darkred", lwd = 2, add = TRUE)
curve(dnorm(x), col = "gray40", lty = 2, lwd = 1.5, add = TRUE)
legend("topright", legend = c("Z / sqrt(Q/k)  (simulación)", "Densidad teórica dt()", "N(0,1) de referencia"),
       col = c(rgb(0.27,0.51,0.71,1), "darkred", "gray40"),
       lty = c(NA,1,2), lwd = c(NA,2,1.5), pch = c(15,NA,NA), bty = "n")

5.4 3.4 ¿Qué tan distinta es la \(t\) de la Normal? Efecto de los grados de libertad

x <- seq(-5, 5, length.out = 500)
gl <- c(1, 3, 10, 30)
colores <- c("steelblue", "darkorange", "forestgreen", "purple")

plot(x, dt(x, df = gl[1]), type = "l", lwd = 2, col = colores[1], ylim = c(0, 0.42),
     xlab = "t", ylab = "Densidad", main = "La t de Student se acerca a la Normal cuando k crece")
for (i in 2:length(gl)) lines(x, dt(x, df = gl[i]), lwd = 2, col = colores[i])
lines(x, dnorm(x), col = "black", lwd = 2.5, lty = 2)
legend("topright", legend = c(paste0("t_", gl), "N(0,1)"),
       col = c(colores, "black"), lwd = 2, lty = c(rep(1,4), 2), bty = "n")

Lectura: con pocos grados de libertad (\(k=1,3\)) la \(t\) tiene colas notablemente más “gordas” que la Normal (mayor probabilidad de valores extremos): esto refleja la incertidumbre extra de estimar \(\sigma\) con pocos datos. Con \(k=30\), la curva ya es casi indistinguible de \(N(0,1)\).

5.5 3.5 Probabilidades y valores críticos con pt() y qt()

# P(T <= 2) con 12 grados de libertad
pt(2, df = 12)
## [1] 0.9656725
# Valor crítico t_(0.025, 12): usado para IC de 95%
qt(1 - 0.025, df = 12)
## [1] 2.178813

5.6 3.6 Aplicación: intervalo de confianza para la media, \(\sigma\) desconocida

Si \(\sigma\) es desconocida, se demuestra que \(T=\dfrac{\bar X-\mu}{S/\sqrt n}\sim t_{n-1}\), y el intervalo de confianza del \((1-\alpha)100\%\) para \(\mu\) es

\[ \left(\bar X - t_{\alpha/2,\,n-1}\,\frac{S}{\sqrt n},\ \ \bar X + t_{\alpha/2,\,n-1}\,\frac{S}{\sqrt n}\right). \]

5.6.1 Ejemplo resuelto: resistencia de un material

Se ensayan \(n=13\) probetas y se obtiene \(\bar X=48.6\) MPa, \(S=3.2\) MPa. Construya un IC del 95% para la resistencia media \(\mu\).

n       <- 13
X_barra <- 48.6
S       <- 3.2
conf    <- 0.95
alpha   <- 1 - conf
gl      <- n - 1

t_critico      <- qt(1 - alpha/2, df = gl)
error_estandar <- S / sqrt(n)
margen         <- t_critico * error_estandar

lim_inf <- X_barra - margen
lim_sup <- X_barra + margen

cat(sprintf("t crítico (%d g.l.) = %.4f\n", gl, t_critico))
## t crítico (12 g.l.) = 2.1788
cat(sprintf("Error estándar = %.4f\n", error_estandar))
## Error estándar = 0.8875
cat(sprintf("Margen de error = %.4f\n", margen))
## Margen de error = 1.9337
cat(sprintf("\nIC 95%% para mu: (%.4f, %.4f) MPa\n", lim_inf, lim_sup))
## 
## IC 95% para mu: (46.6663, 50.5337) MPa

5.6.2 Con datos crudos: t.test()

Cuando se cuenta con el vector de datos original (no solo el resumen \(\bar X, S\)), R ofrece la función t.test(), que calcula el mismo intervalo automáticamente. Lo ilustramos simulando 13 datos con exactamente esa media y desviación estándar:

# Simulamos datos con media y sd muy cercanas a las del ejemplo, solo para
# demostrar el uso de t.test() sobre datos crudos.
set.seed(1)
datos_probetas <- rnorm(13, mean = 48.6, sd = 3.2)

resultado <- t.test(datos_probetas, conf.level = 0.95)
resultado
## 
##  One Sample t-test
## 
## data:  datos_probetas
## t = 68.116, df = 12, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  47.66555 50.81564
## sample estimates:
## mean of x 
##  49.24059

t.test() reporta directamente el estadístico \(T\), los grados de libertad, el valor-\(p\) (para la prueba de hipótesis \(H_0:\mu=0\)) y el intervalo de confianza — todo lo que calculamos a mano arriba, en una sola línea de código.


6 4. De la Chi-cuadrado a la \(F\) de Fisher-Snedecor

6.1 4.1 Motivación

Para comparar la variabilidad de dos poblaciones (¿el proceso A es más disperso que el B?) necesitamos la distribución del cociente de dos varianzas muestrales. Esa distribución es la \(F\) de Fisher-Snedecor.

6.2 4.2 Definición

Si \(Q_1\sim\chi^2_{k_1}\) y \(Q_2\sim\chi^2_{k_2}\) son independientes,

\[ F=\frac{Q_1/k_1}{Q_2/k_2} \;\sim\; F_{k_1,k_2}. \]

Propiedad clave (reciprocidad): si \(F\sim F_{k_1,k_2}\), entonces \(1/F\sim F_{k_2,k_1}\). Esto es muy útil porque las tablas impresas de la \(F\) casi nunca tabulan percentiles bajos.

Propiedad de conexión con la \(t\): si \(T\sim t_k\), entonces \(T^2\sim F_{1,k}\).

6.3 4.3 Construyendo la \(F\) desde su definición (simulación)

construir_F <- function(k1, k2, n_simulaciones = 100000) {
  Q1 <- rchisq(n_simulaciones, df = k1)
  Q2 <- rchisq(n_simulaciones, df = k2)
  (Q1 / k1) / (Q2 / k2)
}

k1 <- 6; k2 <- 10
F_sim <- construir_F(k1, k2)
F_sim_recortado <- F_sim[F_sim < 6]

hist(F_sim_recortado, breaks = 200, freq = FALSE, col = rgb(0.27, 0.51, 0.71, 0.5),
     xlim = c(0, 6), main = paste0("F de Fisher-Snedecor construida desde su definición (k1=", k1, ", k2=", k2, ")"),
     xlab = "f", ylab = "Densidad")
curve(df(x, df1 = k1, df2 = k2), col = "darkred", lwd = 2, add = TRUE)
legend("topright", legend = c("(Q1/k1)/(Q2/k2)  (simulación)", "Densidad teórica df()"),
       col = c(rgb(0.27,0.51,0.71,1), "darkred"), lty = c(NA,1), lwd = c(NA,2),
       pch = c(15, NA), bty = "n")

6.4 4.4 Verificación de \(T^2\sim F_{1,k}\)

k <- 9
T_sim  <- construir_t(k)
T2_sim <- T_sim^2
T2_sim_recortado <- T2_sim[T2_sim < 15]

hist(T2_sim_recortado, breaks = 200, freq = FALSE, col = rgb(0.18, 0.55, 0.34, 0.5),
     xlim = c(0, 15), main = "Verificación de T^2 ~ F(1,k)",
     xlab = "f", ylab = "Densidad")
curve(df(x, df1 = 1, df2 = k), col = "darkred", lwd = 2, add = TRUE)
legend("topright", legend = c("T^2  (simulación)", "Densidad teórica F(1,k)"),
       col = c(rgb(0.18,0.55,0.34,1), "darkred"), lty = c(NA,1), lwd = c(NA,2),
       pch = c(15, NA), bty = "n")

6.5 4.5 Probabilidades y valores críticos con pf() y qf()

# P(F <= 2) con 9 y 12 grados de libertad
pf(2, df1 = 9, df2 = 12)
## [1] 0.869173
# Valor crítico F_(0.025, 9, 12)
qf(1 - 0.025, df1 = 9, df2 = 12)
## [1] 3.435846
# Verificación de la propiedad de reciprocidad: F_(0.975,9,12) = 1 / F_(0.025,12,9)
izq <- qf(1 - 0.975, df1 = 9, df2 = 12)
der <- 1 / qf(1 - 0.025, df1 = 12, df2 = 9)
cat(sprintf("F_(0.975,9,12)         = %.5f\n", izq))
## F_(0.975,9,12)         = 0.25852
cat(sprintf("1 / F_(0.025,12,9)     = %.5f\n", der))
## 1 / F_(0.025,12,9)     = 0.25852

6.6 4.6 Aplicación: intervalo de confianza para el cociente de varianzas

Si \(S_1^2, S_2^2\) son las varianzas muestrales de dos muestras independientes de tamaños \(n_1,n_2\) de poblaciones normales, \(\dfrac{S_1^2/\sigma_1^2}{S_2^2/\sigma_2^2}\sim F_{n_1-1,\,n_2-1}\), y el intervalo de confianza para \(\sigma_1^2/\sigma_2^2\) es:

\[ \left(\frac{S_1^2}{S_2^2}\cdot\frac{1}{F_{\alpha/2,\,n_1-1,\,n_2-1}},\ \ \frac{S_1^2}{S_2^2}\cdot F_{\alpha/2,\,n_2-1,\,n_1-1}\right). \]

6.6.1 Ejemplo resuelto: dos máquinas embotelladoras

Máquina 1: \(n_1=10\), \(S_1^2=2.4\ \text{ml}^2\). Máquina 2: \(n_2=13\), \(S_2^2=1.1\ \text{ml}^2\). Construya un IC del 95% para \(\sigma_1^2/\sigma_2^2\).

n1 <- 10; S1_2 <- 2.4
n2 <- 13; S2_2 <- 1.1
conf  <- 0.95
alpha <- 1 - conf
gl1 <- n1 - 1; gl2 <- n2 - 1

F_a_g1g2 <- qf(1 - alpha/2, df1 = gl1, df2 = gl2)
F_a_g2g1 <- qf(1 - alpha/2, df1 = gl2, df2 = gl1)

cociente <- S1_2 / S2_2
lim_inf  <- cociente / F_a_g1g2
lim_sup  <- cociente * F_a_g2g1

cat(sprintf("F_(0.025,%d,%d) = %.4f\n", gl1, gl2, F_a_g1g2))
## F_(0.025,9,12) = 3.4358
cat(sprintf("F_(0.025,%d,%d) = %.4f\n", gl2, gl1, F_a_g2g1))
## F_(0.025,12,9) = 3.8682
cat(sprintf("S1^2/S2^2 = %.4f\n", cociente))
## S1^2/S2^2 = 2.1818
cat(sprintf("\nIC 95%% para sigma1^2/sigma2^2: (%.4f, %.4f)\n", lim_inf, lim_sup))
## 
## IC 95% para sigma1^2/sigma2^2: (0.6350, 8.4398)
if (lim_inf <= 1 && 1 <= lim_sup) {
  cat("\nComo el intervalo contiene el valor 1, NO hay evidencia de que las varianzas difieran.\n")
} else {
  cat("\nComo el intervalo NO contiene el valor 1, hay evidencia de que las varianzas difieren.\n")
}
## 
## Como el intervalo contiene el valor 1, NO hay evidencia de que las varianzas difieran.

6.6.2 Con datos crudos: var.test()

set.seed(2)
maquina1 <- rnorm(10, mean = 100, sd = sqrt(2.4))
maquina2 <- rnorm(13, mean = 100, sd = sqrt(1.1))

var.test(maquina1, maquina2, conf.level = 0.95)
## 
##  F test to compare two variances
## 
## data:  maquina1 and maquina2
## F = 1.2825, num df = 9, denom df = 12, p-value = 0.6735
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.3732574 4.9608181
## sample estimates:
## ratio of variances 
##           1.282455

var.test() realiza exactamente la prueba \(F\) para igualdad de varianzas y reporta el mismo intervalo de confianza calculado a mano.


7 5. Panel resumen: las cuatro distribuciones muestrales

par(mfrow = c(2, 2))

x <- seq(-4, 4, length.out = 400)
plot(x, dnorm(x), type = "l", lwd = 2, col = "steelblue",
     main = "1. Normal N(0,1)", xlab = "z", ylab = "Densidad")

x <- seq(0, 30, length.out = 400)
ks <- c(3, 8, 15); cols <- c("steelblue", "darkorange", "forestgreen")
plot(x, dchisq(x, df = ks[1]), type = "l", lwd = 2, col = cols[1], ylim = c(0, 0.25),
     main = "2. Chi-cuadrado", xlab = "q", ylab = "Densidad")
for (i in 2:3) lines(x, dchisq(x, df = ks[i]), lwd = 2, col = cols[i])
legend("topright", legend = paste0("k=", ks), col = cols, lwd = 2, bty = "n", cex = 0.8)

x <- seq(-5, 5, length.out = 400)
ks <- c(2, 5, 30)
plot(x, dt(x, df = ks[1]), type = "l", lwd = 2, col = cols[1], ylim = c(0, 0.42),
     main = "3. t de Student", xlab = "t", ylab = "Densidad")
for (i in 2:3) lines(x, dt(x, df = ks[i]), lwd = 2, col = cols[i])
lines(x, dnorm(x), col = "black", lty = 2, lwd = 1.5)
legend("topright", legend = c(paste0("k=", ks), "N(0,1)"), col = c(cols, "black"),
       lty = c(1,1,1,2), lwd = 2, bty = "n", cex = 0.8)

x <- seq(0.01, 5, length.out = 400)
combos <- list(c(2,5), c(5,10), c(20,20))
plot(x, df(x, df1 = combos[[1]][1], df2 = combos[[1]][2]), type = "l", lwd = 2,
     col = cols[1], ylim = c(0, 1), main = "4. F de Fisher-Snedecor",
     xlab = "f", ylab = "Densidad")
for (i in 2:3) lines(x, df(x, df1 = combos[[i]][1], df2 = combos[[i]][2]), lwd = 2, col = cols[i])
legend("topright", legend = sapply(combos, function(v) paste0("(", v[1], ",", v[2], ")")),
       col = cols, lwd = 2, bty = "n", cex = 0.8)

par(mfrow = c(1, 1))

Mapa conceptual:

  • Normal \(N(0,1)\): la pieza fundamental; describe \(Z=(\bar X-\mu)/(\sigma/\sqrt n)\) cuando \(\sigma\) es conocida.
  • Chi-cuadrado \(\chi^2_k\): suma de \(k\) normales estándar al cuadrado; describe \((n-1)S^2/\sigma^2\) — inferencia sobre una varianza.
  • \(t\) de Student \(t_k\): cociente \(Z/\sqrt{\chi^2_k/k}\); describe \((\bar X-\mu)/(S/\sqrt n)\) — inferencia sobre una media con \(\sigma\) desconocida.
  • \(F\) de Fisher-Snedecor \(F_{k_1,k_2}\): cociente \((\chi^2_{k_1}/k_1)/(\chi^2_{k_2}/k_2)\); describe \(S_1^2/S_2^2\) — inferencia sobre la igualdad de dos varianzas.

8 6. Ejercicio integrador final

El tiempo de vida (horas) de dos lotes de baterías se compara así: Lote A (\(n_1=16\)): \(\bar X_1=482\), \(S_1=18\); Lote B (\(n_2=21\)): \(\bar X_2=470\), \(S_2=25\). Se asume normalidad.

(a) Pruebe, con \(\alpha=0.05\), si las varianzas de ambos lotes pueden considerarse iguales (distribución \(F\)). (b) Suponiendo hipotéticamente que \(\sigma_1=18\) fuera conocida, calcule \(P(\bar X_1>485)\) (distribución Normal). (c) Calcule el intervalo de confianza del 90% para \(\sigma_1^2\) (distribución \(\chi^2\)).

n1 <- 16; X1_barra <- 482; S1 <- 18
n2 <- 21; X2_barra <- 470; S2 <- 25

## --- Parte (a): distribución F -----------------------------------------
gl1 <- n1 - 1; gl2 <- n2 - 1
F_obs <- S1^2 / S2^2
alpha <- 0.05
F_sup <- qf(1 - alpha/2, df1 = gl1, df2 = gl2)
F_inf <- qf(alpha/2,     df1 = gl1, df2 = gl2)

cat("PARTE (a) -- distribución F\n")
## PARTE (a) -- distribución F
cat(sprintf("F observado = %.4f\n", F_obs))
## F observado = 0.5184
cat(sprintf("Región de no rechazo (95%%): (%.4f, %.4f)\n", F_inf, F_sup))
## Región de no rechazo (95%): (0.3629, 2.5731)
cat(if (F_inf <= F_obs && F_obs <= F_sup)
  "Conclusión: no se rechaza H0 (varianzas estadísticamente iguales).\n"
  else "Conclusión: se rechaza H0 (varianzas distintas).\n")
## Conclusión: no se rechaza H0 (varianzas estadísticamente iguales).
## --- Parte (b): distribución Normal -------------------------------------
sigma_supuesta <- S1
error_estandar <- sigma_supuesta / sqrt(n1)
z <- (485 - X1_barra) / error_estandar
p <- 1 - pnorm(z)

cat("\nPARTE (b) -- distribución Normal\n")
## 
## PARTE (b) -- distribución Normal
cat(sprintf("z = %.4f\n", z))
## z = 0.6667
cat(sprintf("P(X_barra_1 > 485) = %.4f\n", p))
## P(X_barra_1 > 485) = 0.2525
## --- Parte (c): distribución Chi-cuadrado -------------------------------
conf_c <- 0.90
alpha_c <- 1 - conf_c
chi2_sup <- qchisq(1 - alpha_c/2, df = gl1)
chi2_inf <- qchisq(alpha_c/2,     df = gl1)
lim_inf_c <- (gl1 * S1^2) / chi2_sup
lim_sup_c <- (gl1 * S1^2) / chi2_inf

cat("\nPARTE (c) -- distribución Chi-cuadrado\n")
## 
## PARTE (c) -- distribución Chi-cuadrado
cat(sprintf("IC 90%% para sigma1^2: (%.4f, %.4f) horas^2\n", lim_inf_c, lim_sup_c))
## IC 90% para sigma1^2: (194.4327, 669.3345) horas^2

9 7. Conclusiones

  1. Las cuatro distribuciones trabajadas —Normal, Chi-cuadrado, \(t\) de Student y \(F\) de Fisher-Snedecor— comparten un mismo origen: son transformaciones (sumas, cocientes) de variables Normales estándar independientes.
  2. R ofrece, para cada una, la misma familia de cuatro funciones (d, p, q, r), lo que hace que dominar una distribución facilite dominar las demás.
  3. El uso de software no reemplaza la comprensión teórica de estas distribuciones, pero sí elimina la necesidad de interpolar en tablas impresas y permite verificar por simulación cada propiedad demostrada analíticamente en clase.
  4. El dominio conjunto de estas cuatro distribuciones es la puerta de entrada a la segunda mitad del curso: la estadística no paramétrica, que se emplea precisamente cuando los supuestos que hacen válidas a estas distribuciones (normalidad, homocedasticidad) dejan de sostenerse.

10 Referencias

  • Casella, G. & Berger, R. L. (2002). Statistical Inference (2.ª ed.). Duxbury Press.
  • Mendenhall, W., Beaver, R. J. & Beaver, B. M. (2010). Introducción a la Probabilidad y Estadística (13.ª ed.). Cengage Learning.
  • Wackerly, D., Mendenhall, W. & Scheaffer, R. (2010). Estadística Matemática con Aplicaciones (7.ª ed.). Cengage Learning.
  • Montgomery, D. C. & Runger, G. C. (2018). Applied Statistics and Probability for Engineers (7.ª ed.). Wiley.
  • R Core Team (2024). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/.

Documento elaborado por MSc. Jeel Cueva — Curso de Muestreo y Estadística No Paramétrica.
Compilado con R Markdown y publicado en RPubs.