El Diseño Completamente al Azar (DCA) es la piedra angular del diseño experimental y el mejor punto de partida para tus estudiantes.
He estructurado este contenido pensando en un enfoque agronómico y agroindustrial, de modo que puedas copiar y pegar estos bloques directamente en tu Google Colab.
El Diseño Completamente al Azar (DCA) es el diseño experimental más simple. Se utiliza cuando las unidades experimentales (por ejemplo, parcelas de tierra, lotes de semillas, o muestras de un producto agroindustrial) son homogéneas. En este diseño, los tratamientos se asignan a las unidades experimentales de forma completamente aleatoria, sin restricciones.
El Modelo Estadístico Lineal: \[y_{ij} = \mu + \tau_i + \epsilon_{ij}\]
Donde: * \(y_{ij}\): Es la respuesta observada en la \(j\)-ésima repetición del \(i\)-ésimo tratamiento (ej. rendimiento en toneladas por hectárea). * \(\mu\): Es la media general de todos los datos. * \(\tau_i\): Es el efecto del \(i\)-ésimo tratamiento. * \(\epsilon_{ij}\): Es el error experimental aleatorio asociado a esa observación.
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}\) |
| Error | \(N - t\) | \(SCE\) | \(CME = \frac{SCE}{N-t}\) | |
| Total | \(N - 1\) | \(SCT\) |
(Nota: \(t\) = número de tratamientos, \(N\) = número total de observaciones).
Para que los estudiantes comprendan de dónde salen los números del software, dales estos pasos para resolver un ejercicio pequeño a mano:
Antes de correr el ANOVA, es vital que el estudiante observe los
datos. Utilizaremos el conjunto de datos data1 que viene
incluido en easyanova, el cual simula respuestas bajo
distintos tratamientos.
# Instalar el paquete si no está instalado (descomentar la siguiente línea)
# install.packages("easyanova")
library(easyanova)
# Cargar el dataset de ejemplo para DCA
data(data1)
# Ver las primeras filas
head(data1)
# Estadísticas descriptivas básicas
summary(data1)
# Visualización: Boxplot para observar la dispersión y medianas
boxplot(data1[,2] ~ data1[,1],
col = c("lightgreen", "lightblue", "salmon", "wheat"),
main = "Rendimiento por Tipo de Tratamiento (EDA)",
xlab = "Tratamiento",
ylab = "Respuesta Observada")
Propósito pedagógico: Pregunta a tus alumnos si, a simple vista en el gráfico de cajas, parece que algún tratamiento supera a los demás. El ANOVA confirmará si esa percepción visual es estadísticamente real o producto del azar.
easyanovaLa ventaja de easyanova es que con una sola línea de
código hace el ANOVA, la prueba de comparación de medias y verifica los
supuestos.
# Ejecutar el DCA (design = 1 corresponde a Diseño Completamente al Azar)
# La función ea1 devuelve una lista con varios resultados (ANOVA, medias, residuos, etc.)
resultado_dca <- ea1(data1, design = 1)
# Imprimir los resultados completos
print(resultado_dca)
Pide a tus estudiantes que copien la salida generada por
easyanova en su entorno de R y me hagan las siguientes
preguntas para ayudarles a interpretar los resultados agronómicos:
ea1 de
R. Basándote en el valor p (p-value) de la tabla ANOVA, ¿existe
evidencia estadística para afirmar que los tratamientos tienen efectos
diferentes sobre el cultivo?”Para enriquecer sus habilidades en programación computacional, aquí están los scripts equivalentes en otros lenguajes.
En Python (Usando statsmodels y
seaborn):
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.formula.api import ols
# Simulación de un dataset similar a data1
data = {'Tratamiento': ['T1']*5 + ['T2']*5 + ['T3']*5 + ['T4']*5,
'Respuesta': [23, 25, 22, 24, 26, 30, 32, 29, 31, 28, 15, 17, 14, 16, 18, 20, 22, 19, 21, 23]}
df = pd.DataFrame(data)
# EDA: Boxplot
sns.boxplot(x='Tratamiento', y='Respuesta', data=df)
plt.title('EDA: Rendimiento por Tratamiento')
plt.show()
# Ajuste del modelo lineal y tabla ANOVA
modelo = ols('Respuesta ~ C(Tratamiento)', data=df).fit()
tabla_anova = sm.stats.anova_lm(modelo, typ=2)
print("\n--- Tabla ANOVA ---")
print(tabla_anova)
En Julia (Usando DataFrames, GLM y
ANOVA):
using DataFrames, GLM, HypothesisTests
# Creación de un DataFrame simulado
df = DataFrame(
Tratamiento = repeat(["T1", "T2", "T3", "T4"], inner = 5),
Respuesta = [23, 25, 22, 24, 26, 30, 32, 29, 31, 28, 15, 17, 14, 16, 18, 20, 22, 19, 21, 23]
)
# Convertir la columna Tratamiento a variable categórica
df.Tratamiento = categorical(df.Tratamiento)
# Ajuste del modelo lineal
modelo = lm(@formula(Respuesta ~ Tratamiento), df)
# Generación de la tabla ANOVA (requiere paquete adicional estadístico estándar)
# En Julia básico, podemos examinar el modelo ajustado
println("--- Resumen del Modelo ---")
println(modelo)