Llegamos a uno de los diseños topológicos más complejos y elegantes que tus estudiantes de Ingeniería Agrícola y Agroindustrial podrán enfrentar en su carrera.
El Diseño de Parcelas Divididas en Cuadrado Latino (DCL) es la solución definitiva cuando necesitamos evaluar dos factores (uno en parcelas grandes y otro en subparcelas pequeñas), pero el terreno o la planta de procesamiento presenta dos gradientes de variabilidad cruzados (por ejemplo, pendiente del terreno de Norte a Sur y un gradiente de fertilidad de Este a Oeste).
Aquí tienes el cuaderno estructurado para enseñarles esta maravilla estadística.
En este diseño, el Factor Principal (Factor A) se distribuye siguiendo estrictamente las reglas de un Cuadrado Latino. Esto significa que el número de Filas, el número de Columnas y el número de niveles del Factor A deben ser exactamente iguales (\(a = Filas = Columnas\)). Las unidades experimentales de este Cuadrado Latino son nuestras “Parcelas Principales”.
Una vez establecido este arreglo espacial para controlar las dos fuentes de heterogeneidad, cada Parcela Principal se subdivide, y a estas “Subparcelas” se les asignan aleatoriamente los niveles del Subfactor (Factor B).
Al igual que en todos los arreglos de parcelas divididas, conservamos el principio de los dos errores: el Error A (para la parcela grande, más susceptible a variaciones) y el Error B (para la subparcela, evaluado con mayor precisión).
El Modelo Estadístico Lineal: \[y_{ijkl} = \mu + \rho_i + \gamma_j + \alpha_k + \eta_{ijk} + \beta_l + (\alpha\beta)_{kl} + \epsilon_{ijkl}\]
Donde: * \(\mu\): Media general. * \(\rho_i\): Efecto de la \(i\)-ésima Fila. * \(\gamma_j\): Efecto de la \(j\)-ésima Columna. * \(\alpha_k\): Efecto del Factor Principal (A). * \(\eta_{ijk}\): Error A (Error de la Parcela Principal). * \(\beta_l\): Efecto del Subfactor (B). * \((\alpha\beta)_{kl}\): Interacción entre el Factor A y el Factor B. * \(\epsilon_{ijkl}\): Error B (Error de la Subparcela).
Tabla ANOVA:
| Fuente de Variación | GL | Suma de Cuadrados | Cuadrado Medio (CM) | F calc |
|---|---|---|---|---|
| Parcela Principal | ||||
| Filas | \(a - 1\) | \(SCFilas\) | \(CMF = \frac{SCFilas}{a-1}\) | \(\frac{CMF}{CME_a}\) |
| Columnas | \(a - 1\) | \(SCCol\) | \(CMC = \frac{SCCol}{a-1}\) | \(\frac{CMC}{CME_a}\) |
| Factor A | \(a - 1\) | \(SCA\) | \(CMA = \frac{SCA}{a-1}\) | \(\frac{CMA}{CME_a}\) |
| Error A | \((a - 1)(a - 2)\) | \(SCE_a\) | \(CME_a = \frac{SCE_a}{(a-1)(a-2)}\) | |
| Subparcela | ||||
| Factor B | \(b - 1\) | \(SCB\) | \(CMB = \frac{SCB}{b-1}\) | \(\frac{CMB}{CME_b}\) |
| Interacción (AxB) | \((a - 1)(b - 1)\) | \(SCAB\) | \(CMAB = \frac{SCAB}{GL_{AB}}\) | \(\frac{CMAB}{CME_b}\) |
| Error B | \(a(a - 1)(b - 1)\) | \(SCE_b\) | \(CME_b = \frac{SCE_b}{GL_{Eb}}\) | |
| Total | \(a^2b - 1\) | \(SCT\) |
(Nota: \(a\) = niveles de A = número de Filas = número de Columnas; \(b\) = niveles de B).
El cálculo requiere aislar la estructura espacial del Cuadrado Latino primero:
Para la función ea2 con diseño tipo 6, la matriz debe
tener un orden específico, usualmente: Fila, Columna, Factor A
(Parcela), Factor B (Subparcela) y Respuesta.
library(easyanova)
# Asumimos que data14 (o el dataset correspondiente) tiene la estructura de DCL dividido
# Orden: Col 1 = Fila, Col 2 = Columna, Col 3 = Parcela (A), Col 4 = Subparcela (B), Col 5 = Respuesta
# (Verifica el orden exacto en la ayuda de ?ea2 si usas tus propios datos)
data(data14)
# Inspeccionar la estructura
head(data14)
# EDA 1: Control de Filas y Columnas sobre las Parcelas Principales
par(mfrow=c(1,2))
boxplot(data14[,5] ~ data14[,1], col="lightgreen", main="Gradiente 1 (Filas)", xlab="Fila")
boxplot(data14[,5] ~ data14[,2], col="salmon", main="Gradiente 2 (Columnas)", xlab="Columna")
par(mfrow=c(1,1))
# EDA 2: Interacción entre Factor Principal y Subfactor
library(ggplot2)
medias_split_dcl <- aggregate(data14[,5], by = list(FactorA = data14[,3], FactorB = data14[,4]), FUN = mean)
ggplot(medias_split_dcl, aes(x = FactorB, y = x, group = FactorA, color = FactorA)) +
geom_line(size = 1.2) + geom_point(size = 4) +
labs(title = "Interacción AxB (Ajustado por Cuadrado Latino espacial)",
x = "Niveles del Subfactor (B)",
y = "Respuesta Media",
color = "Factor Principal (A)") +
theme_minimal()
Propósito pedagógico: Este código obliga al estudiante a revisar si el enorme esfuerzo logístico de montar un Cuadrado Latino en campo valió la pena, observando la dispersión en los boxplots de Filas y Columnas antes de saltar a interpretar la interacción agronómica.
ea2El parámetro design = 6 ejecuta la rutina completa:
extrae la variabilidad espacial bidireccional, separa los dos errores y
realiza el desdoblamiento estadístico de las medias si existe
interacción significativa.
# Ejecutar Parcelas Divididas en Cuadrado Latino (ea2, design = 6)
# Asegurar el orden de columnas: Fila, Columna, Parcela(A), Subparcela(B), Respuesta
resultado_split_dcl <- ea2(data14, design = 6)
# Imprimir los resultados. La tabla ANOVA tendrá el desglose más completo visto hasta ahora.
print(resultado_split_dcl)
Motiva la interpretación crítica de los alumnos sugiriéndoles estas consultas:
En Python (Usando statsmodels con Modelos
Mixtos): Al igual que en DBCA, modelamos la Parcela Principal
como un efecto aleatorio, pero ahora los efectos fijos incluyen Filas y
Columnas aditivas.
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
# Dataset simulado (DCL 3x3, Factor A con 3 niveles, Factor B con 2 niveles)
data = {
'Fila': ['F1','F1','F1','F1','F1','F1', 'F2','F2','F2','F2','F2','F2', 'F3','F3','F3','F3','F3','F3'],
'Columna': ['C1','C1','C2','C2','C3','C3', 'C1','C1','C2','C2','C3','C3', 'C1','C1','C2','C2','C3','C3'],
'Factor_A':['A1','A1','A2','A2','A3','A3', 'A2','A2','A3','A3','A1','A1', 'A3','A3','A1','A1','A2','A2'],
'Factor_B':['B1','B2','B1','B2','B1','B2', 'B1','B2','B1','B2','B1','B2', 'B1','B2','B1','B2','B1','B2'],
'Resp': [10, 12, 15, 14, 18, 20, 14, 15, 19, 22, 11, 13, 20, 21, 12, 14, 16, 17]
}
df = pd.DataFrame(data)
# El Error A está dado por la Parcela Principal única (intersección Fila x Columna)
df['Parcela_Principal'] = df['Fila'] + "_" + df['Columna']
# Modelo Mixto: Filas + Columnas + Interacción A*B como efectos fijos; Parcela Principal como efecto aleatorio
modelo_split_dcl = smf.mixedlm("Resp ~ C(Fila) + C(Columna) + C(Factor_A) * C(Factor_B)",
df, groups=df["Parcela_Principal"]).fit()
print("\n--- Resumen del Modelo Mixto (Parcelas Divididas en DCL) ---")
print(modelo_split_dcl.summary())
En Julia (Usando MixedModels):
using DataFrames, MixedModels
# DataFrame simulado (Estructura equivalente a Python)
df = DataFrame(
Fila = repeat(["F1", "F2", "F3"], inner=6),
Columna = repeat(["C1","C1","C2","C2","C3","C3"], outer=3),
Factor_A = ["A1","A1","A2","A2","A3","A3", "A2","A2","A3","A3","A1","A1", "A3","A3","A1","A1","A2","A2"],
Factor_B = repeat(["B1", "B2"], outer=9),
Resp = [10.0, 12.0, 15.0, 14.0, 18.0, 20.0, 14.0, 15.0, 19.0, 22.0, 11.0, 13.0, 20.0, 21.0, 12.0, 14.0, 16.0, 17.0]
)
# Identificador de la Parcela Principal
df.Parcela_Principal = df.Fila .* "_" .* df.Columna
df.Fila = categorical(df.Fila)
df.Columna = categorical(df.Columna)
df.Factor_A = categorical(df.Factor_A)
df.Factor_B = categorical(df.Factor_B)
# Ajuste del modelo: Efectos espaciales + Tratamientos + (1|Parcela_Principal)
modelo_mixto_dcl = fit(MixedModel, @formula(Resp ~ Fila + Columna + Factor_A * Factor_B + (1|Parcela_Principal)), df)
println("--- Resumen del Modelo (Parcelas Divididas en DCL) ---")
println(modelo_mixto_dcl)
Con esto cerramos el ciclo de las Parcelas Divididas. Nos quedan los Diseños Factoriales Triples (7. en DCA y 8. en DBCA) y los diseños de parcelas Subdivididas (Split-split-plot: 9. en DCA y 10. en DBCA), además de los Análisis Conjuntos (para múltiples fincas/años).