Seguimos avanzando en el nivel de complejidad. Al integrar un Arreglo Factorial en un Diseño en Cuadrado Latino (DCL), les estás enseñando a tus estudiantes cómo manejar escenarios de campo o de planta sumamente rigurosos.
Este diseño es ideal cuando necesitan evaluar la interacción de dos factores (ej. Variedad \(\times\) Dosis) pero, al mismo tiempo, el entorno experimental presenta dos fuentes de heterogeneidad que se cruzan perpendicularmente (ej. un gradiente de salinidad y un gradiente de humedad en el suelo, o diferentes operadores y diferentes máquinas en la agroindustria).
Aquí tienes el cuaderno correspondiente.
Este diseño superpone la evaluación de dos factores (A y B) sobre una estructura de Cuadrado Latino. La restricción principal y más exigente de este diseño es que el número de Filas y el número de Columnas debe ser exactamente igual al número total de tratamientos combinados (\(t = a \times b\)).
Por ejemplo, si evaluamos 2 métodos de extracción (Factor A) y 3 solventes (Factor B), tenemos \(t = 6\) tratamientos combinados. Por lo tanto, el experimento requerirá obligatoriamente un Cuadrado Latino de \(6 \times 6\) (36 unidades experimentales).
El Modelo Estadístico Lineal: \[y_{ijkl} = \mu + \rho_i + \gamma_j + \alpha_k + \beta_l + (\alpha\beta)_{kl} + \epsilon_{ijkl}\]
Donde: * \(y_{ijkl}\): Respuesta observada. * \(\mu\): Media general. * \(\rho_i\): Efecto de la \(i\)-ésima Fila. * \(\gamma_j\): Efecto de la \(j\)-ésima Columna. * \(\alpha_k\): Efecto principal del Factor A. * \(\beta_l\): Efecto principal del Factor B. * \((\alpha\beta)_{kl}\): Efecto de la interacción entre los factores A y B. * \(\epsilon_{ijkl}\): Error experimental.
Tabla ANOVA:
| Fuente de Variación | Grados de Libertad (GL) | Suma de Cuadrados (SC) | Cuadrado Medio (CM) | F calculado |
|---|---|---|---|---|
| Filas | \(t - 1\) | \(SCF\) | \(CMF = \frac{SCF}{t-1}\) | \(\frac{CMF}{CME}\) |
| Columnas | \(t - 1\) | \(SCC\) | \(CMC = \frac{SCC}{t-1}\) | \(\frac{CMC}{CME}\) |
| Factor A | \(a - 1\) | \(SCA\) | \(CMA = \frac{SCA}{a-1}\) | \(\frac{CMA}{CME}\) |
| Factor B | \(b - 1\) | \(SCB\) | \(CMB = \frac{SCB}{b-1}\) | \(\frac{CMB}{CME}\) |
| Interacción (AxB) | \((a - 1)(b - 1)\) | \(SCAB\) | \(CMAB = \frac{SCAB}{(a-1)(b-1)}\) | \(\frac{CMAB}{CME}\) |
| Error | \((t - 1)(t - 2)\) | \(SCE\) | \(CME = \frac{SCE}{GL_E}\) | |
| Total | \(t^2 - 1\) | \(SCT\) |
(Nota: \(t = a \times b\) = número de tratamientos = Filas = Columnas).
Para la solución manual, se calcula primero la estructura espacial del Cuadrado Latino y luego se desglosa la suma de cuadrados de los tratamientos:
Para este diseño en easyanova, usaremos el dataset
correspondiente (generalmente data11). El orden de las
columnas suele ser: Factor 1, Factor 2, Fila, Columna y Respuesta.
library(easyanova)
# Cargar el dataset de ejemplo para Factorial Doble en DCL
# Asumamos que data11 tiene la estructura: F1, F2, Fila, Columna, Respuesta
data(data11)
# Inspeccionar los datos
head(data11)
summary(data11)
# EDA 1: Control de Filas y Columnas
par(mfrow=c(1,2))
boxplot(data11[,5] ~ data11[,3], col="lightgreen", main="Variabilidad por Filas", xlab="Fila")
boxplot(data11[,5] ~ data11[,4], col="salmon", main="Variabilidad por Columnas", xlab="Columna")
par(mfrow=c(1,1))
# EDA 2: Interacción de Factores
library(ggplot2)
medias_int_dcl <- aggregate(data11[,5], by=list(F1=data11[,1], F2=data11[,2]), FUN=mean)
ggplot(medias_int_dcl, aes(x=F1, y=x, group=F2, color=F2)) +
geom_line(size=1.2) + geom_point(size=4) +
labs(title="Interacción de Factores (Ajustado por el DCL)",
x="Factor 1", y="Respuesta Media", color="Factor 2") +
theme_minimal()
Propósito pedagógico: Enséñales a evaluar primero el esfuerzo del montaje: “Miren los boxplots de Filas y Columnas. Si ven escalones claros entre las cajas, significa que aislar esos gradientes en el campo fue vital. Luego, miren el gráfico de interacción; si las líneas se cruzan, las recomendaciones deben hacerse para combinaciones específicas, no para los factores aislados.”
ea2Usando la función ea2 y estableciendo
design = 3, indicamos al paquete la estructura de Cuadrado
Latino para el arreglo factorial.
# Ejecutar Factorial Doble en DCL (ea2, design = 3)
# Orden requerido: Col 1 = Factor 1, Col 2 = Factor 2, Col 3 = Fila, Col 4 = Columna, Col 5 = Respuesta
resultado_fac_dcl <- ea2(data11, design = 3)
# Imprimir resultados (ANOVA y desdoblamiento si hay interacción)
print(resultado_fac_dcl)
Pide a tus alumnos que te consulten (a mí) usando estas preguntas sobre sus resultados:
En Python (Usando statsmodels):
Añadimos Filas y Columnas como variables categóricas aditivas (sin
interacción entre ellas), mientras mantenemos la interacción de los
tratamientos.
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
# Dataset simulado para un Factorial 2x2 en DCL 4x4
# Factores: Temp (T1, T2) y Solvente (S1, S2)
data = {
'Temp': ['T1','T1','T2','T2', 'T1','T2','T1','T2', 'T2','T1','T2','T1', 'T2','T2','T1','T1'],
'Solvente': ['S1','S2','S1','S2', 'S2','S1','S1','S2', 'S1','S2','S2','S1', 'S2','S1','S1','S2'],
'Fila': ['F1','F1','F1','F1', 'F2','F2','F2','F2', 'F3','F3','F3','F3', 'F4','F4','F4','F4'],
'Columna': ['C1','C2','C3','C4', 'C1','C2','C3','C4', 'C1','C2','C3','C4', 'C1','C2','C3','C4'],
'Resp': [15, 18, 22, 20, 19, 21, 16, 23, 25, 17, 24, 14, 21, 26, 18, 19]
}
df = pd.DataFrame(data)
# Modelo: Control de Fila + Columna + Interacción de Tratamientos
modelo_fac_dcl = ols('Resp ~ C(Fila) + C(Columna) + C(Temp) * C(Solvente)', data=df).fit()
tabla_anova = sm.stats.anova_lm(modelo_fac_dcl, typ=2)
print("\n--- Tabla ANOVA (Factorial Doble en DCL) ---")
print(tabla_anova)
En Julia (Usando DataFrames y
GLM):
using DataFrames, GLM
# DataFrame simulado (Factorial 2x2 en DCL 4x4)
df = DataFrame(
Temp = ["T1","T1","T2","T2", "T1","T2","T1","T2", "T2","T1","T2","T1", "T2","T2","T1","T1"],
Solvente = ["S1","S2","S1","S2", "S2","S1","S1","S2", "S1","S2","S2","S1", "S2","S1","S1","S2"],
Fila = ["F1","F1","F1","F1", "F2","F2","F2","F2", "F3","F3","F3","F3", "F4","F4","F4","F4"],
Columna = ["C1","C2","C3","C4", "C1","C2","C3","C4", "C1","C2","C3","C4", "C1","C2","C3","C4"],
Resp = [15.0, 18.0, 22.0, 20.0, 19.0, 21.0, 16.0, 23.0, 25.0, 17.0, 24.0, 14.0, 21.0, 26.0, 18.0, 19.0]
)
df.Temp = categorical(df.Temp)
df.Solvente = categorical(df.Solvente)
df.Fila = categorical(df.Fila)
df.Columna = categorical(df.Columna)
# Ajuste del modelo lineal
modelo_dcl = lm(@formula(Resp ~ Fila + Columna + Temp * Solvente), df)
println("--- Resumen del Modelo Factorial Doble en DCL ---")
println(modelo_dcl)
Con esto cerramos los arreglos factoriales simétricos estándar. Ahora viene un peso pesado en la agronomía: las Parcelas Divididas (Split-plot).