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:
d, p,
q, r).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.
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:
| 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() |
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:
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)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”).
# 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)
## P(-2 <= Z <= 2) = 0.9545 (regla empírica: 0.9545)
## P(-3 <= Z <= 3) = 0.9973 (regla empírica: 0.9973)
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\)).
## [1] 0.9331928
## [1] 0.8913985
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.
## 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
## P(X <= 85) directo = 0.9332
##
## 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.
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
## z crítico (95% confianza) = 1.9600
## 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 yqnorm()responden la misma pregunta; R simplemente lo hace con precisión total y sin interpolar.
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")## Media muestral: 69.9365 (teórica: 70)
## Desv. est. muestral: 10.0024 (teórica: 10)
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:
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)
}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.
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.
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.
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")## Media simulada: 4.997 (teórica E[Q] = k = 5)
## Varianza simulada: 9.996 (teórica Var(Q) = 2k = 10)
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.
pchisq() y qchisq()## [1] 0.8698586
## [1] 26.11895
## [1] 5.628726
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). \]
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
## chi^2_(0.025,14) = 26.1189
## chi^2_(0.975,14) = 5.6287
##
## IC 95% para sigma^2: (0.0241, 0.1119) mm^2
## IC 95% para sigma: (0.1553, 0.3346) mm
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")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.
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)\).
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")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)\).
pt() y qt()## [1] 0.9656725
## [1] 2.178813
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). \]
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
## Error estándar = 0.8875
## Margen de error = 1.9337
##
## IC 95% para mu: (46.6663, 50.5337) MPa
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.
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.
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}\).
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")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")pf() y qf()## [1] 0.869173
## [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
## 1 / F_(0.025,12,9) = 0.25852
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). \]
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
## F_(0.025,12,9) = 3.8682
## S1^2/S2^2 = 2.1818
##
## 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.
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.
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)Mapa conceptual:
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
## F observado = 0.5184
## 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
## z = 0.6667
## 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
## IC 90% para sigma1^2: (194.4327, 669.3345) horas^2
d, p, q, r), lo que
hace que dominar una distribución facilite dominar las demás.
Documento elaborado por MSc. Jeel Cueva — Curso de
Muestreo y Estadística No Paramétrica.
Compilado con R Markdown y
publicado en RPubs.