El Análisis de Covarianza (ANCOVA) es un tema fascinante y muy poderoso. A menudo, en la práctica agrícola o agroindustrial, nos encontramos con variables continuas que afectan nuestra respuesta pero que no podemos controlar físicamente mediante bloques.
Por ejemplo, al evaluar dietas en animales, el peso inicial afecta el peso final; o al probar métodos de secado de granos, la humedad inicial de la semilla afectará el tiempo de secado. El ANCOVA nos permite medir ese efecto y “ajustar” matemáticamente nuestros datos para hacer una comparación más justa de los tratamientos.
Aquí tienes el desarrollo del quinto cuaderno para tus estudiantes.
El Análisis de Covarianza (ANCOVA) combina el Análisis de Varianza (ANOVA) con la Regresión Lineal. Se utiliza para reducir el error experimental ajustando la variable respuesta (\(Y\)) por el efecto de una variable cuantitativa adicional llamada covariable (\(X\)).
El objetivo es eliminar la variabilidad en \(Y\) que es causada por \(X\), permitiendo comparar los tratamientos “como si todas las unidades experimentales hubieran comenzado con el mismo valor exacto de la covariable”. Un supuesto clave del ANCOVA es que las líneas de regresión entre \(X\) e \(Y\) para cada tratamiento deben ser paralelas (homogeneidad de pendientes).
El Modelo Estadístico Lineal: \[y_{ij} = \mu + \tau_i + \beta(x_{ij} - \bar{x}_{..}) + \epsilon_{ij}\]
Donde: * \(y_{ij}\): Respuesta observada en la \(j\)-ésima repetición del \(i\)-ésimo tratamiento. * \(\mu\): Media general de la respuesta. * \(\tau_i\): Efecto del \(i\)-ésimo tratamiento. * \(\beta\): Coeficiente de regresión lineal combinada entre la respuesta y la covariable. * \(x_{ij}\): Valor de la covariable para la unidad experimental. * \(\bar{x}_{..}\): Media general de la covariable. * \(\epsilon_{ij}\): Error experimental.
Tabla ANOVA Ajustada (ANCOVA): A diferencia del ANOVA normal, aquí se calculan Sumas de Cuadrados (SC) y Sumas de Productos Cruzados (SP). Al final, evaluamos las SC de los tratamientos y del error ajustadas por la covariable.
| Fuente | GL | SC (\(Y\)) | SP (\(XY\)) | SC (\(X\)) | GL Ajustados | SC Ajustada (\(Y_{adj}\)) | CM Ajustado | F calc |
|---|---|---|---|---|---|---|---|---|
| Tratamientos | \(t - 1\) | \(SCTr_y\) | \(SPTr_{xy}\) | \(SCTr_x\) | \(t - 1\) | \(SCTr_{adj}\) | \(\frac{SCTr_{adj}}{t-1}\) | \(\frac{CMTr_{adj}}{CME_{adj}}\) |
| Error | \(N - t\) | \(SCE_y\) | \(SPE_{xy}\) | \(SCE_x\) | \(N - t - 1\) | \(SCE_{adj}\) | \(\frac{SCE_{adj}}{N-t-1}\) | |
| Total | \(N - 1\) | \(SCT_y\) | \(SPT_{xy}\) | \(SCT_x\) | \(N - 2\) | \(SCT_{adj}\) |
Resolver un ANCOVA a mano es un excelente ejercicio de álgebra y estadística:
Para este diseño usaremos el dataset data5 incluido en
easyanova, que contiene Tratamiento, Covariable (\(X\)) y Respuesta (\(Y\)).
library(easyanova)
# Cargar el dataset de ejemplo para ANCOVA en DCA
data(data5)
# Inspeccionar los datos: Tratamiento, Covariable (X), Respuesta (Y)
head(data5)
summary(data5)
# EDA: Gráfico de dispersión de Covariable vs Respuesta, coloreado por Tratamiento
# Usaremos ggplot2 para visualizar si existen relaciones lineales y si las pendientes parecen paralelas
# install.packages("ggplot2")
library(ggplot2)
ggplot(data5, aes(x = data5[,2], y = data5[,3], color = factor(data5[,1]))) +
geom_point(size = 3) +
geom_smooth(method = "lm", se = FALSE) +
labs(title = "Relación entre Covariable y Respuesta por Tratamiento",
x = "Covariable (X)",
y = "Respuesta Observada (Y)",
color = "Tratamiento") +
theme_minimal()
Propósito pedagógico: Pide a tus estudiantes que observen
las líneas de regresión trazadas por ggplot. “¿Las
líneas apuntan en la misma dirección general (paralelismo)? ¿El
comportamiento de la respuesta cambia a medida que aumenta la
covariable?” Esto justifica el uso de ANCOVA.
easyanovaLa función ea1 realiza todo el proceso de ajuste
matricial e imprime las medias ya corregidas al usar
design = 5.
# Ejecutar ANCOVA en DCA (design = 5)
# El orden estricto debe ser: Col 1 = Tratamiento, Col 2 = Covariable (X), Col 3 = Respuesta (Y)
resultado_ancova <- ea1(data5, design = 5)
# Imprimir los resultados, que incluyen la tabla ANCOVA y las medias ajustadas
print(resultado_ancova)
Invita a los alumnos a analizar la salida del sistema con estas preguntas clave:
easyanova
para este ANCOVA, ¿qué me dice el valor p asociado a la ‘Covariable’?
¿Valió la pena medir esta variable adicional en el campo o hubiéramos
obtenido el mismo resultado con un DCA normal?”En Python (Usando statsmodels y
pingouin): En Python, el paquete
pingouin hace que el ANCOVA sea sumamente intuitivo y
amigable para el estudiante.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import pingouin as pg
# Dataset simulado (Ej: Tratamiento de secado, Humedad Inicial (X), Tiempo de Secado (Y))
data = {
'Tratamiento': ['A','B','C']*4,
'Humedad_Inicial': [15, 14, 16, 18, 17, 19, 14, 13, 15, 20, 19, 21],
'Tiempo_Secado': [45, 40, 55, 50, 48, 62, 43, 38, 52, 58, 53, 68]
}
df = pd.DataFrame(data)
# EDA
sns.lmplot(x='Humedad_Inicial', y='Tiempo_Secado', hue='Tratamiento', data=df)
plt.title('EDA: ANCOVA')
plt.show()
# ANCOVA usando Pingouin
ancova_resultado = pg.ancova(data=df, dv='Tiempo_Secado', covar='Humedad_Inicial', between='Tratamiento')
print("\n--- Tabla ANCOVA ---")
print(ancova_resultado)
En Julia (Usando DataFrames y
GLM):
using DataFrames, GLM
# DataFrame simulado
df = DataFrame(
Tratamiento = repeat(["A", "B", "C"], 4),
Humedad_Inicial = [15, 14, 16, 18, 17, 19, 14, 13, 15, 20, 19, 21],
Tiempo_Secado = [45, 40, 55, 50, 48, 62, 43, 38, 52, 58, 53, 68]
)
df.Tratamiento = categorical(df.Tratamiento)
# Ajuste del modelo lineal (Respuesta ~ Covariable + Tratamiento)
# La covariable se trata como un regresor continuo normal
modelo_ancova = lm(@formula(Tiempo_Secado ~ Humedad_Inicial + Tratamiento), df)
println("--- Resumen del Modelo ANCOVA ---")
println(modelo_ancova)