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.
sp.oats <- read.csv2("C:/Users/CK0001/Desktop/ING.AGRONOMICA.UNAL/semestre 6/D.E/Tarea parcelas divididas/oats.csv", sep=";")
sp.oats <- within(sp.oats, nitroF <- factor(nitro))
head(sp.oats)
## observation replicate variety nitro yield nitroF
## 1 1 I Victory 0.0 111 0.0
## 2 2 I Victory 0.2 130 0.2
## 3 3 I Victory 0.4 157 0.4
## 4 4 I Victory 0.6 174 0.6
## 5 5 I Golden.rain 0.00 117 0.00
## 6 6 I Golden.rain 0.20 114 0.20
library(lattice) # Can only list one package at a time
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(sp.oats, xyplot(yield ~ nitroF | variety))

with(sp.oats, xyplot(yield ~ nitroF | variety, groups = replicate))

with(sp.oats, xyplot(yield ~ nitroF | variety, groups = replicate, aspect = "xy"))

with(sp.oats, xyplot(yield ~ nitroF | variety, groups = replicate, aspect = "xy",
type = "o"))

with(sp.oats, xyplot(yield ~ nitroF | variety, groups = replicate, 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.
res.bad <- lm(yield ~ variety * nitroF, data = sp.oats)
anova(res.bad)
## Analysis of Variance Table
##
## Response: yield
## Df Sum Sq Mean Sq F value Pr(>F)
## variety 2 1786.4 893.2 2.5289 0.08882 .
## nitroF 7 30184.7 4312.1 12.2088 2.348e-09 ***
## variety:nitroF 6 235.9 39.3 0.1113 0.99476
## Residuals 56 19779.0 353.2
## ---
## 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.
res.good2 <- aov(yield ~ variety * nitroF + replicate:variety, data = sp.oats)
summary(res.good2)
## Df Sum Sq Mean Sq F value Pr(>F)
## variety 2 1786 893 4.826 0.013 *
## nitroF 7 30185 4312 23.300 1.48e-12 ***
## variety:nitroF 6 236 39 0.212 0.971
## variety:replicate 14 12006 858 4.634 5.41e-05 ***
## Residuals 42 7773 185
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(res.good2, 1)

plot(res.good2, 2)
## Warning: not plotting observations with leverage one:
## 1, 2, 3, 4

plot(res.good2, 5)
## Warning: not plotting observations with leverage one:
## 1, 2, 3, 4

boxCox(res.good2)

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(sp.oats, HSD.test(yield, 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(sp.oats, HSD.test(yield, nitroF, DFerror = 45, MSerror = 117))
names(plot.stuff)
## [1] "statistics" "parameters" "means" "comparison" "groups"
plot.stuff$means
## yield std r Min Max Q25 Q50 Q75
## 0.0 111.00000 NA 1 111 111 111 111 111
## 0.00 77.52941 18.26238 17 53 117 63 70 89
## 0.2 130.00000 NA 1 130 130 130 130 130
## 0.20 97.05882 21.04599 17 64 140 82 91 108
## 0.4 157.00000 NA 1 157 157 157 157 157
## 0.40 111.70588 20.20138 17 81 161 97 112 121
## 0.6 174.00000 NA 1 174 174 174 174 174
## 0.60 120.41176 19.81180 17 86 156 104 121 133
plot.stuff$groups
## yield groups
## 0.6 174.00000 a
## 0.4 157.00000 a
## 0.2 130.00000 ab
## 0.60 120.41176 b
## 0.40 111.70588 b
## 0.0 111.00000 bc
## 0.20 97.05882 bc
## 0.00 77.52941 c
barplot2(plot.stuff$means[, 1])

# Add some lables
barplot2(plot.stuff$means[, 1], names.arg = rownames(plot.stuff$means), xlab = "Nitrogen",
ylab = "Yield per Acre")

# Add some error bars
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 = "Nitrogen",
ylab = "Yield per Acre", plot.ci = TRUE, ci.l = mu.i - se.i, ci.u = mu.i +
se.i)
# Group them together
text(bp, 0, plot.stuff$groups[,2], cex = 1, pos = 3)

# Is this correct?
plot.stuff$groups
## yield groups
## 0.6 174.00000 a
## 0.4 157.00000 a
## 0.2 130.00000 ab
## 0.60 120.41176 b
## 0.40 111.70588 b
## 0.0 111.00000 bc
## 0.20 97.05882 bc
## 0.00 77.52941 c
order(plot.stuff$groups[, 1])
## [1] 8 7 6 5 4 3 2 1
plot.stuff$groups[order(plot.stuff$groups[, 1]), 3]
## NULL
# This is better
bp <- barplot2(mu.i, names.arg = rownames(plot.stuff$means), xlab = "Nitrogen",
ylab = "Yield per 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[, 1]), 3], cex = 1, pos = 3)

# Sometimes it is easier to do it by hand
bp <- barplot2(mu.i, names.arg = rownames(plot.stuff$means), xlab = "Nitrogen",
ylab = "Yield per 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
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.
spp.rat <- read.csv("C:/Users/CK0001/Desktop/ING.AGRONOMICA.UNAL/semestre 6/D.E/Tarea parcelas divididas/split_split_rat.csv")
spp.rat
## glycogen food rat prep method
## 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
## 11 136 T1 Templeton P2 A
## 12 139 T1 Templeton P2 B
## 13 156 T1 Templeton P1 A
## 14 146 T1 Templeton P1 B
## 15 134 T1 Templeton P2 A
## 16 133 T1 Templeton P2 B
## 17 157 T2 Scabbers P1 A
## 18 145 T2 Scabbers P1 B
## 19 154 T2 Scabbers P2 A
## 20 142 T2 Scabbers P2 B
## 21 147 T2 Scabbers P1 A
## 22 153 T2 Scabbers P1 B
## 23 155 T2 Scabbers P2 A
## 24 157 T2 Scabbers P2 B
## 25 151 T2 Splinter P1 A
## 26 155 T2 Splinter P1 B
## 27 147 T2 Splinter P2 A
## 28 147 T2 Splinter P2 B
## 29 162 T2 Splinter P1 A
## 30 152 T2 Splinter P1 B
## 31 145 T2 Splinter P2 A
## 32 144 T2 Splinter P2 B
## 33 130 T3 Nicodemus P1 A
## 34 121 T3 Nicodemus P1 B
## 35 134 T3 Nicodemus P2 A
## 36 134 T3 Nicodemus P2 B
## 37 131 T3 Nicodemus P1 A
## 38 132 T3 Nicodemus P1 B
## 39 128 T3 Nicodemus P2 A
## 40 127 T3 Nicodemus P2 B
## 41 134 T3 Rizzo P1 A
## 42 136 T3 Rizzo P1 B
## 43 135 T3 Rizzo P2 A
## 44 134 T3 Rizzo P2 B
## 45 130 T3 Rizzo P1 A
## 46 123 T3 Rizzo P1 B
## 47 136 T3 Rizzo P2 A
## 48 133 T3 Rizzo P2 B
pre <- as.vector(spp.rat$prep)
met <- as.vector(spp.rat$method)
factor(met):factor(pre)
## [1] A:P1 B:P1 A:P2 B:P2 A:P1 B:P1 A:P2 B:P2 A:P1 B:P1 A:P2 B:P2 A:P1 B:P1 A:P2
## [16] B:P2 A:P1 B:P1 A:P2 B:P2 A:P1 B:P1 A:P2 B:P2 A:P1 B:P1 A:P2 B:P2 A:P1 B:P1
## [31] A:P2 B:P2 A:P1 B:P1 A:P2 B:P2 A:P1 B:P1 A:P2 B:P2 A:P1 B:P1 A:P2 B:P2 A:P1
## [46] B:P1 A:P2 B:P2
## Levels: A:P1 A:P2 B:P1 B:P2
X_Y <- xyplot(spp.rat$glycogen~(factor(met):factor(pre))| spp.rat$food, groups = spp.rat$rat, aspect = "xy");X_Y

Este es un diseño loco, pero sucede. El tratamiento, la preparación y el método tienen EM denominador diferente para su prueba f. ¿Y si lo hiciste mal?
fact.bad <- lm(glycogen ~ food * prep * method, data = spp.rat)
anova(fact.bad)
## 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