Diseño factorial simple completamente al azar desbalanceado

Se usa cuando alguno de los tratamientos no salió bien y tuvo que eliminarse. Para poder ejemplificar dicho diseño, se utiliza como variables a estudiar diferentes niveles de un ácido que se aplicaran a unas semillas y como, dependiendo del valor del primero, se afecta dicho porcentaje

# Creación de resultados aleatorios para el porcentaje de germinación 

set.seed(123)

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

# Factor ácido

acido<-gl(3,40,120,c('C0','C1','C2'))

# Tabla datos que incluye los diferentes niveles del factor y sus respectivos resultados 
datos<-data.frame(acido,porc_germ)

# Visualización de los datos iniciales de la tabla

head(datos)
##   acido porc_germ
## 1    C0  56.63715
## 2    C0  58.61894
## 3    C0  69.35225
## 4    C0  60.42305
## 5    C0  60.77573
## 6    C0  70.29039
table(datos$acido)
## 
## C0 C1 C2 
## 40 40 40
# Vamos a desbalancear el diseño; pordriamos decir que se dañaron tres bandejas de germinación

datos_des<-datos[-c(50,111,120), ]

table(datos_des$acido)
## 
## C0 C1 C2 
## 40 39 38

Analisis de varianza balanceado

Primero hacemos el ejercicio de análisis de varianza con los datos completos. Cabe resaltar que como solo estamos tratando con un factor, es pertinente usar el análisis de varianza para un solo factor, es decir ANOVA, el cual tiene como objetivo conocer si hay diferencias significativas entre los tratamientos en cuestión.

## ANOVA balanceado

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

Con base en un nivel de significancia del 5%, al revisar el p-valor de la variable grupal, es posible observar que esta es menor a dicho 5%, lo que rechazaría la hipótesis nula y por tanto, se podría considerar que el porcentaje de germinación si fue diferente significativamente entre los tres tratamientos

Análisis descriptivo

Para visualizar el comportamiento de los datos se realiza un boxplot

boxplot(datos$porc_germ~datos$acido)

Se observa que en términos de variabilidad todos los tratamientos presentan comportamientos similares, a excepción del tratamiento dos que tiene un dato atípico. Por otro lado, se observa claramente una tendencia de mejores porcentajes de germinación para el tratamiento tres por cuanto presenta los valores más altos.

Analisis de varianza desbalanceado

Ahora bien, con el fin de comparar el uso del mismo tipo de modelo de análisis balanceado, para datos que si estan completos con los que están desbalanceados, se aplica AOV con los datos desbalanceados creados en la primera parte de este cuaderno

#¿Qué pasaría si corro AOV con 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

Si bien el resultado obtenido concuerda con lo que se obtuvo con los datos balanceados, los diseños desbalanceados requieren un tratamiento especial, por tanto no se puede utilizar AOV En este caso utilizamos el siguiente modelo

# Haciendo el análisis correspondiente para datos desbalanceados 

mod3<-lm(porc_germ~acido,datos_des)

#Libreria que nos permite correr datos desbalanceados

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
Anova(mod3,type='II')
## Anova Table (Type II tests)
## 
## Response: porc_germ
##           Sum Sq  Df F value    Pr(>F)    
## acido     7898.3   2  98.392 < 2.2e-16 ***
## Residuals 4575.6 114                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Aparentemente al utilizar tanto el tipo de análisis para datos completos como el de datos desbalanceados, se obtienen los mismos resultados, pero ¿Porqué?, por que solamente tiene un factor, cuando se empieza a trabajar con más de un factor la historia podría ser diferente

Ahora con bloqueo

set.seed(123)

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


# Bloqueo

bloques<-gl(3, 40, 120, c('B0','B1','B2'))

# Factor

acido<-gl(4, 10, 120, c('C0','C1','C2','C3'))


datos<-data.frame(acido,bloques,porc_germ)


# Vamos a desbalancear el diseño; podriamos decir que se dañaron tres bandejas de germinación

