A continuación se explica el DBCA (Diseño de Bloques Completos al Azar) o Randomized Complete Block Design (RCBD), basándome en el material de Felipe Mendiburu y ampliando con implementaciones prácticas.
Según el documento, es un “diseño de doble vía” que se aplica cuando el material experimental es heterogéneo. Las unidades experimentales homogéneas se agrupan formando grupos homogéneos llamados bloques, y dentro de cada bloque se asignan al azar todos los tratamientos.
Características clave: 1. Las unidades experimentales son heterogéneas entre bloques, pero homogéneas dentro de cada bloque 2. Cada bloque tiene un número de unidades igual al número de tratamientos (bloques completos) 3. Los tratamientos están distribuidos al azar dentro de cada bloque 4. El número de repeticiones es igual al número de bloques
El DBCA reduce la varianza experimental al eliminar la variación atribuible a las diferencias entre bloques. Esto aumenta la precisión del experimento comparado con un Diseño Completamente al Azar (DCA), ya que el error se calcula después de ajustar por los efectos de bloques.
Agrícola: - Ensayos de variedades: Cuando el terreno tiene gradientes de fertilidad, humedad o topografía (como en el ejemplo del documento con variedades de camote) - Fertilización: Bloques establecidos según niveles de materia orgánica del suelo - Control de plagas: Bloques con diferentes niveles de infestación natural - Riego: Bloques conformados por diferencias en capacidad de retención de agua
Agroindustrial: - Procesos batch: Cuando se procesan lotes de materia prima de diferentes orígenes (cada origen es un bloque) - Líneas de producción: Máquinas diferentes o turnos de operarios como bloques - Control de calidad: Pruebas de tratamientos (empaques, temperaturas) donde cada día de producción es un bloque - Pruebas sensoriales: Panelistas como bloques cuando se evalúan diferentes formulaciones
\[Y_{ij} = \mu + \tau_i + \beta_j + \varepsilon_{ij}\]
Donde: - \(Y_{ij}\) = Observación del tratamiento \(i\) en el bloque \(j\) - \(\mu\) = Media general (efecto medio) - \(\tau_i\) = Efecto del tratamiento \(i\) (\(\sum \hat{\tau}_i = 0\)) - \(\beta_j\) = Efecto del bloque \(j\) (\(\sum \hat{\beta}_j = 0\)) - \(\varepsilon_{ij}\) = Error experimental aleatorio, \(\sim N(0, \sigma^2)\)
| Fuente | Suma de Cuadrados (SC) | Grados de Libertad (GL) | Cuadrado Medio (CM) | Razón F |
|---|---|---|---|---|
| Tratamientos | \(SC_{Trat} = b\sum_{j=1}^{t}(\bar{Y}_{.j} - \bar{Y}_{..})^2\) | \(t-1\) | \(CM_{Trat} = \frac{SC_{Trat}}{t-1}\) | \(F = \frac{CM_{Trat}}{CM_E}\) |
| Bloques | \(SC_{Bloq} = t\sum_{i=1}^{b}(\bar{Y}_{i.} - \bar{Y}_{..})^2\) | \(b-1\) | \(CM_{Bloq} = \frac{SC_{Bloq}}{b-1}\) | \(F = \frac{CM_{Bloq}}{CM_E}\) |
| Error | \(SC_E = SC_T - SC_{Trat} - SC_{Bloq}\) | \((t-1)(b-1)\) | \(CM_E = \frac{SC_E}{(t-1)(b-1)}\) | |
| Total | \(SC_T = \sum\sum(Y_{ij} - \bar{Y}_{..})^2\) | \(bt-1\) |
Término de Corrección (TC): \[TC = \frac{Y_{..}^2}{rt}\]
Datos: Follaje fresco de 5 tratamientos (V1, Testigo, V2, V3, V4) en 3 bloques (I, II, III)
| Bloque | V1 | Testigo | V2 | V3 | V4 | Total Bloque |
|---|---|---|---|---|---|---|
| I | 17.9 | 7.0 | 19.8 | 15.2 | 12.7 | 72.6 |
| II | 20.8 | 5.9 | 16.7 | 21.0 | 14.2 | 78.6 |
| III | 21.4 | 4.2 | 16.7 | 8.8 | 11.5 | 62.6 |
| Total Trat. | 60.1 | 17.1 | 53.2 | 45.0 | 38.4 | 213.8 (Gran Total) |
Paso 1: Término de Corrección \[TC = \frac{(213.8)^2}{15} = 3047.51\]
Paso 2: Suma de Cuadrados Total \[SC_{Total} = \sum Y_{ij}^2 - TC = (17.9^2 + 7.0^2 + ... + 11.5^2) - 3047.51 = 459.58\]
Paso 3: SC de Variedades (Tratamientos) \[SC_{Var} = \frac{\sum Y_{.j}^2}{b} - TC = \frac{60.1^2 + 17.1^2 + 53.2^2 + 45.0^2 + 38.4^2}{3} - 3047.51 = 364.04\]
Paso 4: SC de Bloques \[SC_{Bloq} = \frac{\sum Y_{i.}^2}{t} - TC = \frac{72.6^2 + 78.6^2 + 62.6^2}{5} - 3047.51 = 26.13\]
Paso 5: SC de Error \[SC_{Error} = SC_{Total} - SC_{Var} - SC_{Bloq} = 459.58 - 364.04 - 26.13 = 69.41\]
Paso 6: Cuadrados Medios y F - \(CM_{Var} = 364.04 / 4 = 91.01\) - \(CM_{Bloq} = 26.13 / 2 = 13.07\) - \(CM_{Error} = 69.41 / 8 = 8.68\) - \(F_{Var} = 91.01 / 8.68 = 10.49\) (significativo, p=0.0029) - \(F_{Bloq} = 13.07 / 8.68 = 1.51\) (no significativo, p=0.2785)
statsmodels y pingouin)import pandas as pd
import numpy as np
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
import pingouin as pg
# Crear dataframe con datos del ejemplo
data = pd.DataFrame({
'Bloque': ['I', 'I', 'I', 'I', 'I',
'II', 'II', 'II', 'II', 'II',
'III', 'III', 'III', 'III', 'III'],
'Tratamiento': ['V1', 'Testigo', 'V2', 'V3', 'V4'] * 3,
'Rendimiento': [17.9, 7.0, 19.8, 15.2, 12.7,
20.8, 5.9, 16.7, 21.0, 14.2,
21.4, 4.2, 16.7, 8.8, 11.5]
})
# Método 1: Statsmodels (Tipo I, II, III)
modelo = ols('Rendimiento ~ C(Tratamiento) + C(Bloque)', data=data).fit()
anova_result = anova_lm(modelo, typ=2) # Tipo II para diseños balanceados
print(anova_result)
# Método 2: Pingouin (más completo, incluye medidas de tamaño)
aov = pg.rm_anova(dv='Rendimiento', within=['Tratamiento', 'Bloque'],
subject='Bloque', data=data, detailed=True)
# Nota: Para DBCA tradicional usar anova_twoway o mixed_anova según diseño
# Crear datos
trat <- factor(rep(c("V1", "Testigo", "V2", "V3", "V4"), 3))
bloque <- factor(rep(c("I", "II", "III"), each=5))
rendimiento <- c(17.9, 7.0, 19.8, 15.2, 12.7,
20.8, 5.9, 16.7, 21.0, 14.2,
21.4, 4.2, 16.7, 8.8, 11.5)
datos <- data.frame(trat, bloque, rendimiento)
# Método 1: Base R (aov)
modelo <- aov(rendimiento ~ trat + bloque, data=datos)
summary(modelo)
# Método 2: Paquete agricolae (incluye comparaciones múltiples)
library(agricolae)
resultado <- design.crd(trat, bloque, r=1) # Para análisis
modelo2 <- aov(rendimiento ~ trat + Error(bloque), data=datos)
LSD.test(modelo, "trat", console=TRUE) # Prueba LSD
# install.packages("easyanova")
library(easyanova)
# El paquete easyanova facilita el análisis con funciones específicas
# para diseños experimentales comunes
datos <- read.table(text="
trat bloque resp
V1 I 17.9
Testigo I 7.0
V2 I 19.8
V3 I 15.2
V4 I 12.7
V1 II 20.8
Testigo II 5.9
V2 II 16.7
V3 II 21.0
V4 II 14.2
V1 III 21.4
Testigo III 4.2
V2 III 16.7
V3 III 8.8
V4 III 11.5", header=TRUE)
# Análisis DBCA
resultado <- easyaov(resp ~ trat + bloque, data=datos, design="rcbd")
summary(resultado)
Al ejecutar el análisis, obtendrás una tabla similar a esta:
Df Sum Sq Mean Sq F value Pr(>F)
trat 4 364.04 91.01 10.488 0.00292 **
bloque 2 26.13 13.07 1.505 0.27854
Residuals 8 69.40 8.68
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Interpretación paso a paso:
Después de encontrar significancia en tratamientos, se realizan comparaciones por pares usando LSD, Tukey o Duncan:
# En R con agricolae
library(agricolae)
modelo <- aov(rendimiento ~ trat + bloque, data=datos)
duncan <- duncan.test(modelo, "trat", console=TRUE)
Salida típica:
Duncan's multiple range test
rendimiento
V1 20.03333 a
V2 17.73333 ab
V3 15.00000 bc
V4 12.76667 c
Testigo 5.70000 d
Interpretación: Letras diferentes indican diferencias significativas. V1 es superior a todas; el testigo es el peor.
Cuando se tienen comparaciones planificadas (no todas contra todas):
# Contrastes: Testigo vs Nuevas, V1+V2 vs V3+V4, etc.
contrastes <- matrix(c(4, -1, -1, -1, -1, # C1: Testigo vs resto
0, -1, -1, 1, 1, # C2: V1+V2 vs V3+V4
0, -1, 1, 0, 0, # C3: V1 vs V2
0, 0, 0, -1, 1), # C4: V3 vs V4
nrow=4, byrow=TRUE)
Interpretación: - C1 (Testigo vs Variedades): F=31.6**, significativo → Las variedades nuevas difieren del testigo - C2 (V1+V2 vs V3+V4): F=8.6*, significativo → El grupo 1+2 es diferente del 3+4 - C3 (V1 vs V2): F=0.9 ns, no significativo → V1 y V2 son estadísticamente iguales
Es crucial verificar los supuestos:
# Gráficos de diagnóstico
par(mfrow=c(2,2))
plot(modelo)
# Prueba de normalidad
shapiro.test(residuals(modelo))
# Prueba de homogeneidad de varianzas
library(car)
leveneTest(rendimiento ~ trat, data=datos)
Interpretación de diagnósticos: - Normalidad: Si p > 0.05 en Shapiro-Wilk, los residuos son normales - Homocedasticidad: Si p > 0.05 en Levene, las varianzas son homogéneas - Si fallan los supuestos: Usar transformación (log, raíz cuadrada) o Prueba de Friedman (no paramétrica)
El DBCA es esencial cuando existe heterogeneidad conocida en el material experimental. En el ejemplo de las variedades de camote, el análisis demostró que:
La implementación computacional (Python/R) automatiza los cálculos manuales, pero la interpretación siempre debe basarse en la lógica experimental: verificar primero la significancia global, luego identificar qué tratamientos difieren, y finalmente validar que los supuestos estadísticos se cumplan.