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.


📘 Cuaderno 16: Parcelas Divididas en Cuadrado Latino (DCL)

a) Introducción Teórica a las Parcelas Divididas en DCL

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).


b) Miniguía: Solución Manual (Papel y Lápiz)

El cálculo requiere aislar la estructura espacial del Cuadrado Latino primero:

  1. Factor de Corrección (FC) y SCT: \(FC = \frac{Y_{....}^2}{a^2b}\) y \(SCT = \sum y_{ijkl}^2 - FC\)
  2. Cálculos de la Parcela Principal (Totales espaciales): Se trabaja con los totales de cada parcela grande (\(Y_{ijk.}\)).
    • \(SCFilas = \sum \frac{Y_{i...}^2}{ab} - FC\)
    • \(SCCol = \sum \frac{Y_{.j..}^2}{ab} - FC\)
    • \(SCA = \sum \frac{Y_{..k.}^2}{ab} - FC\)
    • Error A: Se calcula obteniendo la Suma de Cuadrados de las Parcelas Principales y restando los efectos espaciales y el Factor A. \[SCE_a = \sum \frac{Y_{ijk.}^2}{b} - FC - SCFilas - SCCol - SCA\]
  3. Cálculos de la Subparcela: Igual que en los diseños anteriores de parcelas divididas.
    • \(SCB = \sum \frac{Y_{...l}^2}{a^2} - FC\)
    • \(SCTrat = \sum \frac{Y_{..kl}^2}{a^2} - FC\) (Totales de las combinaciones AxB)
    • \(SCAB = SCTrat - SCA - SCB\)
    • Error B: Por diferencia del total general de todo el experimento. \[SCE_b = SCT - SCFilas - SCCol - SCA - SCE_a - SCB - SCAB\]

c) Exploración de Datos (EDA) en R

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.


d) Plantilla de Código R: Solución con ea2

El 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)

e) Prompts Sugeridos para tus Estudiantes

Motiva la interpretación crítica de los alumnos sugiriéndoles estas consultas:

  1. “Hola. Analizando la tabla ANOVA generada para este diseño, noto que los grados de libertad del ‘Error a’ son muy pocos en comparación con el ‘Error b’. ¿Qué riesgo corro si intento evaluar un factor agronómico muy sutil poniéndolo como ‘Factor Principal (A)’ en lugar de ‘Subfactor (B)’?”
  2. “Observando los valores p de ‘Filas’ y ‘Columnas’, ¿puedes confirmarme si nuestro diseño logró absorber la heterogeneidad espacial del campo experimental? ¿Era estrictamente necesario el Cuadrado Latino?”
  3. “En las tablas de comparaciones múltiples de Tukey que arroja el software, ¿por qué el valor del ‘DMS’ (Diferencia Mínima Significativa) es diferente cuando comparo niveles de A, respecto a cuando comparo niveles de B?”

f) Plantillas Alternativas: Python y Julia

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).