#datos_des<-datos[-c(50,111,120),]

datos_des<-datos[-sample(120, 5),]
datos_des
##     acido bloques porc_germ
## 1      C0      B0  56.63715
## 2      C0      B0  58.61894
## 3      C0      B0  69.35225
## 4      C0      B0  60.42305
## 5      C0      B0  60.77573
## 6      C0      B0  70.29039
## 7      C0      B0  62.76550
## 8      C0      B0  52.40963
## 9      C0      B0  55.87888
## 10     C0      B0  57.32603
## 11     C1      B0  67.34449
## 12     C1      B0  62.15888
## 13     C1      B0  62.40463
## 15     C1      B0  56.66495
## 17     C1      B0  62.98710
## 18     C1      B0  48.20030
## 19     C1      B0  64.20814
## 20     C1      B0  57.16325
## 21     C2      B0  53.59306
## 22     C2      B0  58.69215
## 23     C2      B0  53.84397
## 24     C2      B0  55.62665
## 25     C2      B0  56.24976
## 26     C2      B0  49.87984
## 27     C2      B0  65.02672
## 28     C2      B0  60.92024
## 29     C2      B0  53.17118
## 30     C2      B0  67.52289
## 31     C3      B0  62.55879
## 32     C3      B0  58.22957
## 34     C3      B0  65.26880
## 35     C3      B0  64.92949
## 36     C3      B0  64.13184
## 37     C3      B0  63.32351
## 38     C3      B0  59.62853
## 39     C3      B0  58.16422
## 40     C3      B0  57.71717
## 41     C0      B1  65.13705
## 42     C0      B1  68.54458
## 43     C0      B1  61.14223
## 44     C0      B1  85.18269
## 45     C0      B1  78.45573
## 46     C0      B1  62.13824
## 47     C0      B1  67.17981
## 48     C0      B1  66.73341
## 49     C0      B1  75.45976
## 50     C0      B1  69.41642
## 51     C1      B1  71.77323
## 52     C1      B1  69.80017
## 53     C1      B1  69.69991
## 54     C1      B1  79.58022
## 55     C1      B1  68.41960
## 56     C1      B1  80.61529
## 57     C1      B1  59.15873
## 58     C1      B1  74.09230
## 59     C1      B1  70.86698
## 60     C1      B1  71.51159
## 61     C2      B1  72.65748
## 62     C2      B1  66.48374
## 63     C2      B1  67.66755
## 64     C2      B1  62.86997
## 65     C2      B1  62.49746
## 66     C2      B1  72.12470
## 67     C2      B1  73.13747
## 68     C2      B1  70.37103
## 69     C2      B1  76.45587
## 70     C2      B1  84.35059
## 71     C3      B1  66.56278
## 72     C3      B1  53.83582
## 73     C3      B1  77.04017
## 74     C3      B1  65.03559
## 75     C3      B1  65.18394
## 76     C3      B1  77.17900
## 77     C3      B1  68.00659
## 78     C3      B1  61.45498
## 79     C3      B1  71.26912
## 80     C3      B1  69.02776
## 81     C0      B2  80.04611
## 82     C0      B2  83.08224
## 83     C0      B2  77.03472
## 84     C0      B2  85.15501
## 85     C0      B2  78.23611
## 86     C0      B2  82.65426
## 88     C0      B2  83.48145
## 89     C0      B2  77.39255
## 90     C0      B2  89.19046
## 91     C1      B2  87.94803
## 92     C1      B2  84.38718
## 93     C1      B2  81.90985
## 94     C1      B2  74.97675
## 95     C1      B2  90.88522
## 96     C1      B2  75.19792
## 97     C1      B2  97.49866
## 98     C1      B2  92.26089
## 99     C1      B2  78.11440
## 100    C1      B2  71.78863
## 101    C2      B2  74.31675
## 102    C2      B2  82.05507
## 103    C2      B2  78.02646
## 104    C2      B2  77.21966
## 105    C2      B2  72.38705
## 106    C2      B2  79.63978
## 107    C2      B2  73.72076
## 108    C2      B2  66.65646
## 109    C2      B2  76.95819
## 110    C2      B2  87.35197
## 111    C3      B2  75.39722
## 112    C3      B2  84.86371
## 113    C3      B2  67.05694
## 114    C3      B2  79.55550
## 115    C3      B2  84.15526
## 116    C3      B2  82.40923
## 118    C3      B2  74.87435
## 119    C3      B2  73.20237
## 120    C3      B2  71.80697
table(datos_des$bloques,datos_des$acido)
##     
##      C0 C1 C2 C3
##   B0 10  8 10  9
##   B1 10 10 10 10
##   B2  9 10 10  9

