Diseño de parcelas divididas

El diseño tradicional de parcela dividida es, desde el punto de vista del análisis estadístico, similar al diseño de medidas repetidas de dos factores de la semana pasada. El diseño consta de bloques (o parcelas enteras) en los que se aplica un factor (el factor de parcela completa) al azar. Dentro de cada parcela / bloque completo, se divide en unidades más pequeñas y los niveles del segundo factor se aplican aleatoriamente a las partes más pequeñas de toda la parcela. La clave es que la unidad experimental es diferente para cada factor.

Ejemplo de Avena

En este ejemplo, se plantan campos enteros con uno de los tres tipos de avena. Estas son las parcelas completas, de las cuales hay 18. Cada parcela completa se divide en cuatro parcelas divididas, a cada una de las cuales se le asignó aleatoriamente uno de los cuatro niveles de nitrógeno. Se determinó el rendimiento (en bushels / acre) de avena. Son de interés las diferencias en la variedad de avena y los niveles de nitrógeno.

library(readr)
avena <- read_csv("C:/Users/Pablo/Downloads/avena.csv")
## Parsed with column specification:
## cols(
##   observacion = col_double(),
##   replica = col_character(),
##   variedad = col_character(),
##   nitro = col_character(),
##   rendimiento = col_double()
## )
avena <- within(avena, nitroF <- factor(nitro))
head(avena)
## # A tibble: 6 x 6
##   observacion replica variedad    nitro  rendimiento nitroF
##         <dbl> <chr>   <chr>       <chr>        <dbl> <fct> 
## 1           1 I       Victory     0.0cwt         111 0.0cwt
## 2           2 I       Victory     0.2cwt         130 0.2cwt
## 3           3 I       Victory     0.4cwt         157 0.4cwt
## 4           4 I       Victory     0.6cwt         174 0.6cwt
## 5           5 I       Golden.rain 0.0cwt         117 0.0cwt
## 6           6 I       Golden.rain 0.2cwt         114 0.2cwt
library(lattice)  # Solo puede enumerar un paquete a la vez
library(car)
## Warning: package 'car' was built under R version 4.0.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.0.3
library(agricolae)
## Warning: package 'agricolae' was built under R version 4.0.3
with(avena, xyplot(rendimiento ~ nitroF | variedad))

with(avena, xyplot(rendimiento ~ nitroF | variedad, groups = replica))

with(avena, xyplot(rendimiento ~ nitroF | variedad, groups = replica, aspect = "xy"))

with(avena, xyplot(rendimiento ~ nitroF | variedad, groups = replica, aspect = "xy", 
    type = "o"))

with(avena, xyplot(rendimiento ~ nitroF | variedad, groups = replica, aspect = "xy", 
    type = "a"))

Si ignora el diseño experimental, obtendrá los siguientes resultados incorrectos. Tenga en cuenta que el error df es mayor, lo que facilita la detección de diferencias que realmente no existen.

respuesta_mala <- lm(rendimiento ~ variedad * nitroF, data = avena)
anova(respuesta_mala)
## Analysis of Variance Table
## 
## Response: rendimiento
##                 Df  Sum Sq Mean Sq F value    Pr(>F)    
## variedad         2  1786.4   893.2  1.7949    0.1750    
## nitroF           3 20020.5  6673.5 13.4108 8.367e-07 ***
## variedad:nitroF  6   321.7    53.6  0.1078    0.9952    
## Residuals       60 29857.3   497.6                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El análisis en R sigue el mismo patrón que la semana pasada. El factor de “variedad” solo tiene (18-1) gl total para usar cuando se prueban las diferencias en la variedad. Por lo tanto, necesitamos especificar correctamente el término de error para variedad. Cabe señalar que la forma del “Error (A: parcela completa)” puede cambiar dependiendo de la disposición de los datos. La clave es saber el gl correcto para que sepa tener los resultados correctos.

respuesta_buena <- aov(rendimiento ~ variedad * nitroF + Error(replica:variedad), data = avena)
## Warning in aov(rendimiento ~ variedad * nitroF + Error(replica:variedad), :
## Error() model is singular
summary(respuesta_buena)
## 
## Error: replica:variedad
##           Df Sum Sq Mean Sq F value Pr(>F)
## variedad   2   1786   893.2   0.612  0.555
## Residuals 15  21889  1459.2               
## 
## Error: Within
##                 Df Sum Sq Mean Sq F value   Pr(>F)    
## nitroF           3  20020    6673  37.686 2.46e-12 ***
## variedad:nitroF  6    322      54   0.303    0.932    
## Residuals       45   7969     177                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Para verificar las suposiciones, no es necesario utilizar el término de error. Puede agregar el término sin error, pero las pruebas F son incorrectas. Sin embargo, la verificación de suposiciones está bien.

