¡Claro que sí, Justo! Avancemos con el Diseño en Cuadrado Latino (DCL). Este diseño es una herramienta fantástica para tus estudiantes, especialmente cuando se enfrentan a escenarios en el campo o en la agroindustria donde existen dos fuentes de variabilidad que necesitan controlar simultáneamente.

Aquí tienes la estructura completa para tu tercer cuaderno en Google Colab.


📘 Cuaderno 3: Diseño en Cuadrado Latino (DCL)

a) Introducción Teórica al DCL

El Diseño en Cuadrado Latino (DCL) se utiliza cuando deseamos controlar el error experimental proveniente de dos direcciones de variabilidad (dos factores de bloqueo). En el contexto agrícola, esto podría ser la pendiente del terreno (filas) y un gradiente de fertilidad o sombra (columnas). En la agroindustria, podría representar diferentes operadores (filas) y diferentes lotes de materia prima (columnas).

Una regla estricta del DCL es que el número de filas, el número de columnas y el número de tratamientos deben ser exactamente iguales (\(t\)). Además, cada tratamiento debe aparecer una y sola una vez en cada fila y en cada columna.

El Modelo Estadístico Lineal: \[y_{ijk} = \mu + \tau_i + \rho_j + \gamma_k + \epsilon_{ijk}\]

Donde: * \(y_{ijk}\): Es la respuesta observada para el \(i\)-ésimo tratamiento en la \(j\)-ésima fila y \(k\)-ésima columna. * \(\mu\): Es la media general. * \(\tau_i\): Es el efecto del \(i\)-ésimo tratamiento. * \(\rho_j\): Es el efecto de la \(j\)-ésima fila. * \(\gamma_k\): Es el efecto de la \(k\)-ésima columna. * \(\epsilon_{ijk}\): Es el error experimental.

Tabla ANOVA (Análisis de Varianza):

Fuente de Variación Grados de Libertad (GL) Suma de Cuadrados (SC) Cuadrado Medio (CM) F calculado
Tratamientos \(t - 1\) \(SCTr\) \(CMTr = \frac{SCTr}{t-1}\) \(\frac{CMTr}{CME}\)
Filas \(t - 1\) \(SCFilas\) \(CMF = \frac{SCFilas}{t-1}\) \(\frac{CMF}{CME}\)
Columnas \(t - 1\) \(SCCol\) \(CMC = \frac{SCCol}{t-1}\) \(\frac{CMC}{CME}\)
Error \((t - 1)(t - 2)\) \(SCE\) \(CME = \frac{SCE}{(t-1)(t-2)}\)
Total \(t^2 - 1\) \(SCT\)

(Nota: \(t\) = número de tratamientos = número de filas = número de columnas. \(N = t^2\))


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

Para resolver un DCL a mano, los pasos requieren sumar en tres direcciones distintas (tratamiento, fila y columna):

  1. Calcular Totales: Suma los datos por Tratamiento (\(Y_{i..}\)), por Fila (\(Y_{.j.}\)), por Columna (\(Y_{..k}\)), y el gran total (\(Y_{...}\)).
  2. Factor de Corrección (FC): \[FC = \frac{Y_{...}^2}{t^2}\]
  3. Suma de Cuadrados Total (SCT): \[SCT = \sum \sum \sum y_{ijk}^2 - FC\]
  4. Suma de Cuadrados de Tratamientos (SCTr): \[SCTr = \sum \frac{Y_{i..}^2}{t} - FC\]
  5. Suma de Cuadrados de Filas (SCFilas): \[SCFilas = \sum \frac{Y_{.j.}^2}{t} - FC\]
  6. Suma de Cuadrados de Columnas (SCCol): \[SCCol = \sum \frac{Y_{..k}^2}{t} - FC\]
  7. Suma de Cuadrados del Error (SCE): \[SCE = SCT - SCTr - SCFilas - SCCol\]
  8. Calcular CM y F calculados: Aplicar las fórmulas de la tabla ANOVA para contrastar las hipótesis.

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

Para easyanova, el dataset del DCL debe tener una estructura específica. Usaremos el data3 incluido en el paquete, donde las columnas representan Tratamiento, Fila, Columna y Respuesta.

library(easyanova)

# Cargar el dataset de ejemplo para DCL
data(data3)

# Inspeccionar los datos: Tratamiento, Fila, Columna, Respuesta
head(data3)
summary(data3)