Analisis de varianza desbalanceado

Primero hacemos un análisis de varianza AOV con los datos desbalanceados

mod1<-aov(porc_germ~bloques*acido,datos_des)

summary(mod1)
##                Df Sum Sq Mean Sq F value Pr(>F)    
## bloques         2   7478    3739  97.858 <2e-16 ***
## acido           3    238      79   2.073  0.108    
## bloques:acido   6    276      46   1.203  0.311    
## Residuals     103   3936      38                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

En este caso en particular se observa un p-value mayor al 5%, indicando que no hay diferencias significativas entre tratamientos (no se rechazó la H0)

Ahora toma lugar el análisis de varianza correspondiente a los datos desbalanceados

mod2<-lm(porc_germ ~ bloques*acido, 
         datos_des)

mod2_res<-Anova(mod2,type='II')

mod2_res
## Anova Table (Type II tests)
## 
## Response: porc_germ
##               Sum Sq  Df F value Pr(>F)    
## bloques       7399.0   2 96.8208 <2e-16 ***
## acido          237.7   3  2.0734 0.1083    
## bloques:acido  275.8   6  1.2030 0.3108    
## Residuals     3935.6 103                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Finalmente se obtiene un p-value también mayor al 5%, es decir, no hay diferencias significativas entre los tratamientos; no se rechaza la H0

Ajustando desbalanceado con diferentes ordenes

mod3<-lm(porc_germ~bloques+acido+bloques:acido,datos_des)
Anova(mod3,type = 'II')
## Anova Table (Type II tests)
## 
## Response: porc_germ
##               Sum Sq  Df F value Pr(>F)    
## bloques       7399.0   2 96.8208 <2e-16 ***
## acido          237.7   3  2.0734 0.1083    
## bloques:acido  275.8   6  1.2030 0.3108    
## Residuals     3935.6 103                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod3<-lm(porc_germ~acido+bloques+bloques:acido,datos_des)
Anova(mod3,type = 'II')
## Anova Table (Type II tests)
## 
## Response: porc_germ
##               Sum Sq  Df F value Pr(>F)    
## acido          237.7   3  2.0734 0.1083    
## bloques       7399.0   2 96.8208 <2e-16 ***
## acido:bloques  275.8   6  1.2030 0.3108    
## Residuals     3935.6 103                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod3<-lm(porc_germ~bloques:acido+acido+bloques,datos_des)
Anova(mod3,type = 'II')
## Anova Table (Type II tests)
## 
## Response: porc_germ
##               Sum Sq  Df F value Pr(>F)    
## acido          237.7   3  2.0734 0.1083    
## bloques       7399.0   2 96.8208 <2e-16 ***
## bloques:acido  275.8   6  1.2030 0.3108    
## Residuals     3935.6 103                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod3<-lm(porc_germ~bloques:acido+bloques+acido,datos_des)
Anova(mod3,type = 'II')
## Anova Table (Type II tests)
## 
## Response: porc_germ
##               Sum Sq  Df F value Pr(>F)    
## bloques       7399.0   2 96.8208 <2e-16 ***
## acido          237.7   3  2.0734 0.1083    
## bloques:acido  275.8   6  1.2030 0.3108    
## Residuals     3935.6 103                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

