Damos el paso lógico natural: combinar el control local del error (bloques) con el ajuste matemático de una variable continua (covariable).
Este diseño es increíblemente útil en la investigación agrícola. Imagina que tienes un cultivo distribuido en bloques por el gradiente de humedad del terreno (DBCA), pero además, al momento de medir el rendimiento, te das cuenta de que el número inicial de plantas por parcela (covariable) fue distinto debido a fallas de germinación. Este modelo te permite corregir ambas fuentes de variación simultáneamente.
Aquí tienes el desarrollo para tu sexto cuaderno en Google Colab.
El Análisis de Covarianza en un Diseño en Bloques Completamente al Azar (DBCA) es una técnica que busca reducir el error experimental por dos vías: mediante la agrupación física de las unidades experimentales (bloques) y mediante el ajuste estadístico por regresión lineal usando una variable cuantitativa auxiliar (covariable).
Para que este análisis sea válido, la covariable (\(X\)) no debe estar afectada por los tratamientos, y la relación entre la covariable y la variable de respuesta (\(Y\)) debe ser lineal y tener la misma pendiente para todos los tratamientos (supuesto de homogeneidad de pendientes).
El Modelo Estadístico Lineal: \[y_{ij} = \mu + \tau_i + \rho_j + \beta(x_{ij} - \bar{x}_{..}) + \epsilon_{ij}\]
Donde: * \(y_{ij}\): Es la respuesta observada bajo el \(i\)-ésimo tratamiento en el \(j\)-ésimo bloque. * \(\mu\): Es la media general del experimento. * \(\tau_i\): Es el efecto del \(i\)-ésimo tratamiento. * \(\rho_j\): Es el efecto del \(j\)-ésimo bloque. * \(\beta\): Es el coeficiente de regresión lineal combinada entre \(X\) e \(Y\). * \(x_{ij}\): Es el valor de la covariable para esa unidad experimental. * \(\bar{x}_{..}\): Es la media general de la covariable. * \(\epsilon_{ij}\): Es el error experimental aleatorio.
Tabla ANOVA Ajustada (ANCOVA en DBCA): Al igual que en el DCA, calculamos las Sumas de Cuadrados (SC) y de Productos (SP), pero ahora incluimos la fuente de variación para los Bloques.
| 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}}\) |
| Bloques | \(b - 1\) | \(SCB_y\) | \(SPB_{xy}\) | \(SCB_x\) | ||||
| Error | \((t-1)(b-1)\) | \(SCE_y\) | \(SPE_{xy}\) | \(SCE_x\) | \((t-1)(b-1)-1\) | \(SCE_{adj}\) | \(\frac{SCE_{adj}}{GL_{E(adj)}}\) | |
| Total | \(N - 1\) | \(SCT_y\) | \(SPT_{xy}\) | \(SCT_x\) | \(N - 2\) | \(SCT_{adj}\) |
El cálculo es idéntico al ANCOVA en DCA, pero debes extraer la variación de los bloques antes de calcular el error:
Para easyanova, usaremos el conjunto de datos
correspondiente al diseño 6 (data6). El orden de las
columnas suele ser Tratamiento, Bloque, Covariable (\(X\)) y Respuesta (\(Y\)).
library(easyanova)
# Cargar el dataset de ejemplo para ANCOVA en DBCA
data(data6)
# Inspeccionar los datos: Col1=Tratamiento, Col2=Bloque, Col3=Covariable, Col4=Respuesta
head(data6)
summary(data6)
# EDA: Visualización de la relación entre Covariable y Respuesta, separando por Tratamiento
library(ggplot2)
ggplot(data6, aes(x = data6[,3], y = data6[,4], color = factor(data6[,1]), shape = factor(data6[,2]))) +
geom_point(size = 3) +
geom_smooth(method = "lm", se = FALSE, aes(group = factor(data6[,1]))) +
labs(title = "ANCOVA en DBCA: Respuesta vs Covariable",
subtitle = "Formas representan bloques, colores representan tratamientos",
x = "Covariable (X)",
y = "Respuesta Observada (Y)",
color = "Tratamiento",
shape = "Bloque") +
theme_minimal()
Propósito pedagógico: Pide a tus estudiantes que identifiquen si las líneas de tendencia (colores) se mantienen relativamente paralelas. También, hazles notar cómo los puntos de un mismo bloque (misma forma geométrica) podrían estar sistemáticamente más arriba o más abajo, justificando el uso de ambos controles estadísticos.
easyanovaLa ejecución requiere especificar design = 6.
easyanova procesará la matriz completa y arrojará el ANOVA
ajustado junto con las pruebas de medias ya corregidas.
# Ejecutar ANCOVA en DBCA (design = 6)
# Orden requerido: Col 1 = Tratamiento, Col 2 = Bloque, Col 3 = Covariable (X), Col 4 = Respuesta (Y)
resultado_ancova_dbca <- ea1(data6, design = 6)
# Imprimir los resultados completos
print(resultado_ancova_dbca)
Motiva a los estudiantes a debatir el resultado conmigo usando estas preguntas:
En Python (Usando statsmodels):
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
# Dataset simulado (Ej: Fertilizante, Lote (Bloque), Plantas Iniciales (X), Rendimiento (Y))
data = {
'Tratamiento': ['T1','T2','T3']*4,
'Bloque': ['B1']*3 + ['B2']*3 + ['B3']*3 + ['B4']*3,
'Covariable': [20, 18, 22, 19, 17, 21, 23, 20, 24, 18, 16, 19],
'Respuesta': [50, 45, 55, 48, 42, 53, 56, 49, 60, 47, 40, 50]
}
df = pd.DataFrame(data)
# Ajuste del modelo lineal sumando la covariable como variable continua
# Se asume que no hay interacción Tratamiento*Covariable (líneas paralelas)
modelo_ancova_dbca = ols('Respuesta ~ Covariable + C(Tratamiento) + C(Bloque)', data=df).fit()
tabla_anova = sm.stats.anova_lm(modelo_ancova_dbca, typ=2)
print("\n--- Tabla ANCOVA (DBCA) ---")
print(tabla_anova)
En Julia (Usando DataFrames y
GLM):
using DataFrames, GLM
# DataFrame simulado
df = DataFrame(
Tratamiento = repeat(["T1", "T2", "T3"], 4),
Bloque = repeat(["B1", "B2", "B3", "B4"], inner=3),
Covariable = [20, 18, 22, 19, 17, 21, 23, 20, 24, 18, 16, 19],
Respuesta = [50, 45, 55, 48, 42, 53, 56, 49, 60, 47, 40, 50]
)
df.Tratamiento = categorical(df.Tratamiento)
df.Bloque = categorical(df.Bloque)
# Ajuste del modelo: Covariable (continua) + Tratamiento (categórica) + Bloque (categórica)
modelo = lm(@formula(Respuesta ~ Covariable + Tratamiento + Bloque), df)
println("--- Resumen del Modelo ANCOVA en DBCA ---")
println(modelo)