respuesta_buena.2 <- aov(rendimiento ~ variedad * nitroF + replica:variedad, data = avena)
summary(respuesta_buena.2)
##                  Df Sum Sq Mean Sq F value   Pr(>F)    
## variedad          2   1786     893   5.044   0.0106 *  
## nitroF            3  20020    6673  37.686 2.46e-12 ***
## variedad:nitroF   6    322      54   0.303   0.9322    
## variedad:replica 15  21889    1459   8.240 1.61e-08 ***
## Residuals        45   7969     177                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(respuesta_buena.2, 1)

plot(respuesta_buena.2, 2)

 plot(respuesta_buena.2, 3)

plot(respuesta_buena.2, 4)

# plot(respuesta_buena.2, 5)
boxCox(respuesta_buena.2)

Dado que la gráfica de Box-Cox es buena, no es necesario realizar ninguna transformación. Aún necesita identificar qué niveles de nitrógeno son diferentes.

with(avena, HSD.test(rendimiento, nitroF, DFerror = 45, MSerror = 117))
library(gplots)
## Warning: package 'gplots' was built under R version 4.0.3
## 
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
## 
##     lowess
plot.stuff <- with(avena, HSD.test(rendimiento, nitroF, DFerror = 45, MSerror = 117))
names(plot.stuff)
## [1] "statistics" "parameters" "means"      "comparison" "groups"
plot.stuff$means
##        rendimiento      std  r Min Max    Q25   Q50    Q75
## 0.0cwt    79.38889 19.39417 18  53 117  63.25  72.0  94.25
## 0.2cwt    98.88889 21.84407 18  64 140  83.75  95.0 112.50
## 0.4cwt   114.22222 22.31738 18  81 161  97.75 115.0 124.75
## 0.6cwt   123.38889 22.99908 18  86 174 106.25 121.5 139.00
plot.stuff$groups
##        rendimiento groups
## 0.6cwt   123.38889      a
## 0.4cwt   114.22222      a
## 0.2cwt    98.88889      b
## 0.0cwt    79.38889      c
barplot2(plot.stuff$means[, 1])

barplot2(plot.stuff$means[, 1], names.arg = rownames(plot.stuff$means), xlab = "Nitrogeno", 
    ylab = "Rendimiento por Acre")

mu.i <- plot.stuff$means[, 1]
se.i <- qt(1 - 0.05/2, 45) * plot.stuff$means[, 2]
bp <- barplot2(mu.i, names.arg = rownames(plot.stuff$means), xlab = "Nitrogeno", 
    ylab = "Rendimiento por Acre", plot.ci = TRUE, ci.l = mu.i - se.i, ci.u = mu.i + 
        se.i)

 text(bp, 0, plot.stuff$groups[, 2], cex = 1, pos = 3)

Verificamos si es correcto esto:

plot.stuff$groups
##        rendimiento groups
## 0.6cwt   123.38889      a
## 0.4cwt   114.22222      a
## 0.2cwt    98.88889      b
## 0.0cwt    79.38889      c
order(plot.stuff$groups[, 1])
## [1] 4 3 2 1
plot.stuff$groups[order(plot.stuff$groups[, 1]), 3]
## NULL
bp <- barplot2(mu.i, names.arg = rownames(plot.stuff$means), xlab = "Nitrogeno", 
    ylab = "Rendimiento por Acre", plot.ci = TRUE, ci.l = mu.i - se.i, ci.u = mu.i + 
        se.i)
text(bp, 0, plot.stuff$groups[order(plot.stuff$groups[, 2]), 3], cex = 1, pos = 3)

bp <- barplot2(mu.i, names.arg = rownames(plot.stuff$means), xlab = "Nitrogeno", 
    ylab = "Rendimiento por Acre", plot.ci = TRUE, ci.l = mu.i - se.i, ci.u = mu.i + 
        se.i)
text(bp, 0, c("A", "B", "C", "C"), cex = 1, pos = 3)

Diseño de parcela dividida-dividida-dividida (Split-Split-Split Plot Design)

En este experimento, desea medir los efectos de tres factores sobre la cantidad de glucógeno en el hígado. En su experimento, hay 6 ratas (parcelas completas).

A cada rata, se le asignó al azar una de las tres dietas alimentarias (T1, T2 y T3).