No cambian los resultados porque se deja fija la suma de cuadrados del tipo II. Langsrud, Ø. ANOVA for unbalanced data: Use Type II instead of Type III sums of squares. Statistics and Computing 13, 163–167 (2003). https://doi.org/10.1023/A:1023260610025

Trabajando con covariables→ Diámetro medio de la semilla

Diseño factorial simple en bloques completos generalizados y al azar. Desbalanceado y con la técnica de análisis de covarianza (ANCOVA)

set.seed(123)

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


#Covariable. Cabe recordar que para sacar el diametro medio de algo que no es circular se deben tomar varias medidas y se debe obtener el promedio geométrico, el cual es la raiz n(siendo n el número de medidas tomadas) de las multiplicaciones de las medidas

diam_med<-sort(rnorm(120,12,1.3))

# Bloqueo

bloques<-gl(3,40,120,c('B0','B1','B2'))

# Factor

acido<-gl(4,10,120,c('C0','C1','C2','C3'))


datos<-data.frame(acido,bloques,porc_germ,diam_med)


# Vamos a desbalancear el diseño; podriamos decir que se dañaron dos bandejas de germinación

datos_des<-datos[-sample(120,5),]
datos_des
##     acido bloques porc_germ  diam_med
## 1      C0      B0  56.63715  9.330779
## 2      C0      B0  58.61894  9.918003
## 3      C0      B0  69.35225  9.956213
## 4      C0      B0  60.42305 10.030932
## 5      C0      B0  60.77573 10.099718
## 6      C0      B0  70.29039 10.101168
## 7      C0      B0  62.76550 10.122939
## 8      C0      B0  52.40963 10.287879
## 9      C0      B0  55.87888 10.295958
## 10     C0      B0  57.32603 10.326860
## 11     C1      B0  67.34449 10.329870
## 12     C1      B0  62.15888 10.361798
## 13     C1      B0  62.40463 10.373347
## 14     C1      B0  60.66410 10.392845
## 15     C1      B0  56.66495 10.458876
## 17     C1      B0  62.98710 10.617676
## 18     C1      B0  48.20030 10.636070
## 19     C1      B0  64.20814 10.679730
## 20     C1      B0  57.16325 10.689110
## 21     C2      B0  53.59306 10.709741
## 23     C2      B0  53.84397 10.768283
## 24     C2      B0  55.62665 10.836028
## 25     C2      B0  56.24976 10.874833
## 26     C2      B0  49.87984 10.974816
## 27     C2      B0  65.02672 10.984003
## 28     C2      B0  60.92024 11.036263
## 29     C2      B0  53.17118 11.039914
## 30     C2      B0  67.52289 11.060014
## 31     C3      B0  62.55879 11.067616
## 32     C3      B0  58.22957 11.084025
## 33     C3      B0  65.37075 11.152465
## 34     C3      B0  65.26880 11.205484
## 35     C3      B0  64.92949 11.226998
## 36     C3      B0  64.13184 11.253295
## 37     C3      B0  63.32351 11.253834
## 38     C3      B0  59.62853 11.309822
## 39     C3      B0  58.16422 11.329117
## 40     C3      B0  57.71717 11.350920
## 41     C0      B1  65.13705 11.362275
## 42     C0      B1  68.54458 11.371085
## 43     C0      B1  61.14223 11.380879
## 44     C0      B1  85.18269 11.404125
## 45     C0      B1  78.45573 11.426488
## 46     C0      B1  62.13824 11.450754
## 47     C0      B1  67.17981 11.458085
## 48     C0      B1  66.73341 11.461358
## 49     C0      B1  75.45976 11.513045
## 50     C0      B1  69.41642 11.515830
## 51     C1      B1  71.77323 11.527246
## 52     C1      B1  69.80017 11.545454
## 53     C1      B1  69.69991 11.577908
## 54     C1      B1  79.58022 11.635486
## 55     C1      B1  68.41960 11.655311
## 56     C1      B1  80.61529 11.659143
## 57     C1      B1  59.15873 11.667080
## 58     C1      B1  74.09230 11.692837
## 59     C1      B1  70.86698 11.720005
## 60     C1      B1  71.51159 11.743671
## 61     C2      B1  72.65748 11.762197
## 62     C2      B1  66.48374 11.844712
## 63     C2      B1  67.66755 11.882585
## 64     C2      B1  62.86997 11.907299
## 65     C2      B1  62.49746 11.929763
## 66     C2      B1  72.12470 11.955713
## 67     C2      B1  73.13747 12.049125
## 68     C2      B1  70.37103 12.053603
## 70     C2      B1  84.35059 12.084881
## 71     C3      B1  66.56278 12.101349
## 72     C3      B1  53.83582 12.110158
## 73     C3      B1  77.04017 12.122959
## 75     C3      B1  65.18394 12.155019
## 76     C3      B1  77.17900 12.278779
## 77     C3      B1  68.00659 12.278900
## 78     C3      B1  61.45498 12.306003
## 79     C3      B1  71.26912 12.316794
## 80     C3      B1  69.02776 12.387696
## 81     C0      B2  80.04611 12.403625
## 82     C0      B2  83.08224 12.421596
## 83     C0      B2  77.03472 12.431863
## 84     C0      B2  85.15501 12.479654
## 85     C0      B2  78.23611 12.544677
## 86     C0      B2  82.65426 12.567481
## 87     C0      B2  88.77471 12.586955
## 88     C0      B2  83.48145 12.671921
## 89     C0      B2  77.39255 12.706152
## 90     C0      B2  89.19046 12.731886
## 91     C1      B2  87.94803 12.780921
## 92     C1      B2  84.38718 12.803382
## 93     C1      B2  81.90985 12.827541
## 95     C1      B2  90.88522 12.912320
## 96     C1      B2  75.19792 12.919865
## 97     C1      B2  97.49866 12.961932
## 98     C1      B2  92.26089 12.980270
## 99     C1      B2  78.11440 12.999755
## 100    C1      B2  71.78863 13.024061
## 101    C2      B2  74.31675 13.150046
## 102    C2      B2  82.05507 13.270065
## 103    C2      B2  78.02646 13.368525
## 104    C2      B2  77.21966 13.442803
## 105    C2      B2  72.38705 13.442896
## 106    C2      B2  79.63978 13.470738
## 107    C2      B2  73.72076 13.602219
## 108    C2      B2  66.65646 13.642141
## 109    C2      B2  76.95819 13.706137
## 110    C2      B2  87.35197 13.877916
## 111    C3      B2  75.39722 14.146180
## 112    C3      B2  84.86371 14.178406
## 113    C3      B2  67.05694 14.397021
## 114    C3      B2  79.55550 14.481835
## 115    C3      B2  84.15526 14.541882
## 116    C3      B2  82.40923 14.596377
## 117    C3      B2  80.84541 14.730142
## 118    C3      B2  74.87435 14.766987
## 119    C3      B2  73.20237 14.858453
## 120    C3      B2  71.80697 16.213352
table(datos_des$bloques, datos_des$acido)
##     
##      C0 C1 C2 C3
##   B0 10  9  9 10
##   B1 10 10  9  9
##   B2 10  9 10 10