# Visualización del EDA: Dividimos el área gráfica en 3
par(mfrow=c(1,3))

# 1. Variabilidad por Tratamiento
boxplot(data3[,4] ~ data3[,1], col="lightgreen", main="Vs Tratamiento", ylab="Respuesta")

# 2. Variabilidad por Filas (Primer gradiente)
boxplot(data3[,4] ~ data3[,2], col="lightblue", main="Vs Fila", ylab="Respuesta")

# 3. Variabilidad por Columnas (Segundo gradiente)
boxplot(data3[,4] ~ data3[,3], col="salmon", main="Vs Columna", ylab="Respuesta")

par(mfrow=c(1,1))

Propósito pedagógico: Pide a tus estudiantes que analicen si los gradientes de Fila y Columna muestran diferencias en sus cajas. Si ambos gradientes influyen en la respuesta, el Cuadrado Latino fue el diseño correcto; de lo contrario, se habrían “desperdiciado” grados de libertad del error.


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

La ejecución en easyanova mantiene la simplicidad, indicando design = 3.

# Ejecutar el DCL (design = 3 corresponde a Diseño en Cuadrado Latino)
# La tabla de datos asume el orden: Col 1 = Tratamiento, Col 2 = Fila, Col 3 = Columna, Col 4 = Respuesta
resultado_dcl <- ea1(data3, design = 3)

# Imprimir los resultados (ANOVA, prueba de medias, supuestos)
print(resultado_dcl)

e) Prompts Sugeridos para tus Estudiantes

Estos prompts ayudarán a los alumnos a consolidar la interpretación de una salida con múltiples factores de bloqueo:

  1. “En el output de la tabla ANOVA de easyanova, veo valores p para Tratamientos, Filas y Columnas. En un contexto agronómico donde las filas son el nivel de humedad y las columnas la inclinación del terreno, ¿cómo interpreto si valió la pena controlar ambas variables?”
  2. “Observando la prueba de medias (Scott-Knott o Tukey), ¿se mantiene el mismo tratamiento ganador que parecía destacar en el gráfico exploratorio (boxplot)? Explícame por qué controlar las filas y columnas nos da mayor seguridad en esta decisión.”
  3. “Teniendo en cuenta que en un Cuadrado Latino los grados de libertad del Error Experimental son \((t-1)(t-2)\), ¿qué pasaría matemáticamente con la precisión del experimento si decido usar solo 3 tratamientos en un ensayo agroindustrial (un DCL de 3x3)? ¿Es recomendable?”

f) Plantillas Alternativas: Python y Julia

En Python (Usando statsmodels):

import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols

# Dataset simulado para un Cuadrado Latino 3x3
# F: Fila, C: Columna, T: Tratamiento (A, B, C)
data = {
    'Tratamiento': ['A','B','C', 'B','C','A', 'C','A','B'],
    'Fila':        ['F1','F1','F1', 'F2','F2','F2', 'F3','F3','F3'],
    'Columna':     ['C1','C2','C3', 'C1','C2','C3', 'C1','C2','C3'],
    'Rendimiento': [15, 20, 18, 22, 19, 14, 17, 16, 21]
}
df = pd.DataFrame(data)

# Ajuste del modelo DCL sumando todos los factores de variación
modelo = ols('Rendimiento ~ C(Tratamiento) + C(Fila) + C(Columna)', data=df).fit()
tabla_anova = sm.stats.anova_lm(modelo, typ=2)

print("\n--- Tabla ANOVA (DCL) ---")
print(tabla_anova)

En Julia (Usando DataFrames y GLM):

using DataFrames, GLM

# Creación del DataFrame para un DCL 3x3
df = DataFrame(
    Tratamiento = ["A","B","C", "B","C","A", "C","A","B"],
    Fila = ["F1","F1","F1", "F2","F2","F2", "F3","F3","F3"],
    Columna = ["C1","C2","C3", "C1","C2","C3", "C1","C2","C3"],
    Rendimiento = [15, 20, 18, 22, 19, 14, 17, 16, 21]
)

# Convertir a variables categóricas
df.Tratamiento = categorical(df.Tratamiento)
df.Fila = categorical(df.Fila)
df.Columna = categorical(df.Columna)

# Ajuste del modelo lineal para DCL
modelo = lm(@formula(Rendimiento ~ Tratamiento + Fila + Columna), df)

println("--- Resumen del Modelo DCL ---")
println(modelo)