Excelente. Te organizo la SESIÓN 2 — SUPUESTOS Y PRUEBAS POST HOC con la misma lógica pedagógica, lista para diapositivas, con énfasis conceptual + interpretación + implementación en R y Python, alineada con tu documento .
Comprender que:
Título:
👉 ¿Cuándo podemos confiar en el ANOVA?
Contenido:
❗ ¿El modelo es válido? ❗ ¿Qué tratamiento es mejor?
Tres pilares fundamentales:
| Supuesto | Significado |
|---|---|
| Independencia | Observaciones no relacionadas |
| Normalidad | Error ~ distribución normal |
| Homogeneidad | Varianzas iguales |
🔴 ANOVA es robusto… pero no infalible
👉 Si los supuestos fallan:
| Problema | Solución |
|---|---|
| No normalidad | Transformaciones (log, raíz) |
| Varianzas desiguales | ANOVA robusto / Welch |
| Datos extremos | Métodos no paramétricos (Kruskal-Wallis) |
Herramientas:
ANOVA solo dice:
👉 “Existe diferencia”
NO dice:
👉 “Entre cuáles tratamientos”
Objetivo: Comparar pares de tratamientos
Ejemplo:
Características:
🔴 Estadística ≠ decisión ingenieril
👉 La estadística guía 👉 La ingeniería decide
Comparar 3 temperaturas en secado de granos
```r id=“d2y2sh” # ========================================== # ANOVA + SUPUESTOS + TUKEY (Secado) # ==========================================
tratamiento <- factor(rep(c(“Baja”, “Media”, “Alta”), each=10))
rendimiento <- c( rnorm(10, 20, 2), rnorm(10, 18, 2), rnorm(10, 15, 2) )
datos <- data.frame(tratamiento, rendimiento)
modelo <- aov(rendimiento ~ tratamiento, data=datos)
res <- residuals(modelo)
shapiro.test(res)
bartlett.test(rendimiento ~ tratamiento, data=datos)
plot(modelo)
tukey <- TukeyHSD(modelo)
print(tukey)
---
## 📖 Explicación
### 🔹 Supuestos
* `residuals(modelo)` → errores del modelo
* Shapiro → normalidad
* Bartlett → igualdad de varianzas
---
## 📊 Interpretación
### ✔ Si Shapiro p > 0.05
→ residuos normales
### ✔ Si Bartlett p > 0.05
→ varianzas iguales
---
## 📊 Interpretación Tukey
Salida:
```r id="3k7zyy"
diff lwr upr p adj
Media-Baja -2.1 -3.5 -0.8 0.002
Alta-Baja -5.0 -6.4 -3.6 0.000
Alta-Media -2.9 -4.3 -1.5 0.001
👉 Decisión ingenieril: Seleccionar temperatura óptima considerando costo
```python id=“1a0eai” # ========================================== # ANOVA + SUPUESTOS + TUKEY # ==========================================
import numpy as np import pandas as pd import statsmodels.api as sm from statsmodels.formula.api import ols from scipy import stats from statsmodels.stats.multicomp import pairwise_tukeyhsd
np.random.seed(123)
tratamiento = np.repeat([‘A’,‘B’,‘C’], 10)
rendimiento = np.concatenate([ np.random.normal(80, 3, 10), np.random.normal(78, 3, 10), np.random.normal(72, 3, 10)])
df = pd.DataFrame({ ‘tratamiento’: tratamiento, ‘rendimiento’: rendimiento })
modelo = ols(‘rendimiento ~ C(tratamiento)’, data=df).fit()
print(stats.shapiro(modelo.resid))
grupo_A = df[df[‘tratamiento’]==‘A’][‘rendimiento’] grupo_B = df[df[‘tratamiento’]==‘B’][‘rendimiento’] grupo_C = df[df[‘tratamiento’]==‘C’][‘rendimiento’]
print(stats.levene(grupo_A, grupo_B, grupo_C))
tukey = pairwise_tukeyhsd( df[‘rendimiento’], df[‘tratamiento’], alpha=0.05 )
print(tukey)
---
## 📖 Explicación
### 🔹 Normalidad
* `stats.shapiro` → residuos
### 🔹 Homogeneidad
* `levene` → más robusto que Bartlett
---
## 📊 Interpretación Tukey
Salida típica:
group1 group2 meandiff p-adj lower upper reject A B -2.0 0.04 -3.8 -0.2 True A C -8.0 0.000 -9.8 -6.2 True B C -6.0 0.001 -7.8 -4.2 True ```
reject = True → diferencia significativa👉 Evaluar costo, energía, tiempo
ANOVA detecta diferencias Tukey identifica dónde están