SIMULACIÓN Y OPTIMIZACIÓN DE PROCESOS 5º INGENIERÍA QUÍMICA CURSO 2004-05 ANÁLISIS DE DISEÑOS FACTORIALES EN BLOQUES Para generar un diseño factorial por bloques utilizamos el comando básico conf.design: d1 <- conf.design(c(1,1,1), 2, treatment.names=c("A","B","C")) d1 Blocks A B C 1 0 0 0 0 2 0 1 1 0 3 0 1 0 1 4 0 0 1 1 5 1 1 0 0 6 1 0 1 0 7 1 0 0 1 8 1 1 1 1 La especificación c(1,1,1) indica el efecto que se quiere confundir, en este caso ABC, luego se indica el número (común) de niveles de los factores (2) y finalmente los nombres de los factores. Vemos un diseño 23 completo repartido en dos bloques, los cuales quedan caracterizados por los dos valores de la variable Blocks. Por ejemplo, los tratamientos en el primer bloque serían (1), ab, ac y bc, etc. Observemos que el número de bloques viene determinado por el número de efectos confundidos. Por ejemplo, para obtener un diseño 24 completo en 4 bloques especificamos dos efectos de la siguiente manera: d2 <- conf.design(rbind(c(1,1,1,1),c(0,1,1,1)), 2, treatment.names=c("A","B","C","D")) d2 Blocks A B C D 1 00 0 0 0 0 2 00 0 1 1 0 3 00 0 1 0 1 4 00 0 0 1 1 5 01 1 1 0 0 6 01 1 0 1 0 7 01 1 0 0 1 8 01 1 1 1 1 9 10 1 0 0 0 10 10 1 1 1 0 11 10 1 1 0 1 12 10 1 0 1 1 13 11 0 1 0 0 14 11 0 0 1 0 15 11 0 0 0 1 1 16 11 0 1 1 1 Este diseño confunde ABCD y BCD con bloques. Existe la posibilidad de que al especificar los efectos confundidos hayamos incluido uno que en realidad no deseamos confundir. El comando conf.set ofrece todos los efectos confundidos (cargar la función de antemano si no se ha hecho ya): conf.set(rbind(c(1,1,1,1),c(0,1,1,1)), 2) [1,] [2,] [3,] [,1] [,2] [,3] [,4] 1 1 1 1 0 1 1 1 1 0 0 0 De nuevo este 2 es el número común de niveles. Vemos ahora como la interacción generalizada ABCD*BCD = A (un efecto principal) “se ha colado” como efecto confundido, luego el diseño obtenido en este caso no es muy útil. A veces deseamos replicar un factorial completo en bloques. En este caso, tenemos la opción de confundir efectos distintos en cada réplica. Por ejemplo, los siguientes comandos generan un diseño 23 replicado cuatro veces (utilizando ocho bloques en total, cada uno de tamaño 4) y confundiendo parcialmente los efectos ABC, AB, AC y BC respectivamente (cada réplica confunde uno de estos efectos): d3 <d4 <d5 <d6 <d3456 d3456 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 conf.design(c(1,1,1), conf.design(c(1,1,0), conf.design(c(1,0,1), conf.design(c(0,1,1), <- rjoin(d3,d4,d5,d6) 2, 2, 2, 2, treatment.names=c("A","B","C")) treatment.names=c("A","B","C")) treatment.names=c("A","B","C")) treatment.names=c("A","B","C")) Part Blocks A B C Part1 0 0 0 0 Part1 0 1 1 0 Part1 0 1 0 1 Part1 0 0 1 1 Part1 1 1 0 0 Part1 1 0 1 0 Part1 1 0 0 1 Part1 1 1 1 1 Part2 0 0 0 0 Part2 0 1 1 0 Part2 0 0 0 1 Part2 0 1 1 1 Part2 1 1 0 0 Part2 1 0 1 0 Part2 1 1 0 1 Part2 1 0 1 1 Part3 0 0 0 0 Part3 0 0 1 0 Part3 0 1 0 1 Part3 0 1 1 1 Part3 1 1 0 0 Part3 1 1 1 0 Part3 1 0 0 1 Part3 1 0 1 1 Part4 0 0 0 0 2 26 27 28 29 30 31 32 Part4 Part4 Part4 Part4 Part4 Part4 Part4 0 0 0 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 0 0 0 1 1 0 0 1 1 Alternativamente, podemos definir una variable bloque con 8 niveles: d3456$Blocks <- join(d3456$Part, d345$Blocks) d3456 Part 1 Part1 2 Part1 3 Part1 4 Part1 5 Part1 ... 32 Part4 Blocks Part1Part10 Part1Part10 Part1Part10 Part1Part10 Part1Part11 A 0 1 1 0 1 B 0 1 0 1 0 C 0 0 1 1 0 Part4Part11 1 0 1 Para analizar los datos obtenidos en este experimento, procedemos de la siguiente manera. Primero generamos un vector con los datos en el mismo orden que especifica d3456: y <- c(2208,2133,2459,3096,2196,2086,3356,2776, + 2004,2112,3073,2631,2179,2073,3474,3360, + 1916,2151,2979,2500,2189,2095,2839,3522, + 2010,2056,3209,3066,1878,2156,3423,2524) Después invocamos el comando aov de esta manera: fm <- aov(y ~ A*B*C + Error(Blocks), data=d3456) summary(fm) Error: Blocks Df Sum Sq Mean Sq F value Pr(>F) A:B 1 200344 200344 15.5235 0.02914 * A:C 1 150975 150975 11.6982 0.04183 * B:C 1 16200 16200 1.2552 0.34416 A:B:C 1 33541 33541 2.5989 0.20533 Residuals 3 38718 12906 --Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1 Error: Within Df Sum Sq Mean Sq F value Pr(>F) A 1 224283 224283 3.9664 0.06273 . B 1 53 53 0.0009 0.97604 C 1 6886688 6886688 121.7890 3.584e-09 *** A:B 1 737 737 0.0130 0.91044 A:C 1 416067 416067 7.3580 0.01478 * B:C 1 2667 2667 0.0472 0.83066 A:B:C 1 70742 70742 1.2511 0.27891 Residuals 17 961283 56546 --Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1 3 Observamos aquí los siguientes puntos: La especificación del término de error en el comando aov hace uso de la variable Blocks. Primeramente se ofrece una tabla ANOVA correspondiente al efecto Bloques (que incorpora todos los efectos parcialmente confundidos). Hay 7 grados de libertad para diferencias entre bloques, de los cuales 4 están parcialmente confundidos (apareciendo justamente los efectos asociados) y 3 no están confundidos. Como la confusión es parcial, la significación de los efectos confundidos puede testarse (comparando con la fila del error/residuals de la forma usual). Esta es la información que ofrece la segunda tabla. Concretamente, se deduce que los efectos importantes son, en este orden: C, AC y A. Esta salida puede compararse con la obtenida en el caso de confusión total (quedándonos únicamente con la primera réplica): d3 <- conf.design(c(1,1,1), 2, treatment.names=c("A","B","C")) y <- c(2208,2133,2459,3096,2196,2086,3356,2776) fm <- aov(y ~ A*B*C + Error(Blocks), data=d3) summary(fm) Error: Blocks Df Sum Sq Mean Sq A:B:C 1 33541 33541 Error: Within Df Sum Sq Mean Sq A 1 174640 174640 B 1 2048 2048 C 1 1173512 1173512 A:B 1 50562 50562 A:C 1 195938 195938 B:C 1 7320 7320 En este caso, el efecto confundido ABC no se lista en la segunda tabla (es imposible distinguirlo de Blocks en este caso). Tampoco hay término de error (se trata de una única réplica), pero las sumas de cuadrados ofrecidas permiten valorar los efectos importantes: de nuevo (¡claro!) C, AC y A por este orden. Por último, imaginemos dos réplicas confundiendo en ambas ABC; usamos los datos reales de la segunda réplica pero pretendiendo que se hizo con la misma estructura que la primera réplica (con lo cual los resultados son ya ficticios, pero ilustran el tipo de salida que se obtiene en este caso): d3 <- conf.design(c(1,1,1), 2, treatment.names=c("A","B","C")) d4 <- conf.design(c(1,1,1), 2, treatment.names=c("A","B","C")) d34 <- rjoin(d3,d4) d34$Blocks <- join(d34$Part, d34$Blocks) y <- c(2208,2133,2459,3096,2196,2086,3356,2776, + 2004,2112,3073,2631,2179,2073,3474,3360) fm <- aov(y ~ A*B*C + Error(Blocks), data=d34) summary(fm) 4 Error: Blocks Df Sum Sq Mean Sq F value Pr(>F) A:B:C 1 198916 198916 6.9588 0.1187 Residuals 2 57170 28585 Error: Within Df Sum Sq Mean Sq F value Pr(>F) A 1 25600 25600 0.3505 0.57543 B 1 29070 29070 0.3981 0.55136 C 1 3270672 3270672 44.7845 0.00054 *** A:B 1 166056 166056 2.2738 0.18231 A:C 1 80940 80940 1.1083 0.33299 B:C 1 6241 6241 0.0855 0.77988 Residuals 6 438188 73031 Como ABC está totalmente confundido, sólo aparece en la primera tabla. En cambio, ahora en la segunda tabla hay término de error, y se puede testar la significación de los demás efectos… 5