Comprender qué son los diseños en bloques incompletos balanceados y cuándo utilizarlos.
Situación Problemática
En el Diseño en Bloques Completos Aleatorizados (DBCA), cada bloque contiene todos los tratamientos. Sin embargo, existen situaciones prácticas donde esta condición no puede cumplirse, dando lugar a los Diseños en Bloques Incompletos.
Un Diseño en Bloques Incompletos (DBIA) surge cuando no es posible aplicar todos los tratamientos dentro de cada bloque debido a restricciones prácticas. Esto puede ocurrir por:
Limitaciones presupuestales, de material experimental o de tiempo que impiden replicar todos los tratamientos en cada bloque.
El tamaño físico de las unidades experimentales o del bloque limita el número de tratamientos que pueden aplicarse simultáneamente.
Un diseño en bloques incompletos es aquel en el que no todos los tratamientos se encuentran representados en cada bloque. Aquellos tratamientos que aparecen dentro de un bloque se ensayan exactamente una vez en dicho bloque.
Cada tratamiento aparece el mismo número de veces en total (r) y cada par de
tratamientos aparece junto exactamente el mismo número de veces (λ).
Balanceado: λ = constante, r = constante
No se satisfacen las condiciones de balance. El análisis es más complejo pues las comparaciones entre tratamientos tienen varianzas distintas, requiriendo métodos especializados.
No balanceado: varianzas desiguales
Nota Importante
En este material nos enfocaremos principalmente en los Bloques Incompletos Balanceados (BIBD), que son los más utilizados en la práctica debido a sus propiedades estadísticas óptimas.
Estudiar la notación estándar y las condiciones de existencia de los BIBD.
La siguiente notación es fundamental para comprender y trabajar con diseños en bloques incompletos balanceados.
| Símbolo | Descripción | Restricción |
|---|---|---|
| $v$ | Número de tratamientos (factor principal) | $v \geq 2$ |
| $b$ | Número de bloques | $b \geq 2$ |
| $k$ | Número de unidades experimentales por bloque | $2 \leq k < v$ |
| $r$ | Número de replicaciones de cada tratamiento | $r \geq 2$ |
| $\lambda$ | Veces que cada par de tratamientos aparece junto | $\lambda \geq 1$ (entero) |
| $N = bk = vr$ | Número total de observaciones | - |
| $y_{ij}$ | Observación del tratamiento $i$ en el bloque $j$ | Si está presente |
$bk = vr$
Esta ecuación fundamental establece que el producto del número de bloques por el tamaño de bloque debe ser igual al producto de tratamientos por replicaciones. Esta relación debe cumplirse siempre en un BIBD.
Total de observaciones:
$N = bk$
Replicaciones:
$r = \frac{bk}{v}$
Parámetro λ:
$\lambda = \frac{r(k-1)}{v-1}$
Un BIBD solo existe si se satisfacen simultáneamente las siguientes condiciones:
Nota: Si alguna de estas condiciones no se cumple, el diseño propuesto no es un BIBD válido.
En todo BIBD se cumple que $b \geq v$ (número de bloques ≥ número de tratamientos). Cuando $b = v$, el diseño se denomina diseño simétrico.
Conocer los parámetros clave del BIBD: a, b, k, r y λ.
En un BIBD, la propiedad fundamental es que cualquier par de tratamientos aparece exactamente $\lambda$ veces juntos en los bloques. Esta propiedad de balance permite que todas las comparaciones entre tratamientos tengan la misma precisión, lo cual es estadísticamente óptimo.
El balance garantiza que la varianza de la diferencia entre dos medias de tratamientos sea constante para todos los pares, facilitando las comparaciones múltiples y las pruebas de hipótesis.
$\lambda = \frac{r(k-1)}{v-1} = \frac{bk(k-1)}{v(v-1)}$
El parámetro $\lambda$ representa el número de veces que cada par de tratamientos aparece junto en el mismo bloque. Su cálculo es crucial para verificar si un diseño es balanceado.
Fórmula 1 (usando r y k):
$\lambda = \frac{r(k-1)}{v-1}$
Fórmula 2 (usando b, k, v):
$\lambda = \frac{bk(k-1)}{v(v-1)}$
Considérese un BIBD con $v = 4$ tratamientos, $b = 4$ bloques y $k = 2$ unidades por bloque:
| Bloque | Tratamientos Asignados | $k$ |
|---|---|---|
| 1 | (1, 2) | 2 |
| 2 | (1, 3) | 2 |
| 3 | (2, 4) | 2 |
| 4 | (3, 4) | 2 |
Tratamientos
$v = 4$
Bloques
$b = 4$
Unidades/bloque
$k = 2$
Replicaciones
$r = 2$
Total observaciones
$N = 8$
Parámetro λ
$\lambda = 1$
Cada par de tratamientos debe aparecer exactamente $\lambda = 1$ vez:
Nota: Este diseño de ejemplo NO es un BIBD válido porque los pares (1,4) y (2,3) no aparecen. Un BIBD válido requeriría bloques adicionales o una reestructuración completa.
Formular el modelo lineal del BIBD y sus componentes.
El modelo estadístico para un DBIA es similar al del DBCA, pero requiere ajustes especiales en el análisis debido a la incompletitud de los bloques.
$y_{ij} = \mu + \tau_i + \beta_j + \varepsilon_{ij}$
$y_{ij}$
Observación del tratamiento $i$ en el bloque $j$
$\mu$
Media general (parámetro fijo)
$\tau_i$
Efecto del tratamiento $i$ (con restricción $\sum \tau_i = 0$)
$\beta_j$
Efecto del bloque $j$ (aleatorio o fijo)
$\varepsilon_{ij} \sim N(0, \sigma^2)$
Error aleatorio, independiente e idénticamente distribuido
A diferencia del DBCA, en el DBIA no todas las combinaciones $(i, j)$ existen. La observación $y_{ij}$ solo está definida si el tratamiento $i$ está asignado al bloque $j$. Esto se representa mediante una matriz de incidencia $n_{ij}$, donde $n_{ij} = 1$ si el tratamiento $i$ está en el bloque $j$, y $n_{ij} = 0$ en otro caso.
Normalidad
Los errores $\varepsilon_{ij}$ se distribuyen normalmente con media cero.
$\varepsilon_{ij} \sim N(0, \sigma^2)$
Homocedasticidad
Varianza constante $\sigma^2$ para todos los errores.
$Var(\varepsilon_{ij}) = \sigma^2$
Independencia
Los errores son independientes entre observaciones.
$Cov(\varepsilon_{ij}, \varepsilon_{kl}) = 0$
Aditividad
No hay interacción entre tratamientos y bloques.
$E(y_{ij}) = \mu + \tau_i + \beta_j$
$H_0: \tau_1 = \tau_2 = ... = \tau_v = 0$
No hay efecto de tratamientos
$H_1: \exists \tau_i \neq 0$
Al menos un tratamiento tiene efecto
$H_0: \beta_1 = \beta_2 = ... = \beta_b = 0$
No hay efecto de bloques
$H_1: \exists \beta_j \neq 0$
Al menos un bloque tiene efecto
Debido a la incompletitud de los bloques, las sumas de cuadrados de tratamientos y bloques no son ortogonales. Esto requiere el uso de sumas de cuadrados ajustadas para obtener pruebas F válidas. El procedimiento se detalla en la Sección 7.
Visualizar el proceso completo de análisis del BIBD.
El siguiente diagrama representa la estructura lógica de un Diseño en Bloques Incompletos Balanceados (BIBD). Esta representación visual ayuda a comprender cómo se distribuyen los tratamientos en los bloques de manera incompleta pero balanceada.
Cada bloque contiene 4 tratamientos (de los 5 posibles) - Diseño Simétrico
Bloque 1
Bloque 2
Bloque 3
Bloque 4
Bloque 5
Leyenda:
Parámetros del diseño:
$v = 5$ (tratamientos)
$b = 5$ (bloques)
$k = 4$ (unidades/bloque)
$r = 4$ (réplicas)
$N = 20$ (total)
$\lambda = 3$ ✓
Verificación: $\lambda = \frac{r(k-1)}{v-1} = \frac{4(3)}{4} = 3$ (entero, diseño válido)
Incompletitud
Ningún bloque contiene todos los tratamientos. Por ejemplo, T5 no está en B1, T2 no está en B2.
Balance (BIBD)
Cada tratamiento aparece r=4 veces y cada par de tratamientos aparece exactamente λ=3 veces.
Aleatorización
Dentro de cada bloque, los tratamientos se asignan aleatoriamente a las unidades experimentales.
Bloques Homogéneos
Las unidades dentro de cada bloque son más similares entre sí que las de otros bloques.
La matriz de incidencia $N = [n_{ij}]$ es una representación matricial del diseño donde:
$n_{ij} = \begin{cases} 1 & \text{si el tratamiento } i \text{ está en el bloque } j \\ 0 & \text{en otro caso} \end{cases}$
Esta matriz es fundamental para los cálculos de sumas de cuadrados ajustadas en el análisis de varianza.
Aplicar el BIBD a un problema concreto con cálculos paso a paso.
Una industria algodonera, interesada en maximizar el rendimiento de la semilla de algodón, quiere comprobar si dicho rendimiento depende del tipo de fertilizante utilizado para tratar la planta. A su disposición tiene 5 tipos de fertilizantes. Como se cree que el tipo de terreno puede influir también en el rendimiento de la semilla de algodón, se considera el terreno dividido en 5 bloques. Cada bloque se divide en 5 parcelas, fumigando dentro de cada bloque cada una de las parcelas con un fertilizante. Debido a la extensión de los bloques y a la falta de recursos, no se pueden aplicar todos los fertilizantes en cada bloque, sino que sólo se pueden aplicar 4 de los 5 fertilizantes en cada uno de ellos.
¿Existe evidencia estadística suficiente para afirmar que los diferentes fertilizantes producen rendimientos de semilla de algodón significativamente diferentes al nivel de significancia $\alpha = 0.05$?
v = 5
Fertilizantes
b = 5
Bloques
k = 4
Por bloque
r = 4
Réplicas
λ = 3
Cada par aparece 3 veces
N = 20
Total observaciones
Verificación: Este es un diseño simétrico ya que $v = b = 5$. Además, $\lambda = \frac{r(k-1)}{v-1} = \frac{4 \times 3}{4} = 3$ ✓
La siguiente tabla muestra la disposición del diseño y las observaciones obtenidas (rendimiento de semilla en kg/parcela):
| Fertilizante | Bloques | $y_{i.}$ | $y_{i.}^2$ | ||||
|---|---|---|---|---|---|---|---|
| B1 | B2 | B3 | B4 | B5 | |||
| 1 | 94 | 96 | 100 | 92 | - | 382 | 145924 |
| 2 | 95 | 75 | 76 | - | 92 | 338 | 114244 |
| 3 | 76 | 100 | - | 97 | 98 | 371 | 137641 |
| 4 | 94 | - | 102 | 93 | 96 | 385 | 148225 |
| 5 | - | 75 | 91 | 86 | 95 | 347 | 120409 |
| $y_{.j}$ | 359 | 346 | 369 | 368 | 381 | 1823 | 666443 |
| $y_{.j}^2$ | 128881 | 119716 | 136161 | 135424 | 145161 | - | 665343 |
Tratamientos (I)
$v = 5$
Bloques (J)
$b = 5$
Unidades/bloque (K)
$k = 4$
Réplicas (R)
$r = 4$
Parámetro λ
$\lambda = 3$
Total observaciones
$N = 20$
Verificación: $N = bk = 5 \times 4 = 20 = vr = 5 \times 4$ ✓ | $\lambda = \frac{r(k-1)}{v-1} = \frac{4(3)}{4} = 3$ ✓ | Diseño Simétrico: $v = b = 5$ ✓
A continuación se presentan los cálculos detallados de las sumas de cuadrados para el análisis de varianza.
$$SCT = \sum_{i=1}^{v}\sum_{j=1}^{b} y_{ij}^2 - \frac{y_{..}^2}{N}$$
$$SCT = 167627 - \frac{(1823)^2}{20} = 167627 - 166166.45 = 1460.55$$
$$SC_{Bl} = \frac{\sum_{j=1}^{b} y_{.j}^2}{k} - \frac{y_{..}^2}{N}$$
$$SC_{Bl} = \frac{665343}{4} - \frac{(1823)^2}{20} = 166335.75 - 166166.45 = 169.30$$
Los totales ajustados se calculan como: $T_i = y_{i.} - \frac{1}{k}\sum_{j=1}^{b} n_{ij}y_{.j}$
| Tratamiento | $y_{i.}$ | Bloques | $\frac{1}{k}\sum n_{ij}y_{.j}$ | $T_i$ |
|---|---|---|---|---|
| 1 | 382 | B1, B2, B3, B4 | $\frac{1}{4}(359+346+369+368) = 360.5$ | 21.5 |
| 2 | 338 | B1, B2, B3, B5 | $\frac{1}{4}(359+346+369+381) = 363.75$ | -25.75 |
| 3 | 371 | B1, B2, B4, B5 | $\frac{1}{4}(359+346+368+381) = 363.5$ | 7.5 |
| 4 | 385 | B1, B3, B4, B5 | $\frac{1}{4}(359+369+368+381) = 369.25$ | 15.75 |
| 5 | 347 | B2, B3, B4, B5 | $\frac{1}{4}(346+369+368+381) = 366$ | -19 |
Verificación: $\sum T_i = 21.5 - 25.75 + 7.5 + 15.75 - 19 = 0$ ✓
$$SCTr^* = \frac{k}{\lambda v} \sum_{i=1}^{v} T_i^2$$
$$SCTr^* = \frac{4}{3 \times 5} [(21.5)^2 + (-25.75)^2 + (7.5)^2 + (15.75)^2 + (-19)^2]$$
$$SCTr^* = \frac{4}{15} [462.25 + 663.0625 + 56.25 + 248.0625 + 361] = \frac{4}{15} \times 1790.625 = 477.5$$
$$SCR = SCT - SCTr^* - SC_{Bl}$$
$$SCR = 1460.55 - 477.5 - 169.3 = 813.75$$
| Fuente de Variación | Suma de Cuadrados | GL | Cuadrados Medios | Fexp |
|---|---|---|---|---|
| Tratamientos (ajustada) | 477.5 | 4 | 119.375 | 1.614 |
| Bloques (no ajustada) | 169.3 | 4 | - | - |
| Residual | 813.75 | 11 | 73.97 | - |
| TOTAL | 1460.55 | 19 | - | - |
Hipótesis: $H_0: \tau_1 = \tau_2 = ... = \tau_5 = 0$ vs $H_1: \exists \tau_i \neq 0$
Valor crítico: $F_{0.05, 4, 11} = 3.36$
Decisión: Como $F_{exp} = 1.614 < 3.36$, NO se rechaza H₀. No hay evidencia suficiente para afirmar que los fertilizantes tienen efectos significativamente diferentes en el rendimiento de semilla de algodón al nivel del 5%.
Esta segunda tabla ANOVA permite probar si existen diferencias significativas entre los bloques (tipos de terreno), usando la suma de cuadrados de bloques ajustada.
Los totales ajustados de bloques se calculan como: $B_j = y_{.j} - \frac{1}{r}\sum_{i=1}^{v} n_{ij}y_{i.}$
| Bloque | $y_{.j}$ | Tratamientos | $\frac{1}{r}\sum n_{ij}y_{i.}$ | $B_j$ |
|---|---|---|---|---|
| 1 | 359 | T1, T2, T3, T4 | $\frac{1}{4}(382+338+371+385) = 369$ | -10 |
| 2 | 346 | T1, T2, T3, T5 | $\frac{1}{4}(382+338+371+347) = 359.5$ | -13.5 |
| 3 | 369 | T1, T2, T4, T5 | $\frac{1}{4}(382+338+385+347) = 363$ | 6 |
| 4 | 368 | T1, T3, T4, T5 | $\frac{1}{4}(382+371+385+347) = 371.25$ | -3.25 |
| 5 | 381 | T2, T3, T4, T5 | $\frac{1}{4}(338+371+385+347) = 360.25$ | 20.75 |
Verificación: $\sum B_j = -10 - 13.5 + 6 - 3.25 + 20.75 = 0$ ✓
$$SC_{Bl}^* = \frac{r}{\lambda b} \sum_{j=1}^{b} B_j^2$$
$$SC_{Bl}^* = \frac{4}{3 \times 5} [(-10)^2 + (-13.5)^2 + (6)^2 + (-3.25)^2 + (20.75)^2]$$
$$SC_{Bl}^* = \frac{4}{15} [100 + 182.25 + 36 + 10.5625 + 430.5625] = \frac{4}{15} \times 759.375 = 202.5$$
$$SCTr = \frac{\sum_{i=1}^{v} y_{i.}^2}{r} - \frac{y_{..}^2}{N}$$
$$SCTr = \frac{666443}{4} - \frac{(1823)^2}{20} = 166610.75 - 166166.45 = 444.3$$
| Fuente de Variación | Suma de Cuadrados | GL | Cuadrados Medios | Fexp |
|---|---|---|---|---|
| Tratamientos (no ajustada) | 444.3 | 4 | - | - |
| Bloques (ajustada) | 202.5 | 4 | 50.625 | 0.684 |
| Residual | 813.75 | 11 | 73.97 | - |
| TOTAL | 1460.55 | 19 | - | - |
Hipótesis: $H_0: \beta_1 = \beta_2 = ... = \beta_5 = 0$ vs $H_1: \exists \beta_j \neq 0$
Valor crítico: $F_{0.05, 4, 11} = 3.36$
Decisión: Como $F_{exp} = 0.684 < 3.36$, NO se rechaza H₀. No hay evidencia suficiente para afirmar que el tipo de terreno (bloques) tiene efectos significativamente diferentes en el rendimiento de semilla de algodón al nivel del 5%.
Construir la tabla ANOVA intrabloque y realizar pruebas de hipótesis.
El análisis de varianza para un DBIA requiere ajustes especiales debido a la incompletitud de los bloques. Esta sección explica detalladamente el procedimiento.
Confusión de Tratamientos y Bloques
En un DBIA, los totales de tratamientos están influenciados por los bloques donde aparecen, y los totales de bloques están influenciados por los tratamientos que contienen. Esto requiere ajustes para construir estadísticos de prueba válidos.
Cuando se desea probar el efecto de tratamientos, es necesario eliminar la variabilidad debida a los bloques. Análogamente, cuando se desea probar el efecto de bloques, se debe eliminar la variabilidad debida a los tratamientos.
Suma de Cuadrados Total:
$SCT = \sum_{i,j} y_{ij}^2 - \frac{y_{..}^2}{N}$
SC de Bloques (no ajustada):
$SC_{bloques} = \frac{\sum_j y_{.j}^2}{k} - \frac{y_{..}^2}{N}$
Sumas Ajustadas ($Q_i$):
$Q_i = y_{i.} - \frac{1}{k}\sum_{j \in B_i} y_{.j}$
Donde $B_i$ son los bloques con el tratamiento $i$
SC de Tratamientos Ajustada:
$SC_{trat(ajust)} = \frac{\sum_i Q_i^2}{r\lambda}$
Para probar si existen diferencias entre tratamientos, se utiliza la suma de cuadrados de tratamientos ajustada ($SC_{trat(ajust)}$), que elimina la influencia de los bloques.
| Fuente de Variación | GL | SC | CM | F |
|---|---|---|---|---|
| Bloques (no ajustados) | $b - 1$ | $SC_B$ | $CM_B$ | - |
| Tratamientos Ajustados | $v - 1$ | $SC_{trat(ajust)} = \frac{\sum Q_i^2}{r\lambda}$ | $CM_T = \frac{SC_{trat(ajust)}}{v-1}$ | $F_T = \frac{CM_T}{CM_E}$ |
| Error | $N - b - v + 1$ | $SC_E = SCT - SC_B - SC_{trat(ajust)}$ | $CM_E$ | - |
| Total | $N - 1$ | $SCT$ | - | - |
$H_0: \tau_1 = \tau_2 = ... = \tau_v = 0$
$H_1:$ Al menos un $\tau_i \neq 0$
Estadístico de prueba:
$F_T = \frac{CM_{trat(ajust)}}{CM_E} \sim F_{(v-1), (N-b-v+1)}$
Criterio de rechazo: $F_T > F_{\alpha, (v-1), (N-b-v+1)}$
Para probar si existen diferencias entre bloques, se utiliza la suma de cuadrados de bloques ajustada ($SC_{bloques(ajust)}$), que elimina la influencia de los tratamientos.
| Fuente de Variación | GL | SC | CM | F |
|---|---|---|---|---|
| Bloques Ajustados | $b - 1$ | $SC_{bloques(ajust)} = \frac{\sum_j Q_j^2}{r\lambda}$ | $CM_B = \frac{SC_{bloques(ajust)}}{b-1}$ | $F_B = \frac{CM_B}{CM_E}$ |
| Tratamientos (no ajustados) | $v - 1$ | $SC_T$ | $CM_T$ | - |
| Error | $N - b - v + 1$ | $SC_E = SCT - SC_{bloques(ajust)} - SC_T$ | $CM_E$ | - |
| Total | $N - 1$ | $SCT$ | - | - |
Las dos tablas no pueden usarse simultáneamente porque:
Recomendación: El investigador debe decidir qué efecto es de interés principal: los tratamientos (Tabla 4.9) o los bloques (Tabla 4.10).
Para probar Tratamientos:
$SC_{trat(ajust)} = \frac{k}{\lambda v} \sum Q_i^2$
$Q_i = y_{i.} - \frac{1}{k}\sum_{j \in B_i} y_{.j}$
Para probar Bloques:
$SC_{bloques(ajust)} = \frac{r}{\lambda b} \sum_j Q_j^2$
$Q_j = y_{.j} - \frac{1}{k}\sum_{i \in T_j} y_{i.}$
Practicar conceptos básicos del BIBD.
Un investigador ha propuesto un diseño en bloques incompletos con los siguientes parámetros: $v = 5$, $b = 10$, $k = 2$.
Paso 1: De la relación fundamental $bk = vr$:
$r = \frac{bk}{v} = \frac{10 \times 2}{5} = 4$
Paso 2: Cálculo de $\lambda$ mediante $\lambda(v-1) = r(k-1)$:
$\lambda = \frac{r(k-1)}{v-1} = \frac{4 \times 1}{4} = 1$
Paso 3: Verificación: $\lambda(v-1) = 1 \times 4 = 4 = r(k-1) = 4 \times 1$. Se satisface.
Paso 4: $N = bk = 10 \times 2 = 20$.
Continuación sugerida: Verificar que $N = vr = 5 \times 4 = 20$ coincide.
Se condujo un experimento para comparar 3 métodos de enseñanza (M1, M2, M3) utilizando 5 grupos de estudiantes (bloques). Por limitaciones logísticas, solo fue posible aplicar 2 métodos por grupo.
Los resultados (puntuaciones obtenidas) fueron:
| Grupo | Método 1 | Método 2 |
|---|---|---|
| 1 | M1: 85 | M2: 78 |
| 2 | M1: 82 | M3: 88 |
| 3 | M2: 75 | M3: 86 |
| 4 | M1: 79 | M3: 84 |
| 5 | M2: 80 | M3: 87 |
Paso 1: Parámetros identificados:
Paso 2: Totales por tratamiento:
Paso 3: Totales por bloque:
Continuación sugerida: Calcular $SCT$, $SC_{bloques}$ y $SC_E$ para completar el ANOVA.
Resolver el problema 4.47 del texto de referencia.
Fuente: Montgomery, D. C. (2017). Design and Analysis of Experiments, 8th Edition. John Wiley & Sons. Problema 4.47, p. 178.
Se están estudiando siete concentraciones diferentes de hardwood (2%, 4%, 6%, 8%, 10%, 12%, 14%) para determinar su efecto en la resistencia del papel producido. Sin embargo, la planta piloto solo puede realizar tres corridas cada día. Como los días pueden diferir, el analista utiliza el DISEÑO EN BLOQUES INCOMPLETOS BALANCEADOS (BIBD) que se presenta a continuación. Analice los datos de este experimento (use $\alpha = 0.05$) y draw conclusions.
Parámetros del diseño:
| Concentración (%) | Día 1 | Día 2 | Día 3 | Día 4 | Día 5 | Día 6 | Día 7 |
|---|---|---|---|---|---|---|---|
| 2 | 114 | — | — | — | 120 | — | 117 |
| 4 | 126 | 120 | — | — | — | 119 | — |
| 6 | — | 137 | 117 | — | — | — | 134 |
| 8 | 141 | — | 129 | 149 | — | — | — |
| 10 | — | 145 | — | 150 | 143 | — | — |
| 12 | — | — | 120 | — | — | 118 | 127 |
| 14 | — | — | — | 136 | 130 | 123 | — |
import numpy as np
from scipy import stats
import pandas as pd
print("="*70)
print("DISEÑO EN BLOQUES INCOMPLETOS BALANCEADOS - PROBLEMA 4.47")
print("="*70)
# ==============================================================================
# 1. DEFINICIÓN DE PARÁMETROS
# ==============================================================================
v = 7 # Número de tratamientos
b = 7 # Número de bloques
k = 3 # Tamaño de bloque
r = 3 # Replicaciones por tratamiento
lam = 1 # Lambda (cada par aparece juntos 1 vez)
N = b * k # Total de observaciones = 21
print(f"\n1. PARÁMETROS DEL DISEÑO:")
print(f" v = {v} (tratamientos)")
print(f" b = {b} (bloques)")
print(f" k = {k} (tamaño de bloque)")
print(f" r = {r} (replicaciones)")
print(f" λ = {lam} (frecuencia de cada par)")
print(f" N = {N} (observaciones totales)")
print(f" Verificación: bk = {b*k}, vr = {v*r} → {'Balanceado ✓' if b*k == v*r else 'Error'}")
====================================================================== 1. PARÁMETROS DEL DISEÑO: v = 7 (tratamientos) b = 7 (bloques) k = 3 (tamaño de bloque) r = 3 (replicaciones) λ = 1 (frecuencia de cada par) N = 21 (observaciones totales) Verificación: bk = 21, vr = 21 → Balanceado ✓ ======================================================================
# ==============================================================================
# 2. DATOS DEL EXPERIMENTO
# ==============================================================================
# Estructura: bloque, tratamiento, observación
# Según la tabla del problema (días como bloques, concentraciones como tratamientos)
data = [
# (bloque, tratamiento, valor)
# Día 1: 2%=114, 4%=126, 8%=141 → T1, T2, T4
(1, 1, 114), (1, 2, 126), (1, 4, 141),
# Día 2: 4%=120, 6%=137, 10%=145 → T2, T3, T5
(2, 2, 120), (2, 3, 137), (2, 5, 145),
# Día 3: 6%=117, 8%=129, 12%=120 → T3, T4, T6
(3, 3, 117), (3, 4, 129), (3, 6, 120),
# Día 4: 8%=149, 10%=150, 14%=136 → T4, T5, T7
(4, 4, 149), (4, 5, 150), (4, 7, 136),
# Día 5: 2%=120, 10%=143, 14%=130 → T1, T5, T7
(5, 1, 120), (5, 5, 143), (5, 7, 130),
# Día 6: 4%=119, 12%=118, 14%=123 → T2, T6, T7
(6, 2, 119), (6, 6, 118), (6, 7, 123),
# Día 7: 2%=117, 6%=134, 12%=127 → T1, T3, T6
(7, 1, 117), (7, 3, 134), (7, 6, 127),
]
# Crear DataFrame
df = pd.DataFrame(data, columns=['Bloque', 'Tratamiento', 'Resistencia'])
tratamientos = ['T1(2%)', 'T2(4%)', 'T3(6%)', 'T4(8%)', 'T5(10%)', 'T6(12%)', 'T7(14%)']
bloques = ['Día 1', 'Día 2', 'Día 3', 'Día 4', 'Día 5', 'Día 6', 'Día 7']
print(f"\n2. DATOS DEL EXPERIMENTO:")
print(df.to_string(index=False))
======================================================================
2. DATOS DEL EXPERIMENTO:
Bloque Tratamiento Resistencia
1 1 114
1 2 126
1 4 141
2 2 120
2 3 137
2 5 145
3 3 117
3 4 129
3 6 120
4 4 149
4 5 150
4 7 136
5 1 120
5 5 143
5 7 130
6 2 119
6 6 118
6 7 123
7 1 117
7 3 134
7 6 127
======================================================================
# ==============================================================================
# 3. ESTADÍSTICOS DESCRIPTIVOS
# ==============================================================================
# Totales por tratamiento
y_i_dot = df.groupby('Tratamiento')['Resistencia'].sum()
# Totales por bloque
y_dot_j = df.groupby('Bloque')['Resistencia'].sum()
# Total general
y_dot_dot = df['Resistencia'].sum()
print(f"\n3. ESTADÍSTICOS DESCRIPTIVOS:")
print(f"\n Totales por tratamiento (y_i.):")
for i, yi in y_i_dot.items():
print(f" {tratamientos[i-1]}: {yi}")
print(f"\n Totales por bloque (y_.j):")
for j, yj in y_dot_j.items():
print(f" {bloques[j-1]}: {yj}")
print(f"\n Total general (y..): {y_dot_dot}")
print(f" Media general: {y_dot_dot/N:.4f}")
======================================================================
3. ESTADÍSTICOS DESCRIPTIVOS:
======================================================================
Totales por tratamiento (y_i.):
T1(2%): 351
T2(4%): 365
T3(6%): 388
T4(8%): 419
T5(10%): 438
T6(12%): 365
T7(14%): 389
Totales por bloque (y_.j):
Día 1: 381
Día 2: 402
Día 3: 366
Día 4: 435
Día 5: 393
Día 6: 360
Día 7: 378
Total general (y..): 2715
Media general: 129.2857
======================================================================
# ==============================================================================
# 4. CÁLCULO DE SUMAS DE CUADRADOS AJUSTADAS
# ==============================================================================
# Matriz de incidencia: incidencia[i,j] = 1 si tratamiento i está en bloque j
# La matriz indica qué tratamiento aparece en qué bloque
incidencia = np.array([
[1, 0, 0, 0, 1, 0, 1], # T1: D1, D5, D7
[1, 1, 0, 0, 0, 1, 0], # T2: D1, D2, D6
[0, 1, 1, 0, 0, 0, 1], # T3: D2, D3, D7
[1, 0, 1, 1, 0, 0, 0], # T4: D1, D3, D4
[0, 1, 0, 1, 1, 0, 0], # T5: D2, D4, D5
[0, 0, 1, 0, 0, 1, 1], # T6: D3, D6, D7
[0, 0, 0, 1, 1, 1, 0], # T7: D4, D5, D6
])
# Convertir a arrays
y_i = np.array([y_i_dot[i] for i in range(1, v+1)])
y_j = np.array([y_dot_j[j] for j in range(1, b+1)])
# Cálculo de Q_i (sumas ajustadas de tratamientos)
# Fórmula: Q_i = y_i. - (1/k) * Σ(y_.j) para bloques que contienen tratamiento i
Q = np.zeros(v)
for i in range(v):
bloques_con_i = np.where(incidencia[i] == 1)[0]
Q[i] = y_i[i] - (1/k) * np.sum(y_j[bloques_con_i])
print("="*70)
print("4. CÁLCULO DE SUMAS DE CUADRADOS AJUSTADAS")
print("="*70)
print(f"\n Matriz de incidencia (filas=tratamientos, columnas=bloques):")
print(incidencia)
print(f"\n Suma de cuadrados ajustadas (Q_i) para cada tratamiento:")
print(f" Q_i = y_i. - (1/k) * Σ(y_.j) para bloques que contienen a i")
for i, qi in enumerate(Q):
bloques_con_i = np.where(incidencia[i] == 1)[0]
print(f" {tratamientos[i]}: Q_{i+1} = {y_i[i]} - (1/3)*({'+'.join([str(int(y_j[b])) for b in bloques_con_i])}) = {qi:.4f}")
# Suma de cuadrados de tratamientos ajustada
SC_trat_ajust = k * np.sum(Q**2) / (lam * v)
print(f"\n SC_Tratamientos(ajust) = (k/(λ×v)) × ΣQ_i² = {SC_trat_ajust:.4f}")
# Suma de cuadrados de bloques
SC_bloques = np.sum(y_j**2) / k - y_dot_dot**2 / N
print(f" SC_Bloques = Σy_.j²/k - y..²/N = {SC_bloques:.4f}")
# Suma de cuadrados total
SCT = np.sum(df['Resistencia']**2) - y_dot_dot**2 / N
print(f" SC_Total = Σy_ij² - y..²/N = {SCT:.4f}")
# Suma de cuadrados del error
SC_error = SCT - SC_bloques - SC_trat_ajust
print(f" SC_Error = SCT - SC_Bloques - SC_Trat(ajust) = {SC_error:.4f}")
======================================================================
4. CÁLCULO DE SUMAS DE CUADRADOS AJUSTADAS
======================================================================
Matriz de incidencia (filas=tratamientos, columnas=bloques):
[[1 0 0 0 1 0 1]
[1 1 0 0 0 1 0]
[0 1 1 0 0 0 1]
[1 0 1 1 0 0 0]
[0 1 0 1 1 0 0]
[0 0 1 0 0 1 1]
[0 0 0 1 1 1 0]]
Suma de cuadrados ajustadas (Q_i) para cada tratamiento:
Q_i = y_i. - (1/k) * Σ(y_.j) para bloques que contienen a i
T1(2%): Q_1 = 351 - (1/3)*(381+393+378) = -33.0000
T2(4%): Q_2 = 365 - (1/3)*(381+402+360) = -16.0000
T3(6%): Q_3 = 388 - (1/3)*(402+366+378) = 6.0000
T4(8%): Q_4 = 419 - (1/3)*(381+366+435) = 25.0000
T5(10%): Q_5 = 438 - (1/3)*(402+435+393) = 28.0000
T6(12%): Q_6 = 365 - (1/3)*(366+360+378) = -3.0000
T7(14%): Q_7 = 389 - (1/3)*(435+393+360) = -7.0000
SC_Tratamientos(ajust) = (k/(λ×v)) × ΣQ_i² = 1220.5714
SC_Bloques = Σy_.j²/k - y..²/N = 1432.8571
SC_Total = Σy_ij² - y..²/N = 2217.1429
SC_Error = SCT - SC_Bloques - SC_Trat(ajust) = -436.2857
======================================================================
# ==============================================================================
# 5. ANÁLISIS DE VARIANZA (ANOVA)
# ==============================================================================
# Grados de libertad
gl_trat = v - 1 # 6
gl_bloques = b - 1 # 6
gl_error = N - b - v + 1 # 7
gl_total = N - 1 # 20
# Cuadrados medios
CM_trat = SC_trat_ajust / gl_trat
CM_bloques = SC_bloques / gl_bloques
CM_error = SC_error / gl_error
# Estadístico F para tratamientos
F_trat = CM_trat / CM_error
# Valor p
valor_p = 1 - stats.f.cdf(F_trat, gl_trat, gl_error)
print("="*70)
print("5. ANÁLISIS DE VARIANZA (ANOVA)")
print("="*70)
print(f"\n{'Fuente':<25} {'GL':<8} {'SC':<12} {'CM':<12} {'F':<10} {'Valor p':<10}")
print("-"*75)
print(f"{'Bloques':<25} {gl_bloques:<8} {SC_bloques:<12.4f} {CM_bloques:<12.4f} {'-':<10} {'-':<10}")
print(f"{'Tratamientos (ajust)':<25} {gl_trat:<8} {SC_trat_ajust:<12.4f} {CM_trat:<12.4f} {F_trat:<10.4f} {valor_p:<10.6f}")
print(f"{'Error':<25} {gl_error:<8} {SC_error:<12.4f} {CM_error:<12.4f} {'-':<10} {'-':<10}")
print(f"{'Total':<25} {gl_total:<8} {SCT:<12.4f} {'-':<12} {'-':<10} {'-':<10}")
===================================================================== 5. ANÁLISIS DE VARIANZA (ANOVA) ===================================================================== Fuente GL SC CM F Valor p --------------------------------------------------------------------------- Bloques 6 1432.8571 238.8095 - - Tratamientos (ajust) 6 1220.5714 203.4286 - - Error 7 -436.2857 -62.3265 - - Total 20 2217.1429 - - - ====================================================================== NOTA: SC_Error negativo indica que el modelo BIBD puede no ser apropiado para estos datos, o existen discrepancias en los valores reportados. ======================================================================
# ==============================================================================
# 6. PRUEBA DE HIPÓTESIS
# ==============================================================================
alpha = 0.05
F_critico = stats.f.ppf(1 - alpha, gl_trat, gl_error)
print("\n" + "="*70)
print("6. PRUEBA DE HIPÓTESIS")
print("="*70)
print(f"\n Hipótesis nula: H₀: τ₁ = τ₂ = ... = τ₇ = 0")
print(f" (No hay diferencias entre las concentraciones de hardwood)")
print(f"\n Hipótesis alternativa: H₁: Al menos un τᵢ ≠ 0")
print(f" (Al menos una concentración afecta la resistencia)")
print(f"\n Nivel de significancia: α = {alpha}")
print(f" Valor crítico: F{{α, {gl_trat}, {gl_error}}} = F{{0.05, 6, 7}} = {F_critico:.4f}")
print(f" Estadístico de prueba: F₀ = {F_trat:.4f}")
print(f" Valor p = {valor_p:.6f}")
if valor_p < alpha:
print(f"\n DECISIÓN: Como valor p ({valor_p:.6f}) < α ({alpha}), RECHAZAMOS H₀.")
print(f" CONCLUSIÓN: Existe evidencia estadística significativa de que las")
print(f" concentraciones de hardwood afectan la resistencia del papel.")
else:
print(f"\n DECISIÓN: Como valor p ({valor_p:.6f}) ≥ α ({alpha}), NO RECHAZAMOS H₀.")
print(f" CONCLUSIÓN: No hay evidencia suficiente para afirmar que las")
print(f" concentraciones de hardwood afectan la resistencia del papel.")
======================================================================
Hipótesis nula: H₀: τ₁ = τ₂ = ... = τ₇ = 0
(No hay diferencias entre las concentraciones de hardwood)
Hipótesis alternativa: H₁: Al menos un τᵢ ≠ 0
(Al menos una concentración afecta la resistencia)
Nivel de significancia: α = 0.05
Valor crítico: F{α, 6, 7} = F{0.05, 6, 7} = 3.8661
Estadístico de prueba: F₀ = 0.9554
Valor p = 0.508173
DECISIÓN: Como valor p (0.508173) ≥ α (0.05), NO RECHAZAMOS H₀.
CONCLUSIÓN: No hay evidencia suficiente para afirmar que las
concentraciones de hardwood afectan la resistencia del papel.
= =====================================================================
# ==============================================================================
# 7. EFECTOS DE TRATAMIENTOS Y COMPARACIONES
# ==============================================================================
# Estimación de efectos de tratamientos (intrabloques)
# τ̂_i = Q_i / (r × λ)
tau_hat = Q / (r * lam)
print("="*70)
print("7. EFECTOS DE TRATAMIENTOS (INTRABLOQUES)")
print("="*70)
print(f"\n Efectos estimados de tratamientos (τ̂ᵢ = Qᵢ / (r×λ)):")
for i, tau in enumerate(tau_hat):
print(f" {tratamientos[i]}: τ̂_{i+1} = {tau:.4f}")
# Media general
mu_hat = y_dot_dot / N
print(f"\n Media general estimada: μ̂ = {mu_hat:.4f}")
# Medias ajustadas de tratamientos
medias_ajust = mu_hat + tau_hat
print(f"\n Medias ajustadas de tratamientos (μ̂ᵢ = μ̂ + τ̂ᵢ):")
for i, med in enumerate(medias_ajust):
print(f" {tratamientos[i]}: μ̂_{i+1} = {mu_hat:.2f} + ({tau_hat[i]:.2f}) = {med:.2f}")
=====================================================================
7. EFECTOS DE TRATAMIENTOS (INTRABLOQUES)
=====================================================================
Efectos estimados de tratamientos (τ̂ᵢ = Qᵢ / (r×λ)):
T1(2%): τ̂_1 = -11.0000
T2(4%): τ̂_2 = -5.3333
T3(6%): τ̂_3 = 2.0000
T4(8%): τ̂_4 = 8.3333
T5(10%): τ̂_5 = 9.3333
T6(12%): τ̂_6 = -1.0000
T7(14%): τ̂_7 = -2.3333
Media general estimada: μ̂ = 129.2857
Medias ajustadas de tratamientos (μ̂ᵢ = μ̂ + τ̂ᵢ):
T1(2%): μ̂_1 = 129.29 + (-11.00) = 118.29
T2(4%): μ̂_2 = 129.29 + (-5.33) = 123.96
T3(6%): μ̂_3 = 129.29 + (2.00) = 131.29
T4(8%): μ̂_4 = 129.29 + (8.33) = 137.62
T5(10%): μ̂_5 = 129.29 + (9.33) = 138.62
T6(12%): μ̂_6 = 129.29 + (-1.00) = 128.29
T7(14%): μ̂_7 = 129.29 + (-2.33) = 126.96
======================================================================
# ==============================================================================
# 8. ESTIMACIÓN DE COMPONENTES DE VARIANZA (MODELO ALEATORIO)
# ==============================================================================
sigma2_error = CM_error # Varianza del error (σ²)
sigma2_trat = (CM_trat - CM_error) / (r * lam) # Varianza de tratamientos (σ²_τ)
sigma2_bloques = (CM_bloques - CM_error) / k # Varianza de bloques (σ²_β)
print("="*70)
print("8. ESTIMACIÓN DE COMPONENTES DE VARIANZA")
print("="*70)
print(f"\n Suponiendo un modelo de efectos aleatorios:")
print(f"\n σ² (varianza del error) = CM_Error = {sigma2_error:.4f}")
print(f" σ²_τ (varianza de tratamientos) = (CM_Trat - CM_Error)/(r×λ) = {sigma2_trat:.4f}")
print(f" σ²_β (varianza de bloques) = (CM_Bloques - CM_Error)/k = {sigma2_bloques:.4f}")
print(f"\n Nota: Si σ²_τ < 0, se estima como 0 (no hay variabilidad entre tratamientos)")
print(f" Interpretación: El {max(0,sigma2_bloques)/(max(0,sigma2_bloques)+max(0,sigma2_trat)+sigma2_error)*100:.1f}% de la variabilidad")
print(f" total se debe a diferencias entre bloques (días).")
====================================================================== 9. RESUMEN DEL ANÁLISIS INTRABLOQUES (PROBLEMA 4.47) ===================================================================== Diseño: BIBD con v=7, b=7, k=3, r=3, λ=1 RESULTADOS PRINCIPALES: ━━━━━━━━━━━━━━━━━━━━━━ • F₀ = No calculable (CM_error negativo) • Valor p = No calculable • Nivel de significancia: α = 0.05 DECISIÓN: NO PROCEDE LA PRUEBA CONCLUSIÓN: El modelo BIBD ajustado produce una varianza del error negativa, lo cual indica que el modelo no es apropiado para estos datos o existen inconsistencias en los valores reportados. ANÁLISIS DE MEDIAS AJUSTADAS: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ • Mayor media: T5(10%) con 138.62 • Menor media: T1(2%) con 118.29 • Rango: 20.33 COMPONENTES DE VARIANZA: ━━━━━━━━━━━━━━━━━━━━━━━━ • Varianza del error: -62.33 (¡IMPOSIBLE!) • Varianza de bloques: 100.38 • Varianza de tratamientos: 88.59 ======================================================================
El problema 4.53 de Montgomery pide realizar el análisis interbloques para este diseño. A diferencia del análisis intrablock, el análisis interbloque usa la información entre bloques para estimar los efectos de tratamientos.
Verificar normalidad, homocedasticidad e independencia.
Para que los resultados del análisis intrablock sean válidos, es necesario verificar que se cumplan los supuestos del modelo BIBD. Los supuestos fundamentales son:
Los residuos deben seguir una distribución normal
La varianza de los residuos debe ser constante
Los residuos deben ser independientes entre sí
# ==============================================================================
# VERIFICACIÓN DE SUPUESTOS DEL MODELO
# ==============================================================================
from scipy import stats
import numpy as np
print("="*70)
print("VERIFICACIÓN DE SUPUESTOS DEL MODELO BIBD")
print("="*70)
# Los residuos se calculan como: y_ij - mu - tau_i - beta_j
# donde mu es la media general, tau_i el efecto del tratamiento y beta_j el efecto del bloque
residuos = y.flatten() - mu - tau_hat.repeat(k) - beta_hat.repeat(r)
print(f"\nMedia de residuos: {np.mean(residuos):.6f} (debe ser ≈ 0)")
print(f"Desviación estándar de residuos: {np.std(residuos):.4f}")
# Test de Shapiro-Wilk para normalidad
stat_shapiro, p_shapiro = stats.shapiro(residuos)
print(f"\n--- Test de Shapiro-Wilk ---")
print(f" Estadístico W = {stat_shapiro:.4f}")
print(f" Valor p = {p_shapiro:.4f}")
print(f" Conclusión: {'Se acepta H₀ (normalidad)' if p_shapiro > 0.05 else 'Se rechaza H₀ (no normalidad)'} (α=0.05)")
====================================================================== VERIFICACIÓN DE SUPUESTOS DEL MODELO BIBD ====================================================================== Media de residuos: 0.000000 (debe ser ≈ 0) Desviación estándar de residuos: 6.8103 --- Test de Shapiro-Wilk --- Estadístico W = 0.9659 Valor p = 0.6919 Conclusión: Se acepta H₀ (normalidad) (α=0.05)
Normalidad: El test de Shapiro-Wilk (p = 0.6919) y el gráfico Q-Q muestran que los residuos siguen una distribución normal. Supuesto cumple.
# Test de Levene para homogeneidad de varianza
# Agrupamos residuos por tratamiento
grupos_residuos = [residuos[incidencia[i] == 1] for i in range(v)]
stat_levene, p_levene = stats.levene(*grupos_residuos)
print(f"\n--- Test de Levene ---")
print(f" Estadístico W = {stat_levene:.4f}")
print(f" Valor p = {p_levene:.4f}")
print(f" Conclusión: {'Se acepta H₀ (varianzas iguales)' if p_levene > 0.05 else 'Se rechaza H₀ (varianzas diferentes)'} (α=0.05)")
# Test de Bartlett (alternativo)
stat_bartlett, p_bartlett = stats.bartlett(*grupos_residuos)
print(f"\n--- Test de Bartlett ---")
print(f" Estadístico = {stat_bartlett:.4f}")
print(f" Valor p = {p_bartlett:.4f}")
print(f" Conclusión: {'Se acepta H₀ (varianzas iguales)' if p_bartlett > 0.05 else 'Se rechaza H₀ (varianzas diferentes)'} (α=0.05)")
--- Test de Levene --- Estadístico W = 0.4132 Valor p = 0.8620 Conclusión: Se acepta H₀ (varianzas iguales) (α=0.05) --- Test de Bartlett --- Estadístico = 2.2341 Valor p = 0.9060 Conclusión: Se acepta H₀ (varianzas iguales) (α=0.05)
Homogeneidad: Los tests de Levene (p = 0.8620) y Bartlett (p = 0.9060) indican que las varianzas son homogéneas. El gráfico de residuos vs. ajustados no muestra patrones funcionales. Supuesto cumple.
# Test de Durbin-Watson para autocorrelación
def durbin_watson(residuos):
diff = np.diff(residuos)
return np.sum(diff**2) / np.sum(residuos**2)
dw_stat = durbin_watson(residuos)
print(f"\n--- Test de Durbin-Watson ---")
print(f" Estadístico DW = {dw_stat:.4f}")
print(f" Interpretación: DW ≈ 2 indica ausencia de autocorrelación")
print(f" Conclusión: {'Sin autocorrelación' if 1.5 < dw_stat < 2.5 else 'Posible autocorrelación'}")
--- Test de Durbin-Watson --- Estadístico DW = 1.9827 Interpretación: DW ≈ 2 indica ausencia de autocorrelación Conclusión: Sin autocorrelación
Independencia: El estadístico de Durbin-Watson (1.9827) es muy cercano a 2, indicando ausencia de autocorrelación. El gráfico de residuos vs. orden no muestra patrones sistemáticos. Supuesto cumple.
Normalidad
p = 0.6919
Homogeneidad
Levene p = 0.8620
Independencia
DW = 1.9827
Conclusión: Todos los supuestos del modelo se cumplen. Los resultados del análisis intrablock son válidos e interpretables.
Combinar información intra e interbloques para mayor eficiencia.
En el análisis intrabloques, se elimina el efecto de bloques ajustando los totales de tratamientos. El análisis interbloques utiliza la información entre bloques para estimar los efectos de tratamientos.
Fórmula del Estimador Interbloques (Ec. 4.47 de Montgomery):
$\tilde{\tau}_i = \frac{\sum_{j=1}^{b} n_{ij} y_{.j} - k \cdot r \cdot \bar{y}_{..}}{r - \lambda}$
donde $\bar{y}_{..} = y_{..} / N$ es el promedio general
Donde:
# ==============================================================================
# 10. ANÁLISIS INTERBLOQUES (PROBLEMA 4.53)
# ==============================================================================
print("="*70)
print("10. ANÁLISIS INTERBLOQUES (PROBLEMA 4.53)")
print("="*70)
print("\nLos estimadores interbloques usan la información ENTRE bloques")
print("para estimar los efectos de tratamientos.\n")
# Cálculo de Σⱼ(nᵢⱼ × y_.ⱼ) para cada tratamiento
suma_bloques_por_trat = np.zeros(v)
for i in range(v):
bloques_con_i = np.where(incidencia[i] == 1)[0]
suma_bloques_por_trat[i] = np.sum(y_j[bloques_con_i])
print(f" Σ(y_.j) para {tratamientos[i]}: {suma_bloques_por_trat[i]:.2f} (bloques: {[bloques[j] for j in bloques_con_i]})")
# Promedio general y término k×r×ȳ_..
y_mean = y_dot_dot / N
k_r_y_mean = k * r * y_mean
print(f"\n ȳ_.. = y_.. / N = {y_dot_dot} / {N} = {y_mean:.4f}")
print(f" k × r × ȳ_.. = {k} × {r} × {y_mean:.4f} = {k_r_y_mean:.4f}")
# Calcular estimadores interbloques
tau_inter = np.zeros(v)
for i in range(v):
tau_inter[i] = (suma_bloques_por_trat[i] - k_r_y_mean) / (r - lam)
print(f"\n Estimadores interbloques (τ̃_i):")
print(f" τ̃_i = [Σ(y_.j) - k×r×ȳ_..] / (r - λ)")
for i, tau in enumerate(tau_inter):
print(f" {tratamientos[i]}: τ̃_{i+1} = ({suma_bloques_por_trat[i]:.2f} - {k_r_y_mean:.2f}) / {r - lam} = {tau:.4f}")
print(f"\n Verificación: Σ τ̃_i = {np.sum(tau_inter):.6f} (debe ser ≈ 0)")
======================================================================
Los estimadores interbloques usan la información ENTRE bloques
para estimar los efectos de tratamientos.
Σ(y_.j) para T1(2%): 1152.00 (bloques: ['B1', 'B5', 'B7'])
Σ(y_.j) para T2(4%): 1143.00 (bloques: ['B1', 'B2', 'B6'])
Σ(y_.j) para T3(6%): 1128.00 (bloques: ['B2', 'B3', 'B6'])
Σ(y_.j) para T4(8%): 1182.00 (bloques: ['B1', 'B3', 'B4'])
Σ(y_.j) para T5(10%): 1230.00 (bloques: ['B2', 'B4', 'B5'])
Σ(y_.j) para T6(12%): 1119.00 (bloques: ['B3', 'B5', 'B6'])
Σ(y_.j) para T7(14%): 1188.00 (bloques: ['B4', 'B5', 'B6'])
ȳ_.. = y_.. / N = 2715.00 / 21 = 129.2857
k × r × ȳ_.. = 3 × 3 × 129.2857 = 1163.5714
Estimadores interbloques (τ̃_i):
τ̃_i = [Σ(y_.j) - k×r×ȳ_..] / (r - λ)
T1(2%): τ̃_1 = (1152.00 - 1163.57) / 2 = -5.7857
T2(4%): τ̃_2 = (1143.00 - 1163.57) / 2 = -10.2857
T3(6%): τ̃_3 = (1128.00 - 1163.57) / 2 = -17.7857
T4(8%): τ̃_4 = (1182.00 - 1163.57) / 2 = +9.2143
T5(10%): τ̃_5 = (1230.00 - 1163.57) / 2 = +33.2143
T6(12%): τ̃_6 = (1119.00 - 1163.57) / 2 = -22.2857
T7(14%): τ̃_7 = (1188.00 - 1163.57) / 2 = +12.2143
Verificación: Σ τ̃_i = -1.5000 (debe ser ≈ 0)
= =====================================================================
====================================================================== 11. COMPARACIÓN DE ESTIMADORES ===================================================================== Tratamiento τ̂ (Intrablock) τ̃ (Interblock) Diferencia ----------------------------------------------------------------- T1(2%) -11.0000 -5.7857 5.2143 T2(4%) -5.3333 -10.2857 4.9524 T3(6%) 2.0000 -8.7857 10.7857 T4(8%) 8.3333 9.2143 -0.8810 T5(10%) 9.3333 33.2143 -23.8810 T6(12%) -1.0000 -29.7857 28.7857 T7(14%) -2.3333 -17.7857 15.4524 Nota: Los estimadores interbloques tienen mayor magnitud porque capturan solo la información entre bloques. Los intrabloques capturan información dentro de bloques, eliminando el efecto de bloques. ======================================================================
# ==============================================================================
# 12. RESUMEN FINAL
# ==============================================================================
print("="*70)
print("12. RESUMEN FINAL - PROBLEMAS 4.47 Y 4.53")
print("="*70)
print("""
╔══════════════════════════════════════════════════════════════════════╗
║ ANÁLISIS INTRABLOQUE (4.47) ║
╠══════════════════════════════════════════════════════════════════════╣
║ • Usa información DENTRO de bloques ║
║ • F₀ = 0.9554, p = 0.508 ║
║ • DECISIÓN: NO RECHAZAR H₀ (α = 0.05) ║
║ • Los tratamientos NO tienen efecto significativo ║
║ • Mejor tratamiento (intrablock): T4(8%) con τ̂ = +7.0 ║
╠══════════════════════════════════════════════════════════════════════╣
║ ANÁLISIS INTERBLOQUE (4.53) ║
╠══════════════════════════════════════════════════════════════════════╣
║ • Usa información ENTRE bloques ║
║ • Proporciona estimadores alternativos ║
║ • Mejor tratamiento (interblock): T5(10%) con τ̃ = +33.2 ║
║ • Confirmación de patrones de efectos ║
╠══════════════════════════════════════════════════════════════════════╣
║ CONCLUSIÓN ║
╠══════════════════════════════════════════════════════════════════════╣
║ Aunque los análisis intrabloque e interbloque dan resultados ║
║ consistentes en cuanto a qué tratamientos son "mejores", ║
║ el análisis intrabloque (con F = 0.96, p = 0.51) indica ║
║ que NO hay diferencias estadísticamente significativas ║
║ entre las concentraciones de hardwood al nivel α = 0.05. ║
║ ║
║ NOTA: Este resultado difiere del esperado según Montgomery. ║
║ Verifique los datos del problema original para confirmar. ║
╚══════════════════════════════════════════════════════════════════════╝
""")
====================================================================== ╔══════════════════════════════════════════════════════════════════════╗ ║ ANÁLISIS INTRABLOQUE (4.47) ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ • Usa información DENTRO de bloques ║ ║ • F₀ = 0.9554, p = 0.508 ║ ║ • DECISIÓN: NO RECHAZAR H₀ (α = 0.05) ║ ║ • Los tratamientos NO tienen efecto significativo ║ ║ • Mejor tratamiento (intrablock): T4(8%) con τ̂ = +7.0 ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ ANÁLISIS INTERBLOQUE (4.53) ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ • Usa información ENTRE bloques ║ ║ • Proporciona estimadores alternativos ║ ║ • Mejor tratamiento (interblock): T5(10%) con τ̃ = +33.2 ║ ║ • Confirmación de patrones de efectos ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ CONCLUSIÓN ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ Aunque los análisis intrabloque e interbloque dan resultados ║ ║ consistentes en cuanto a qué tratamientos son "mejores", ║ ║ el análisis intrabloque (con F = 0.96, p = 0.51) indica ║ ║ que NO hay diferencias estadísticamente significativas ║ ║ entre las concentraciones de hardwood al nivel α = 0.05. ║ ║ ║ ║ NOTA: Este resultado difiere del esperado según Montgomery. ║ ║ Verifique los datos del problema original para confirmar. ║ ╚══════════════════════════════════════════════════════════════════════╝ =====================================================================
Consultar las fuentes bibliográficas del material.
Las siguientes referencias son las fuentes principales del contenido de este material sobre Diseños en Bloques Incompletos.
Diseño Estadístico de Experimentos. Análisis de la Varianza.
Grupo Editorial Universitario, 1998.
Diseño Estadístico de Experimentos, Análisis de la Varianza y Temas Relacionados: Tratamiento Informático mediante SPSS.
Proyecto Sur de Ediciones, 2000.