Análisis de varianza

mod1<-lm(porc_germ ~ diam_med + bloques + acido +
           bloques:acido,
         datos_des)
Anova(mod1, type = 'II')
## Anova Table (Type II tests)
## 
## Response: porc_germ
##               Sum Sq  Df F value    Pr(>F)    
## diam_med         6.0   1  0.1574    0.6924    
## bloques       1069.4   2 14.0706 4.013e-06 ***
## acido          151.8   3  1.3315    0.2683    
## bloques:acido  235.4   6  1.0325    0.4087    
## Residuals     3876.1 102                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Análisis de covarianza ANCOVA

mod4<-lm(porc_germ ~ acido + diam_med,datos_des)

summary(mod4)
## 
## Call:
## lm(formula = porc_germ ~ acido + diam_med, data = datos_des)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -20.1993  -3.9414  -0.5862   4.8609  17.0401 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -3.7614     6.3136  -0.596    0.553    
## acidoC1      -1.1529     1.8128  -0.636    0.526    
## acidoC2      -7.9475     1.8584  -4.276 4.06e-05 ***
## acidoC3     -11.0204     1.9405  -5.679 1.12e-07 ***
## diam_med      6.5864     0.5454  12.076  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.863 on 110 degrees of freedom
## Multiple R-squared:  0.5783, Adjusted R-squared:  0.5629 
## F-statistic: 37.71 on 4 and 110 DF,  p-value: < 2.2e-16

