¡Una elección muy didáctica! Introducir las Parcelas Divididas (Split-plot) comenzando por su versión en DCA es ideal para que los estudiantes comprendan el concepto matemático fundamental antes de complicarlo con los bloques en el campo.
Este diseño es una de las joyas de la corona en la Ingeniería Agrícola y Agroindustrial. Nace de una necesidad estrictamente física o logística: a veces, un factor requiere unidades experimentales muy grandes (como la temperatura de un invernadero o el método de arado de un tractor), mientras que el otro factor puede aplicarse a unidades muy pequeñas (como el tipo de semilla en una maceta o el recubrimiento de una fruta individual).
Aquí tienes el cuaderno estructurado para enseñarles que, en este diseño, ¡existen dos errores experimentales distintos!
El diseño en Parcelas Divididas se caracteriza por tener dos procesos de aleatorización distintos. Primero, los niveles del Factor A (Factor Principal) se asignan aleatoriamente a unidades experimentales grandes llamadas Parcelas Principales. Luego, cada Parcela Principal se divide en unidades más pequeñas llamadas Subparcelas, y los niveles del Factor B (Subfactor) se asignan aleatoriamente dentro de cada una de ellas.
La consecuencia estadística más importante de esto es que se generan dos errores experimentales: 1. Error A (Error de la Parcela Principal): Mide la variación entre las parcelas grandes tratadas igual. Suele tener pocos grados de libertad y menor precisión. 2. Error B (Error de la Subparcela): Mide la variación entre las subparcelas dentro de una misma parcela grande. Suele ser mucho más preciso.
El Modelo Estadístico Lineal: \[y_{ijk} = \mu + \alpha_i + \eta_{ik} + \beta_j + (\alpha\beta)_{ij} + \epsilon_{ijk}\]
Donde: * \(y_{ijk}\): Respuesta en la \(k\)-ésima repetición, nivel \(i\) del Factor A y nivel \(j\) del Factor B. * \(\mu\): Media general. * \(\alpha_i\): Efecto del Factor Principal (A). * \(\eta_{ik}\): Error A (Error de la Parcela Principal). * \(\beta_j\): Efecto del Subfactor (B). * \((\alpha\beta)_{ij}\): Efecto de la Interacción. * \(\epsilon_{ijk}\): Error B (Error de la Subparcela).
Tabla ANOVA:
| Fuente de Variación | Grados de Libertad (GL) | Suma de Cuadrados | Cuadrado Medio (CM) | F calculado |
|---|---|---|---|---|
| Parcela Principal | ||||
| Factor A | \(a - 1\) | \(SCA\) | \(CMA = \frac{SCA}{a-1}\) | \(\frac{CMA}{CME_a}\) |
| Error A | \(a(r - 1)\) | \(SCE_a\) | \(CME_a = \frac{SCE_a}{a(r-1)}\) | |
| 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}{(a-1)(b-1)}\) | \(\frac{CMAB}{CME_b}\) |
| Error B | \(a(b - 1)(r - 1)\) | \(SCE_b\) | \(CME_b = \frac{SCE_b}{GL_{Eb}}\) | |
| Total | \(abr - 1\) | \(SCT\) |
(Nota: \(a\) = niveles de A, \(b\) = niveles de B, \(r\) = repeticiones).
El secreto para calcular esto a mano sin equivocarse es tratar la primera parte como si el Factor B no existiera.
Para easyanova, el orden de las columnas en el
design = 4 suele ser: Parcela (Factor A), Subparcela
(Factor B), Repetición y Respuesta. Usaremos un dataset simulado análogo
al data12 del paquete.
library(easyanova)
# Asumimos que data12 tiene la estructura: Parcela (A), Subparcela (B), Repetición, Respuesta
data(data12)
# Inspeccionar la estructura
head(data12)
summary(data12)
# EDA: Gráfico de Interacción enfatizando la jerarquía
library(ggplot2)
# Calculamos las medias
medias_split <- aggregate(data12[,4], by = list(Parcela = data12[,1], Subparcela = data12[,2]), FUN = mean)
ggplot(medias_split, aes(x = Subparcela, y = x, group = Parcela, color = Parcela)) +
geom_line(size = 1.2) +
geom_point(size = 4) +
labs(title = "Interacción en Parcelas Divididas",
subtitle = "Noten que la aleatorización de la Subparcela ocurrió DENTRO de la Parcela",
x = "Niveles del Factor Subparcela (B)",
y = "Respuesta Media",
color = "Factor Parcela (A)") +
theme_minimal()
Propósito pedagógico: Es crucial preguntar a los estudiantes por qué el gráfico coloca al Subfactor (B) en el eje X y al Factor Principal (A) como líneas. Esto es porque el Subfactor suele evaluarse con mayor precisión matemática (el Error B es menor que el Error A), por lo que las comparaciones finas se hacen dentro de las líneas.
ea2El parámetro design = 4 le indica a la función
ea2 que aplique la partición de varianza con dos errores
distintos, asumiendo que las parcelas principales se distribuyeron
completamente al azar (sin bloques).
# Ejecutar Parcelas Divididas en DCA (ea2, design = 4)
# Orden requerido: Col 1 = Parcela(A), Col 2 = Subparcela(B), Col 3 = Repetición, Col 4 = Respuesta
resultado_split_dca <- ea2(data12, design = 4)
# Imprimir los resultados. ¡Observar la tabla ANOVA con el Error A y el Error B!
print(resultado_split_dca)
Pide a tus alumnos que profundicen en la interpretación estadística haciéndome estas preguntas:
En Python (Usando statsmodels con Modelos
Mixtos): En Python, modelar parcelas divididas correctamente
requiere Modelos Lineales Mixtos para capturar la
estructura anidada y la doble fuente de error (tratando a la repetición
anidada en la Parcela Principal como un efecto aleatorio).
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
# Dataset simulado (Ej: Temperatura de Secado (A), Tipo de Pretratamiento (B))
data = {
'Parcela_A': ['T1','T1','T1','T1', 'T2','T2','T2','T2', 'T1','T1','T1','T1', 'T2','T2','T2','T2'],
'Subparc_B': ['P1','P2','P1','P2', 'P1','P2','P1','P2', 'P1','P2','P1','P2', 'P1','P2','P1','P2'],
'Repeticion':['R1','R1','R2','R2', 'R1','R1','R2','R2', 'R3','R3','R4','R4', 'R3','R3','R4','R4'],
'Respuesta': [25, 30, 24, 31, 45, 55, 46, 54, 26, 29, 23, 32, 44, 56, 47, 53]
}
df = pd.DataFrame(data)
# Creamos un identificador único para cada Parcela Principal (Interacción A x Repetición)
df['Unidad_Principal'] = df['Parcela_A'] + "_" + df['Repeticion']
# Modelo Mixto: Tratamientos como efectos fijos, la Unidad_Principal como efecto aleatorio (Error A)
modelo_split = smf.mixedlm("Respuesta ~ C(Parcela_A) * C(Subparc_B)", df, groups=df["Unidad_Principal"]).fit()
print("\n--- Resumen del Modelo Mixto (Parcelas Divididas en DCA) ---")
print(modelo_split.summary())
En Julia (Usando MixedModels):
using DataFrames, MixedModels
# DataFrame simulado
df = DataFrame(
Parcela_A = repeat(["T1", "T2"], inner=8),
Subparc_B = repeat(["P1", "P2"], inner=2, outer=4),
Repeticion = repeat(["R1", "R1", "R2", "R2"], outer=4),
Respuesta = [25.0, 30.0, 24.0, 31.0, 26.0, 29.0, 23.0, 32.0, 45.0, 55.0, 46.0, 54.0, 44.0, 56.0, 47.0, 53.0]
)
# Identificador único para el Error A
df.Unidad_Principal = df.Parcela_A .* "_" .* df.Repeticion
df.Parcela_A = categorical(df.Parcela_A)
df.Subparc_B = categorical(df.Subparc_B)
# Modelo Mixto en Julia: Efecto aleatorio (1|Unidad_Principal) para capturar el Error A
modelo_mixto = fit(MixedModel, @formula(Respuesta ~ Parcela_A * Subparc_B + (1|Unidad_Principal)), df)
println("--- Resumen del Modelo Mixto (Parcelas Divididas) ---")
println(modelo_mixto)
Con esta base matemática sólida en DCA, tus alumnos estarán perfectamente preparados para el escenario más común en el trabajo de campo.