Primero, generamos los datos.

set.seed(123)

porc_germ = c(
  rnorm(40,60,6),
  rnorm(40,70,7),
  rnorm(40,80,8)
)

acido= gl(3, 40, 120, c("c0", "c1", "c2"))

datos = data.frame(acido,porc_germ)
head(datos)
table(datos$acido)
## 
## c0 c1 c2 
## 40 40 40
datos_des = datos[-c(50,111,120),]

table(datos_des$acido)
## 
## c0 c1 c2 
## 40 39 38

Hipótesis del modelo: Todas las medidas de los tratamientos son iguale.

\[H_0:\mu_{co} = \mu_{c1} = \mu_{c2}\]

Analisis de varianza balanceada.

mod1 = aov(porc_germ~acido, datos)
summary(mod1)
##              Df Sum Sq Mean Sq F value Pr(>F)    
## acido         2   7835    3918   98.15 <2e-16 ***
## Residuals   117   4670      40                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Conclusión.

mu=mean(datos$porc_germ)
boxplot(datos$porc_germ ~datos$acido)
abline(h=mu, lty=2, col="purple")

Análisis de varianza desbalanceada (con los datos desbalanceados).

mod2 = aov(porc_germ~acido, datos_des)
summary(mod2)
##              Df Sum Sq Mean Sq F value Pr(>F)    
## acido         2   7898    3949   98.39 <2e-16 ***
## Residuals   114   4576      40                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod3 = lm(porc_germ ~ acido, datos_des)
library(car)
## Warning: package 'car' was built under R version 4.2.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.2.3
library(carData)
mod3_res = Anova(mod3, type = 'II')
mod3_res

Conclusión.

Aplicación de bloques completos y generalizados.

set.seed(123)

porc_germ = c(
  rnorm(40, 60, 6),
  rnorm(40, 70, 7),
  rnorm(40, 80, 8)
)

bloq = gl(3, 40, 120, c('B0','B1','B2'))
acido = gl(4, 10, 120, c('C0','C1','C2','C3'))

datos = data.frame(acido, bloq, porc_germ)
# datos_des = datos[-c(50, 111, 120), ]
datos_des = datos [-sample(120, 5), ]
datos_des
table(datos_des$bloq, datos_des$acido)
##     
##      C0 C1 C2 C3
##   B0 10  8 10  9
##   B1 10 10 10 10
##   B2  9 10 10  9
mod1 = aov(porc_germ ~ bloq * acido,
           datos_des)
summary(mod1)
##              Df Sum Sq Mean Sq F value Pr(>F)    
## bloq          2   7478    3739  97.858 <2e-16 ***
## acido         3    238      79   2.073  0.108    
## bloq:acido    6    276      46   1.203  0.311    
## Residuals   103   3936      38                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod2 = lm(porc_germ ~ bloq * acido,
          datos_des)
mod2_res = Anova(mod2, type='II')
mod2_res

Ajustando debalanceado con diferente orden.

1.

mod3 = lm(porc_germ ~ bloq + acido+ bloq:acido, datos_des)
Anova(mod3, type='II')

2.

mod3 = lm(porc_germ ~ acido + bloq + bloq:acido, datos_des)
Anova(mod3, type='II')

3.

mod3 = lm(porc_germ ~ bloq:acido + acido + bloq, datos_des)
Anova(mod3, type='II')

4.

mod3 = lm(porc_germ ~ bloq:acido + bloq + acido, datos_des)
Anova(mod3, type='II')

Conclusión.

  1. El método apropiado para la construcción de modelos ANOVA.

  2. El método más potente cuando no hay interacción.

  3. La invariante al orden en que se introducen los efectos en el modelo ANOVA, también se menciona que, si no hay un efecto interactivo significativo, entonces el tipo II es más potente en este caso, la interacción entre bloques y ácido no es significativa.

Ahora con una covariable.

set.seed(123)

porc_germ = c(
  rnorm(40, 60, 6),
  rnorm(40, 70, 7),
  rnorm(40, 80, 8)
)
diam_med = sort(rnorm(120, 12, 1.3))

bloq = gl(3, 40, 120, c('B0','B1','B2'))
acido = gl(4, 10, 120, c('C0','C1','C2','C3'))

datos = data.frame(acido, bloq,
                   porc_germ, diam_med)
datos_des = datos
datos_des[sample(120, 5), 'porc_germ'] = NA

table(datos_des$bloq, datos_des$acido)
##     
##      C0 C1 C2 C3
##   B0 10 10 10 10
##   B1 10 10 10 10
##   B2 10 10 10 10

Análisis de covarianza.

mod1 = lm(porc_germ ~ diam_med + bloq+ acido+ bloq:acido, datos_des)
Anova(mod1, type='II')

Para tener la media del experimento cuando hay datos faltantes, en este caso, se van a ignorar los datos faltantes cuando se tiene uno.

tapply(datos_des$porc_germ,
       datos_des$acido,
       mean)
##       C0       C1       C2       C3 
## 70.96384       NA       NA       NA
tapply(datos_des$porc_germ,
       datos_des$acido,
       mean, na.rm=TRUE)
##       C0       C1       C2       C3 
## 70.96384 72.04659 68.44023 69.07068

Refencias.

-Langsrud, Øyvind. 2003. ANOVA for unbalanced data: Use type II instead of type III sums of squares. Statistics and Computing. volume 13. pages 163-167. doi = 10.1023/A:1023260610025