Comprender los fundamentos del CRD, las pruebas de hipótesis para diferencia de medias y la determinación del tamaño de muestra.
Un diseño completamente aleatorizado (Completely Randomized Design, CRD) constituye el esquema experimental más simple para comparar dos o más tratamientos. En este diseño, las unidades experimentales se asignan de manera aleatoria a los tratamientos, garantizando que cada unidad tenga igual probabilidad de recibir cualquier tratamiento. La aleatorización es el mecanismo fundamental que permite realizar inferencias causales válidas, ya que elimina el sesgo sistemático en la asignación de tratamientos.
Se define como el estudio estadístico en el cual se comparan exactamente dos tratamientos o condiciones experimentales. El objetivo primario consiste en determinar si existe evidencia estadísticamente significativa de que los tratamientos producen efectos diferentes sobre la variable de respuesta.
Una variable aleatoria representa una función que asigna valores numéricos a los resultados de un experimento aleatorio. Las variables aleatorias se clasifican en discretas (valores contables) y continuas (valores en un intervalo real).
Valor Esperado (Media Poblacional):
$$\mu = E(Y) = \int_{-\infty}^{\infty} y \cdot f(y) \, dy$$
Varianza Poblacional:
$$\sigma^2 = E[(Y - \mu)^2] = \int_{-\infty}^{\infty} (y - \mu)^2 \cdot f(y) \, dy$$
Los estadísticos son funciones de la muestra observada que se utilizan para estimar parámetros poblacionales desconocidos.
Media Muestral:
$$\bar{y} = \frac{1}{n} \sum_{i=1}^{n} y_i$$
Varianza Muestral (insesgada):
$$S^2 = \frac{1}{n-1} \sum_{i=1}^{n} (y_i - \bar{y})^2$$
Sean $X, Y$ variables aleatorias y $c$ una constante:
Si $Y \sim N(\mu, \sigma^2)$, entonces la media muestral $\bar{y}$ basada en $n$ observaciones independientes sigue una distribución:
$$\bar{y} \sim N\left(\mu, \frac{\sigma^2}{n}\right)$$
Cuando $\sigma^2$ es desconocida y se estima mediante $S^2$, el estadístico estandarizado sigue una distribución $t$ con $(n-1)$ grados de libertad:
$$t = \frac{\bar{y} - \mu}{S / \sqrt{n}} \sim t_{n-1}$$
Se consideran dos poblaciones normales independientes con medias $\mu_1$ y $\mu_2$, y varianzas $\sigma_1^2 = \sigma_2^2 = \sigma^2$ (supuesto de homocedasticidad). Se extraen muestras aleatorias de tamaños $n_1$ y $n_2$ respectivamente. El objetivo consiste en probar hipótesis sobre la diferencia $\mu_1 - \mu_2$.
El contraste de hipótesis bilateral típico se formula como:
$H_0$: $\mu_1 = \mu_2$ (equivalente: $\mu_1 - \mu_2 = 0$)
$H_1$: $\mu_1 \neq \mu_2$ (equivalente: $\mu_1 - \mu_2 \neq 0$)
Bajo el supuesto de varianzas iguales, se calcula un estimador combinado que pondera las varianzas muestrales por sus respectivos grados de libertad:
$$S_p^2 = \frac{(n_1 - 1)S_1^2 + (n_2 - 1)S_2^2}{n_1 + n_2 - 2}$$
$$t_0 = \frac{\bar{y}_1 - \bar{y}_2}{S_p \sqrt{\frac{1}{n_1} + \frac{1}{n_2}}}$$
Bajo $H_0$: $t_0 \sim t_{n_1+n_2-2}$
Para un nivel de significancia $\alpha$:
Se define como el nivel de significancia más pequeño que conduciría al rechazo de H₀ con los datos observados. Representa la probabilidad, bajo H₀, de observar un estadístico de prueba tan extremo o más extremo que el valor calculado. Un valor p pequeño (típicamente < 0.05) proporciona evidencia contra H₀.
Un intervalo de confianza del $(1-\alpha) \times 100\%$ para la diferencia $\mu_1 - \mu_2$ se construye como:
$$(\bar{y}_1 - \bar{y}_2) - t_{\alpha/2, n_1+n_2-2} \cdot S_p \sqrt{\frac{1}{n_1} + \frac{1}{n_2}} \leq \mu_1 - \mu_2 \leq (\bar{y}_1 - \bar{y}_2) + t_{\alpha/2, n_1+n_2-2} \cdot S_p \sqrt{\frac{1}{n_1} + \frac{1}{n_2}}$$
Si el intervalo no contiene el valor cero, se concluye que existe diferencia significativa entre las medias al nivel de confianza especificado.
La potencia de una prueba $(1 - \beta)$ representa la probabilidad de rechazar correctamente $H_0$ cuando es falsa. El error tipo II ($\beta$) es la probabilidad de no rechazar $H_0$ cuando es falsa.
El tamaño muestral se determina usando el parámetro:
$$\delta = \frac{|\mu_1 - \mu_2|}{\sigma}$$
Este parámetro estandariza la diferencia de medias que se desea detectar. Para muestras de igual tamaño ($n_1 = n_2 = n$), se utilizan curvas de potencia o la relación:
$$\delta \sqrt{\frac{n}{2}} \text{ debe ser suficiente para alcanzar la potencia deseada dado } \alpha$$
Alternativamente, se puede determinar n para obtener un intervalo de confianza con longitud máxima L:
$$n \geq 2 \left( \frac{t_{\alpha/2, 2n-2} \cdot S_p}{L} \right)^2$$
Esta ecuación requiere solución iterativa dado que t depende de n.
Cuando no es razonable asumir $\sigma_1^2 = \sigma_2^2$, se utiliza la prueba t de Welch, que no requiere varianza combinada:
Estadístico de Welch:
$$t_0 = \frac{\bar{y}_1 - \bar{y}_2}{\sqrt{\frac{S_1^2}{n_1} + \frac{S_2^2}{n_2}}}$$
Grados de libertad aproximados (fórmula de Satterthwaite):
$$\nu = \frac{\left( \frac{S_1^2}{n_1} + \frac{S_2^2}{n_2} \right)^2}{\frac{(S_1^2/n_1)^2}{n_1-1} + \frac{(S_2^2/n_2)^2}{n_2-1}}$$
Los grados de libertad se redondean al entero más cercano. El estadístico $t_0$ se compara con $t_{\alpha/2, \nu}$.
En el caso poco común donde $\sigma_1^2$ y $\sigma_2^2$ son conocidas, se utiliza la prueba Z:
$$Z_0 = \frac{\bar{y}_1 - \bar{y}_2}{\sqrt{\frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2}}}$$
Bajo $H_0$: $Z_0 \sim N(0, 1)$
Para probar $H_0: \mu = \mu_0$ usando una muestra de tamaño $n$:
$$t_0 = \frac{\bar{y} - \mu_0}{S / \sqrt{n}} \sim t_{n-1}$$
Características clave:
Un ingeniero de materiales investiga si la adición de una emulsión de polímero látex al mortero de cemento Portland afecta la resistencia de unión a tracción. Se comparan dos formulaciones:
Se preparan 10 especímenes de cada formulación siguiendo un diseño completamente aleatorizado. La variable de respuesta es la resistencia de unión medida en kgf/cm².
# Importación de bibliotecas necesarias
import numpy as np
import pandas as pd
from scipy import stats
import seaborn as sns
import matplotlib.pyplot as plt
# Configuración de reproducibilidad y visualización
np.random.seed(42)
sns.set_style("whitegrid")
plt.rcParams['figure.figsize'] = (12, 6)
# ============================================================================
# DATOS EXPERIMENTALES: Resistencia del cemento (kgf/cm²)
# ============================================================================
# Fuente: Montgomery, D. C. (2017), Tabla 2.1
# Mortero modificado (con polímero látex)
modificado = np.array([16.85, 16.40, 17.21, 16.35, 16.52,
17.04, 16.96, 17.15, 16.59, 16.57])
# Mortero no modificado (formulación original)
no_modificado = np.array([16.62, 16.75, 17.37, 17.12, 16.98,
16.87, 17.34, 17.02, 17.08, 17.27])
# ============================================================================
# 1. ANÁLISIS EXPLORATORIO DE DATOS
# ============================================================================
print("="*70)
print("ANÁLISIS EXPLORATORIO DE DATOS")
print("="*70)
# Estadísticos descriptivos
n1, n2 = len(modificado), len(no_modificado)
y1_bar = np.mean(modificado)
y2_bar = np.mean(no_modificado)
s1_sq = np.var(modificado, ddof=1)
s2_sq = np.var(no_modificado, ddof=1)
s1 = np.std(modificado, ddof=1)
s2 = np.std(no_modificado, ddof=1)
print(f"\nMortero Modificado (n₁ = {n1}):")
print(f" Media (ȳ₁) = {y1_bar:.4f} kgf/cm²")
print(f" Varianza (S₁²) = {s1_sq:.4f}")
print(f" Desviación Estándar (S₁) = {s1:.4f}")
print(f"\nMortero No Modificado (n₂ = {n2}):")
print(f" Media (ȳ₂) = {y2_bar:.4f} kgf/cm²")
print(f" Varianza (S₂²) = {s2_sq:.4f}")
print(f" Desviación Estándar (S₂) = {s2:.4f}")
print(f"\nDiferencia observada: ȳ₁ - ȳ₂ = {y1_bar - y2_bar:.4f} kgf/cm²")
# ============================================================================
# 2. VERIFICACIÓN DE SUPUESTOS
# ============================================================================
print("\n" + "="*70)
print("VERIFICACIÓN DE SUPUESTOS")
print("="*70)
# Prueba de Shapiro-Wilk para normalidad
shapiro_mod = stats.shapiro(modificado)
shapiro_no_mod = stats.shapiro(no_modificado)
print("\nPrueba de Normalidad (Shapiro-Wilk):")
print(f" Modificado: W = {shapiro_mod.statistic:.4f}, p-valor = {shapiro_mod.pvalue:.4f}")
print(f" No Modificado: W = {shapiro_no_mod.statistic:.4f}, p-valor = {shapiro_no_mod.pvalue:.4f}")
print(" Interpretación: p-valor > 0.05 sugiere distribución normal")
# Prueba de Levene para igualdad de varianzas
levene_test = stats.levene(modificado, no_modificado)
print(f"\nPrueba de Homogeneidad de Varianzas (Levene):")
print(f" Estadístico = {levene_test.statistic:.4f}, p-valor = {levene_test.pvalue:.4f}")
print(" Interpretación: p-valor > 0.05 sugiere varianzas iguales (homocedasticidad)")
# ============================================================================
# 3. PRUEBA T DE DOS MUESTRAS (VARIANZAS IGUALES)
# ============================================================================
print("\n" + "="*70)
print("PRUEBA DE HIPÓTESIS: t de dos muestras (varianzas iguales)")
print("="*70)
# Cálculo manual del estadístico t
sp_squared = ((n1 - 1) * s1_sq + (n2 - 1) * s2_sq) / (n1 + n2 - 2)
sp = np.sqrt(sp_squared)
print(f"\nVarianza combinada (S²ₚ) = {sp_squared:.4f}")
print(f"Desviación estándar combinada (Sₚ) = {sp:.4f}")
se_diff = sp * np.sqrt(1/n1 + 1/n2)
print(f"Error estándar de la diferencia = {se_diff:.4f}")
t_manual = (y1_bar - y2_bar) / se_diff
df = n1 + n2 - 2
print(f"\nEstadístico t₀ = {t_manual:.4f}")
print(f"Grados de libertad = {df}")
p_value_manual = 2 * stats.t.cdf(t_manual, df)
print(f"Valor p (bilateral) = {p_value_manual:.4f}")
alpha = 0.05
t_critical = stats.t.ppf(1 - alpha/2, df)
print(f"\nValor crítico t₍₀.₀₂₅, ₁₈₎ = ±{t_critical:.4f}")
if abs(t_manual) > t_critical:
print(f"Decisión: |t₀| = {abs(t_manual):.4f} > {t_critical:.4f}")
print("Se RECHAZA H₀ al nivel α = 0.05")
else:
print(f"Decisión: |t₀| = {abs(t_manual):.4f} ≤ {t_critical:.4f}")
print("No se rechaza H₀ al nivel α = 0.05")
# Verificación usando scipy.stats.ttest_ind
t_scipy, p_scipy = stats.ttest_ind(modificado, no_modificado, equal_var=True)
print(f"\nVerificación con scipy.stats.ttest_ind:")
print(f" t = {t_scipy:.4f}, p-valor = {p_scipy:.4f}")
# ============================================================================
# 4. INTERVALO DE CONFIANZA (95%)
# ============================================================================
print("\n" + "="*70)
print("INTERVALO DE CONFIANZA (95%)")
print("="*70)
margin_error = t_critical * se_diff
ci_lower = (y1_bar - y2_bar) - margin_error
ci_upper = (y1_bar - y2_bar) + margin_error
print(f"\nDiferencia estimada (ȳ₁ - ȳ₂) = {y1_bar - y2_bar:.4f}")
print(f"Margen de error = ±{margin_error:.4f}")
print(f"\nIntervalo de confianza del 95%:")
print(f" [{ci_lower:.4f}, {ci_upper:.4f}] kgf/cm²")
if ci_lower < 0 < ci_upper:
print("\nInterpretación: El IC contiene el cero → No diferencia significativa")
else:
print("\nInterpretación: El IC NO contiene el cero → Diferencia significativa")
if ci_upper < 0:
print("La formulación modificada tiene MENOR resistencia")
A continuación se presentan los resultados del análisis estadístico con gráficos interactivos. Puede pasar el cursor sobre los gráficos para ver detalles adicionales.
| Métrica | Mortero Modificado | Mortero No Modificado |
|---|---|---|
| Tamaño muestral (n) | 10 | 10 |
| Media (ȳ) | 16.7640 kgf/cm² | 17.0420 kgf/cm² |
| Varianza (S²) | 0.1001 | 0.0615 |
| Desv. Estándar (S) | 0.3164 | 0.2479 |
El intervalo NO contiene el cero → Diferencia estadísticamente significativa
Decisión Estadística: Con p-valor = 0.0422 < α=0.05, se RECHAZA H₀.
Interpretación: Existe evidencia estadísticamente significativa de que la adición del polímero látex REDUCE la resistencia de unión del mortero en aproximadamente 0.28 kgf/cm².
💡 Recomendación Práctica: El ingeniero NO debería implementar la formulación modificada si el objetivo es mantener o mejorar la resistencia de unión del cemento.
El análisis revela que:
Contexto: Una empresa de recubrimientos compara dos formulaciones de pintura (A y B) respecto al tiempo de secado (minutos). Se realizaron las siguientes mediciones en condiciones controladas:
Tareas:
Solución parcial:
import numpy as np
from scipy import stats
# Datos
pintura_a = np.array([121, 118, 125, 119, 123, 117, 122, 120])
pintura_b = np.array([115, 113, 119, 111, 117, 114, 118, 112])
# Estadísticos descriptivos
y_a = np.mean(pintura_a)
y_b = np.mean(pintura_b)
s_a_sq = np.var(pintura_a, ddof=1)
s_b_sq = np.var(pintura_b, ddof=1)
print(f"Media A: {y_a:.2f}, Media B: {y_b:.2f}")
print(f"Varianza A: {s_a_sq:.2f}, Varianza B: {s_b_sq:.2f}")
# Complete el análisis calculando:
# - Varianza combinada Sp²
# - Estadístico t₀
# - Valor p
# - Intervalo de confianza del 95%
# - Verificación de supuestos
Contexto: Un ingeniero textil desea comparar la resistencia a la tracción (en Newton) de dos tipos de fibra sintética. Se tiene información histórica que indica σ ≈ 8 N para ambas fibras.
Tareas:
Solución parcial (Simulación de Potencia):
import numpy as np
from scipy import stats
# Parámetros
mu1, mu2, sigma = 100, 105, 8
n1, n2 = 15, 15
alpha = 0.05
n_sim = 1000
# Contador de rechazos de H₀
rechazos = 0
np.random.seed(123)
for _ in range(n_sim):
# Generar datos bajo H₁ (μ₁ ≠ μ₂)
muestra1 = np.random.normal(mu1, sigma, n1)
muestra2 = np.random.normal(mu2, sigma, n2)
# Prueba t
t_stat, p_value = stats.ttest_ind(muestra1, muestra2, equal_var=True)
# Complete: contar rechazos cuando p_value < alpha
# Potencia empírica = rechazos / n_sim
Dominar las pruebas pareadas, inferencia sobre varianzas y comparación de dos varianzas.
El bloqueo constituye una técnica fundamental de control experimental que agrupa unidades experimentales homogéneas en bloques, reduciendo así la variabilidad experimental. Cada bloque contiene unidades similares respecto a factores que podrían afectar la respuesta pero que no son de interés primario en el estudio.
Constituye un caso especial de diseño en bloques aleatorizados donde cada bloque contiene exactamente dos unidades experimentales (o dos observaciones de la misma unidad), asignándose aleatoriamente los dos tratamientos dentro de cada bloque. La unidad de análisis es la diferencia entre las dos observaciones apareadas.
Para $n$ pares de observaciones, donde cada par $j$ ($j = 1, \ldots, n$) recibe ambos tratamientos:
$y_{1j}$ = observación del tratamiento 1 en el par $j$
$y_{2j}$ = observación del tratamiento 2 en el par $j$
$d_j = y_{1j} - y_{2j}$ (diferencia pareada)
La hipótesis nula se formula en términos de la media de las diferencias:
$H_0$: $\mu_D = 0$ (no hay diferencia entre tratamientos)
$H_1$: $\mu_D \neq 0$ (existe diferencia entre tratamientos)
Media de las diferencias:
$$\bar{d} = \frac{1}{n} \sum_{j=1}^{n} d_j$$
Varianza de las diferencias:
$$S_d^2 = \frac{1}{n-1} \sum_{j=1}^{n} (d_j - \bar{d})^2$$
Estadístico t pareado:
$$t_0 = \frac{\bar{d}}{S_d / \sqrt{n}}$$
Bajo $H_0$: $t_0 \sim t_{n-1}$
$$\bar{d} - t_{\alpha/2, n-1} \cdot \frac{S_d}{\sqrt{n}} \leq \mu_D \leq \bar{d} + t_{\alpha/2, n-1} \cdot \frac{S_d}{\sqrt{n}}$$
| Característica | Completamente Aleatorizado | Comparación Apareada |
|---|---|---|
| Unidades experimentales | Independientes entre grupos | Apareadas dentro de bloques |
| Fuente de variación | Entre y dentro de grupos | Principalmente dentro de pares |
| Estadístico | $t$ con $\sqrt{1/n_1 + 1/n_2}$ | $t$ con $1/\sqrt{n}$ |
| Grados de libertad | $n_1 + n_2 - 2$ | $n - 1$ |
| Potencia estadística | Menor (mayor varianza del error) | Mayor (varianza del error reducida) |
| Aplicabilidad | Unidades independientes | Unidades naturalmente apareadas o emparejables |
Características clave:
Un laboratorio metalúrgico compara dos puntas de medición (Tip 1 y Tip 2) utilizadas en un dispositivo de prueba de dureza. Para controlar la variabilidad inherente en la dureza de diferentes especímenes metálicos, se utiliza un diseño de comparación apareada: ambas puntas se prueban en cada uno de 10 especímenes. El orden de aplicación de las puntas se aleatoriza para cada espécimen.
# Importación de bibliotecas
import numpy as np
import pandas as pd
from scipy import stats
import seaborn as sns
import matplotlib.pyplot as plt
# Configuración
np.random.seed(42)
sns.set_style("whitegrid")
# ============================================================================
# DATOS EXPERIMENTALES: Lecturas de dureza
# ============================================================================
# Fuente: Montgomery, D. C. (2017), Tabla 2.6
# Datos pareados (10 especímenes, 2 puntas cada uno)
especimen = np.arange(1, 11)
tip1 = np.array([7, 3, 3, 4, 8, 3, 2, 9, 5, 4])
tip2 = np.array([6, 3, 5, 3, 8, 2, 4, 9, 4, 5])
# Calcular diferencias pareadas
diferencias = tip1 - tip2
# Crear DataFrame para análisis
df_dureza = pd.DataFrame({
'Espécimen': especimen,
'Tip_1': tip1,
'Tip_2': tip2,
'Diferencia': diferencias
})
print("="*70)
print("DISEÑO DE COMPARACIÓN APAREADA: Prueba de Dureza de Metales")
print("="*70)
print("\nDatos Experimentales:")
print(df_dureza.to_string(index=False))
# ============================================================================
# 1. ANÁLISIS EXPLORATORIO
# ============================================================================
n = len(diferencias)
d_bar = np.mean(diferencias)
s_d = np.std(diferencias, ddof=1)
# ============================================================================
# 2. PRUEBA T PAREADA
# ============================================================================
se_d = s_d / np.sqrt(n)
t_manual = d_bar / se_d
df = n - 1
p_value_manual = 2 * stats.t.sf(abs(t_manual), df)
alpha = 0.05
t_critical = stats.t.ppf(1 - alpha/2, df)
# Verificación con scipy
t_scipy, p_scipy = stats.ttest_rel(tip1, tip2)
# ============================================================================
# 3. INTERVALO DE CONFIANZA (95%)
# ============================================================================
margin_error = t_critical * se_d
ci_lower = d_bar - margin_error
ci_upper = d_bar + margin_error
print(f"\nEstadístico t₀ = {t_manual:.4f}")
print(f"Valor p = {p_value_manual:.4f}")
print(f"IC 95%: [{ci_lower:.4f}, {ci_upper:.4f}]")
El intervalo contiene el cero → NO hay diferencia significativa
El análisis del diseño de comparación apareada revela:
En muchos contextos experimentales, la variabilidad (medida por la varianza $\sigma^2$) constituye una característica de interés primario. Ejemplos incluyen: precisión de instrumentos de medición, consistencia de procesos de manufactura, estabilidad de productos químicos, y repetibilidad de métodos analíticos.
Para probar $H_0: \sigma^2 = \sigma_0^2$ contra alternativas bilaterales o unilaterales, se utiliza el estadístico:
$$\chi_0^2 = \frac{(n - 1)S^2}{\sigma_0^2}$$
Bajo $H_0$: $\chi_0^2 \sim \chi^2_{n-1}$
$$\frac{(n - 1)S^2}{\chi^2_{\alpha/2, n-1}} \leq \sigma^2 \leq \frac{(n - 1)S^2}{\chi^2_{1-\alpha/2, n-1}}$$
Para comparar las varianzas de dos poblaciones normales independientes, se formula:
$H_0$: $\sigma_1^2 = \sigma_2^2$ (equivalente: $\sigma_1^2/\sigma_2^2 = 1$)
$H_1$: $\sigma_1^2 \neq \sigma_2^2$ (equivalente: $\sigma_1^2/\sigma_2^2 \neq 1$)
El estadístico de prueba es el cociente de varianzas muestrales:
$$F_0 = \frac{S_1^2}{S_2^2}$$
Bajo $H_0$: $F_0 \sim F_{n_1-1, n_2-1}$
$$\frac{S_1^2}{S_2^2} \cdot F_{1-\alpha/2, n_2-1, n_1-1} \leq \frac{\sigma_1^2}{\sigma_2^2} \leq \frac{S_1^2}{S_2^2} \cdot F_{\alpha/2, n_2-1, n_1-1}$$
La prueba F constituye el método clásico para verificar el supuesto de varianzas iguales previo a la prueba t de dos muestras. Sin embargo, su alta sensibilidad a no normalidad ha motivado el desarrollo de alternativas más robustas como la prueba de Levene.
| Distribución | Parámetro Objetivo | Estadístico | Aplicación Principal |
|---|---|---|---|
| $\chi^2$ (Chi-cuadrado) | $\sigma^2$ (una varianza) | $(n-1)S^2/\sigma_0^2$ | Prueba de varianza específica, IC para $\sigma^2$ |
| $F$ (Fisher-Snedecor) | $\sigma_1^2/\sigma_2^2$ (razón de varianzas) | $S_1^2/S_2^2$ | Comparación de dos varianzas, verificación de homocedasticidad |
Un laboratorio químico debe decidir si reemplazar su equipo analítico antiguo por uno nuevo. Una consideración crítica es la variabilidad de las mediciones. Se realizan mediciones replicadas con ambos equipos bajo condiciones controladas para comparar sus varianzas.
# Importación de bibliotecas
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
# Configuración
np.random.seed(2024)
sns.set_style("whitegrid")
# ============================================================================
# DATOS SIMULADOS (basados en Montgomery, adaptados pedagógicamente)
# ============================================================================
n_antiguo = 12
s_antiguo_sq = 14.5
s_antiguo = np.sqrt(s_antiguo_sq)
n_nuevo = 10
s_nuevo_sq = 10.8
s_nuevo = np.sqrt(s_nuevo_sq)
# ============================================================================
# 1. PRUEBA F PARA IGUALDAD DE VARIANZAS
# ============================================================================
F_obs = s_antiguo_sq / s_nuevo_sq
df1 = n_antiguo - 1
df2 = n_nuevo - 1
p_value_upper = stats.f.sf(F_obs, df1, df2)
p_value = 2 * min(p_value_upper, 1 - p_value_upper)
alpha = 0.05
F_critical = stats.f.ppf(1 - alpha/2, df1, df2)
print(f"F₀ = {F_obs:.4f}, p-valor = {p_value:.4f}")
print(f"F crítico = {F_critical:.4f}")
# ============================================================================
# 2. INTERVALO DE CONFIANZA PARA LA RAZÓN DE VARIANZAS
# ============================================================================
F_lower_quant = stats.f.ppf(alpha/2, df1, df2)
F_upper_quant = stats.f.ppf(1 - alpha/2, df1, df2)
ci_lower = F_obs / F_upper_quant
ci_upper = F_obs / F_lower_quant
print(f"IC 95% para σ₁²/σ₂²: [{ci_lower:.4f}, {ci_upper:.4f}]")
# ============================================================================
# 3. PRUEBA CHI-CUADRADO PARA UNA VARIANZA
# ============================================================================
sigma_0_sq = 12.0
chi_sq_obs = (n_nuevo - 1) * s_nuevo_sq / sigma_0_sq
df_chi = n_nuevo - 1
p_value_chi = stats.chi2.cdf(chi_sq_obs, df_chi)
print(f"χ²₀ = {chi_sq_obs:.4f}, p-valor = {p_value_chi:.4f}")
| Situación | Estadístico | Distribución | GL |
|---|---|---|---|
| $\sigma$ conocida, una muestra | $Z_0 = \frac{\bar{y} - \mu_0}{\sigma/\sqrt{n}}$ | $N(0,1)$ | — |
| $\sigma$ desconocida, una muestra | $t_0 = \frac{\bar{y} - \mu_0}{S/\sqrt{n}}$ | $t$ | $n-1$ |
| $\sigma_1^2 = \sigma_2^2$, dos muestras | $t_0 = \frac{\bar{y}_1 - \bar{y}_2}{S_p\sqrt{\frac{1}{n_1}+\frac{1}{n_2}}}$ | $t$ | $n_1+n_2-2$ |
| $\sigma_1^2 \neq \sigma_2^2$, dos muestras | $t_0 = \frac{\bar{y}_1 - \bar{y}_2}{\sqrt{\frac{S_1^2}{n_1}+\frac{S_2^2}{n_2}}}$ | $t$ (Welch) | $\nu$ (aprox.) |
| Diseño pareado | $t_0 = \frac{\bar{d}}{S_d/\sqrt{n}}$ | $t$ | $n-1$ |
| Una varianza | $\chi^2_0 = \frac{(n-1)S^2}{\sigma_0^2}$ | $\chi^2$ | $n-1$ |
| Dos varianzas | $F_0 = \frac{S_1^2}{S_2^2}$ | $F$ | $(n_1-1, n_2-1)$ |
Contexto: Un fabricante automotriz evalúa un aditivo de combustible que promete mejorar el rendimiento (km/litro). Se prueban 8 vehículos antes y después de añadir el aditivo.
Datos (km/litro):
Tareas:
Solución parcial:
import numpy as np
from scipy import stats
# Datos
sin_aditivo = np.array([12.4, 11.8, 13.1, 12.0, 12.7, 11.5, 12.9, 12.2])
con_aditivo = np.array([13.0, 12.5, 13.8, 12.6, 13.3, 12.0, 13.5, 12.8])
# Calcular diferencias
diferencias = con_aditivo - sin_aditivo
# Complete el análisis:
# - Media y desviación estándar de diferencias
# - Prueba t pareada unilateral
# - Interpretación económica
Contexto: Una fábrica de componentes electrónicos compara la variabilidad de dos líneas de producción (A y B) midiendo el grosor de componentes (μm).
Datos resumen:
Tareas:
Solución parcial:
from scipy import stats
# Datos
n1, s1_sq = 15, 4.8
n2, s2_sq = 12, 2.5
# Estadístico F
F_obs = s1_sq / s2_sq
df1, df2 = n1 - 1, n2 - 1
# Complete:
# - Valor p y decisión
# - Intervalo de confianza para razón de varianzas
# - Prueba χ² para línea B contra especificación