Puesto que se obtienen valores negativos para el concepto de ESTIMADO, se dice entonces que hay un decrecimiento para el porcentaje de germinación, el cual está relacionada con la covariable diámetro medio de la semilla. Es decir, esta última tiene un efecto negativo en el porcentaje de germinación.

Respecto al resultado del análisis ANCOVA es posible mencionar lo siguiente:

  • Intercepto: Es el valor medio de porcentaje de germinación cuando el valor del diámetro medio de la semilla es igual a cero, en este caso, el valor es negativo (-3.7614), lo cual tiene sentido, puesto que si el diámetro de la semilla es igual a Cero, no habría germinación de la misma

  • Respecto al tratamiento C1, se tuvo un coeficiente de -1.1529, lo cual indica que en promedio este grupo tuvo un porcentaje de germinación de 1.2 unidades menos que el tratamiento C0, cuando el diametro de la semilla se mantiene constante. El valor p es mayor al 5%, indicando que no hay diferencias significativas entre el tratamiento C0 y C1

  • Respecto al tratamiento C2, se tuvo un coeficiente de -7.9475, lo cual indica que en promedio este grupo tuvo un porcentaje de germinación de 8 unidades menos que el tratamiento C0, cuando el diametro de la semilla se mantiene constante. El valor p es menor al 5%, indicando que hay diferencias significativas entre el tratamiento C0 y C2

  • Respecto al tratamiento C3, se tuvo un coeficiente de -11.0204, lo cual indica que en promedio este grupo tuvo un porcentaje de germinación de 11 unidades menos que el tratamiento C0, cuando el diametro de la semilla se mantiene constante. El valor p es menor al 5%, indicando que hay diferencias significativas entre el tratamiento C0 y C3

  • El coeficiente para el diametro medio de la semilla fue de 6.5864, esto quiere decir que en promedio, por cada unidad de crecimiento del diametro (por ejemplo si la medida está dada en mm) el porcentaje de germinación incrementa 6.6 unidades si se mantiene la dosis del ácido en cada tratamiento. El p-valor por su parte es menor al 5%, por tanto si hay diferencias significativas dadas por el ácido

Ejercicio bonus

# ¿Cómo correr análisis de varianza con faltantes cuando los mismo se indican con NA, es decir, cuando en lugar de no haber datos es NA?

datos_des[sample(120,5),'porc_germ']=NA

#¿Cómo resolver el no poder sacar medias con NA en R?
tapply(datos_des$porc_germ,
       datos_des$acido,
       mean)
## C0 C1 C2 C3 
## NA NA NA NA
# De este modo, con 'na.rm', en donde se remueven los NA que me impiden sacar los promedios
tapply(datos_des$porc_germ,
       datos_des$acido,
       mean,na.rm=TRUE)
##       C0       C1       C2       C3 
## 70.47448 72.12980 68.47421 69.57377
table(datos_des$bloques,datos_des$acido)
##     
##      C0 C1 C2 C3
##   B0 10  9  9 10
##   B1 10 10  9  9
##   B2 10  9 10 10