De cada rata, se extrajo el hígado y se dividió en cuatro segmentos. Cada segmento se preparó utilizando uno de dos productos químicos diferentes (P1 y P2).

Finalmente, se midió el nivel de glucógeno de cada pedazo de hígado usando dos técnicas analíticas diferentes (A y B).

La unidad experimental de la dieta es la rata. La unidad experimental para la preparación química del hígado es una tira de hígado. La unidad experimental de la técnica analítica es un trozo de hígado. Todos son diferentes.

library(readr)
spp.rat <- read_csv("C:/Users/Pablo/Downloads/split_split_rat.csv")
## Parsed with column specification:
## cols(
##   glycogen = col_double(),
##   food = col_character(),
##   rat = col_character(),
##   prep = col_character(),
##   method = col_character()
## )
spp.rat
## # A tibble: 48 x 5
##    glycogen food  rat       prep  method
##       <dbl> <chr> <chr>     <chr> <chr> 
##  1      127 T1    Remy      P1    A     
##  2      126 T1    Remy      P1    B     
##  3      127 T1    Remy      P2    A     
##  4      121 T1    Remy      P2    B     
##  5      124 T1    Remy      P1    A     
##  6      125 T1    Remy      P1    B     
##  7      132 T1    Remy      P2    A     
##  8      138 T1    Remy      P2    B     
##  9      146 T1    Templeton P1    A     
## 10      144 T1    Templeton P1    B     
## # ... with 38 more rows
p<-as.vector(spp.rat$prep)
m<-as.vector(spp.rat$method)

xy <- xyplot(spp.rat$glycogen~(factor(m):factor(p))| spp.rat$food, groups = spp.rat$rat, aspect = "xy")
with(spp.rat, xy)

El tratamiento, la preparación y el método tienen EM denominador diferente para su prueba f.

¿Y si lo hiciste mal?

fact.malo <- lm(glycogen ~ food * prep * method, data = spp.rat)
anova(fact.malo)
## Analysis of Variance Table
## 
## Response: glycogen
##                  Df Sum Sq Mean Sq F value    Pr(>F)    
## food              2 3530.0 1765.02 32.2583 9.401e-09 ***
## prep              1   35.0   35.02  0.6401    0.4289    
## method            1   54.2   54.19  0.9904    0.3263    
## food:prep         2  133.3   66.65  1.2180    0.3077    
## food:method       2    5.4    2.69  0.0491    0.9521    
## prep:method       1   11.0   11.02  0.2014    0.6563    
## food:prep:method  2    5.3    2.65  0.0484    0.9529    
## Residuals        36 1969.7   54.72                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Primero, supongamos que se ignora el factor del método. Eso hace que este sea un diseño de parcela dividida.

sp.res <- aov(glycogen ~ food * prep + Error(rat/food), data = spp.rat)
## Warning in aov(glycogen ~ food * prep + Error(rat/food), data = spp.rat):
## Error() model is singular
summary(sp.res)
## 
## Error: rat
##           Df Sum Sq Mean Sq F value Pr(>F)  
## food       2   3530  1765.0    6.22 0.0856 .
## Residuals  3    851   283.8                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Error: Within
##           Df Sum Sq Mean Sq F value Pr(>F)
## prep       1   35.0   35.02   1.144  0.291
## food:prep  2  133.3   66.65   2.176  0.127
## Residuals 39 1194.3   30.62

Ahora agregue el método como una segunda división, por lo que ahora es un diseño de parcela dividida.

sp.res <- aov(glycogen ~ food * prep * method + Error(rat/food:prep), data = spp.rat)
## Warning in aov(glycogen ~ food * prep * method + Error(rat/food:prep), data =
## spp.rat): Error() model is singular
summary(sp.res)
## 
## Error: rat
##           Df Sum Sq Mean Sq F value Pr(>F)  
## food       2   3530  1765.0    6.22 0.0856 .
## Residuals  3    851   283.8                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Error: rat:food:prep
##           Df Sum Sq Mean Sq F value Pr(>F)
## prep       1   35.0   35.02   0.269  0.640
## food:prep  2  133.3   66.65   0.513  0.643
## Residuals  3  390.1  130.02               
## 
## Error: Within
##                  Df Sum Sq Mean Sq F value Pr(>F)
## method            1   54.2   54.19   2.232  0.146
## food:method       2    5.4    2.69   0.111  0.896
## prep:method       1   11.0   11.02   0.454  0.506
## food:prep:method  2    5.3    2.65   0.109  0.897
## Residuals        30  728.4   24.28