¡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.
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\))
Para resolver un DCL a mano, los pasos requieren sumar en tres direcciones distintas (tratamiento, fila y columna):
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.
easyanovaLa 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)
Estos prompts ayudarán a los alumnos a consolidar la interpretación de una salida con múltiples factores de bloqueo:
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?”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)