DISEÑO DESBALANCEADO
Tiene diferente cantidad de repeticiones
DISEÑO FACTORIAL SIMPLE
La variable respuesta es la germinación y factor es la concentracion de acido
Control C0: sin el ácido.
Concentración C1:con el ácido.
Concentración C2:mayor concentración
set.seed(123)
#Creamos los datos utilizando como factor procedencia de la semilla.
porc_germ = c(
rnorm(40,60,6),
rnorm(40,70,7),
rnorm(40,80,8)
)
acido = gl(3,40,120, c('CO','C1','C2'))
datos = data.frame(acido, porc_germ)
head(datos)
## acido porc_germ
## 1 CO 56.63715
## 2 CO 58.61894
## 3 CO 69.35225
## 4 CO 60.42305
## 5 CO 60.77573
## 6 CO 70.29039
table(datos$acido)
##
## CO C1 C2
## 40 40 40
#Hasta acá tenemos los datos balanceados ya que tenemos la misma cantidad de repeticiones para cada tratamiento, en este caso 40
#Desbalanceamos los datos eliminando las filas 50, 111 y 120.
datos_des = datos [-c(50,111, 120), ]
table(datos_des$acido)
##
## CO C1 C2
## 40 39 38
Analisis descriptivo
boxplot(datos$porc_germ ~ datos$acido)
Se observa mejor germinación con la el acido C2
Analisis de varianza balanceado usando datos desbalanceados
Primero se intenta correr de la forma original, con los datos balanceados
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 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
Concluimos que: p-valor <0.05, es decir,la germinacion no fue igual utilizando todos los ácidos
No existe diferencia en los resultados utilizando datos balanceados y desvalanceados, el pvalor es el mismo, Aov no está diseñada para datos desbalanceados pero este funciona ya que solo tenemos un factor.
Analisis de varianza desbalanceado usando datos desbalanceados
Cuando tenemos mas de un factor, usmaos la libreria CAR, la función lm y añadir tipo II para hacer el ajuste de los datos desbalanceados.
mod3 = lm(porc_germ ~ acido, datos_des)
#Instalamos la libraria car, usamos la función Anova
library(car)
## Loading required package: carData
mod3_res = Anova(mod3, type = "II")
mod3_res
## 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
Este diseño como es de un solo factor funciona con las dos funciones.
DISEÑO FACTORIAL SIMPLE CON BLOQUES COMPLETOS GENERALIZADOS Y AL AZAR DESBALANCEADO
Un solo factor
Varia repeticiones por bloques
No tenemos el mismo numero de repeticiones por tratamiento
Primero vamos a crear los datos:
set.seed(123)
porc_germ = c(
rnorm(40,60,6),
rnorm(40,70,7),
rnorm(40,80,8)
)
#Añadimos el factor de bloqueo, primero colocamos los bloques luego los factores o el factor
bloq = gl(3, 40, 120, c('BO','B1','B2'))
acido = gl(3,10,120, c('CO','C1','C2', "C3"))
datos = data.frame(acido,bloq, porc_germ)
#Vamos a crear los datos desbalanceados eliminando las filas 120 y 5
datos_des = datos[-sample(120, 5), ]
datos_des
## acido bloq porc_germ
## 1 CO BO 56.63715
## 2 CO BO 58.61894
## 3 CO BO 69.35225
## 4 CO BO 60.42305
## 5 CO BO 60.77573
## 6 CO BO 70.29039
## 7 CO BO 62.76550
## 8 CO BO 52.40963
## 9 CO BO 55.87888
## 10 CO BO 57.32603
## 11 C1 BO 67.34449
## 12 C1 BO 62.15888
## 13 C1 BO 62.40463
## 15 C1 BO 56.66495
## 17 C1 BO 62.98710
## 18 C1 BO 48.20030
## 19 C1 BO 64.20814
## 20 C1 BO 57.16325
## 21 C2 BO 53.59306
## 22 C2 BO 58.69215
## 23 C2 BO 53.84397
## 24 C2 BO 55.62665
## 25 C2 BO 56.24976
## 26 C2 BO 49.87984
## 27 C2 BO 65.02672
## 28 C2 BO 60.92024
## 29 C2 BO 53.17118
## 30 C2 BO 67.52289
## 31 CO BO 62.55879
## 32 CO BO 58.22957
## 34 CO BO 65.26880
## 35 CO BO 64.92949
## 36 CO BO 64.13184
## 37 CO BO 63.32351
## 38 CO BO 59.62853
## 39 CO BO 58.16422
## 40 CO BO 57.71717
## 41 C1 B1 65.13705
## 42 C1 B1 68.54458
## 43 C1 B1 61.14223
## 44 C1 B1 85.18269
## 45 C1 B1 78.45573
## 46 C1 B1 62.13824
## 47 C1 B1 67.17981
## 48 C1 B1 66.73341
## 49 C1 B1 75.45976
## 50 C1 B1 69.41642
## 51 C2 B1 71.77323
## 52 C2 B1 69.80017
## 53 C2 B1 69.69991
## 54 C2 B1 79.58022
## 55 C2 B1 68.41960
## 56 C2 B1 80.61529
## 57 C2 B1 59.15873
## 58 C2 B1 74.09230
## 59 C2 B1 70.86698
## 60 C2 B1 71.51159
## 61 CO B1 72.65748
## 62 CO B1 66.48374
## 63 CO B1 67.66755
## 64 CO B1 62.86997
## 65 CO B1 62.49746
## 66 CO B1 72.12470
## 67 CO B1 73.13747
## 68 CO B1 70.37103
## 69 CO B1 76.45587
## 70 CO B1 84.35059
## 71 C1 B1 66.56278
## 72 C1 B1 53.83582
## 73 C1 B1 77.04017
## 74 C1 B1 65.03559
## 75 C1 B1 65.18394
## 76 C1 B1 77.17900
## 77 C1 B1 68.00659
## 78 C1 B1 61.45498
## 79 C1 B1 71.26912
## 80 C1 B1 69.02776
## 81 C2 B2 80.04611
## 82 C2 B2 83.08224
## 83 C2 B2 77.03472
## 84 C2 B2 85.15501
## 85 C2 B2 78.23611
## 86 C2 B2 82.65426
## 88 C2 B2 83.48145
## 89 C2 B2 77.39255
## 90 C2 B2 89.19046
## 91 CO B2 87.94803
## 92 CO B2 84.38718
## 93 CO B2 81.90985
## 94 CO B2 74.97675
## 95 CO B2 90.88522
## 96 CO B2 75.19792
## 97 CO B2 97.49866
## 98 CO B2 92.26089
## 99 CO B2 78.11440
## 100 CO B2 71.78863
## 101 C1 B2 74.31675
## 102 C1 B2 82.05507
## 103 C1 B2 78.02646
## 104 C1 B2 77.21966
## 105 C1 B2 72.38705
## 106 C1 B2 79.63978
## 107 C1 B2 73.72076
## 108 C1 B2 66.65646
## 109 C1 B2 76.95819
## 110 C1 B2 87.35197
## 111 C2 B2 75.39722
## 112 C2 B2 84.86371
## 113 C2 B2 67.05694
## 114 C2 B2 79.55550
## 115 C2 B2 84.15526
## 116 C2 B2 82.40923
## 118 C2 B2 74.87435
## 119 C2 B2 73.20237
## 120 C2 B2 71.80697
table(datos_des$bloq, datos_des$acido)
##
## CO C1 C2 C3
## BO 19 8 10 0
## B1 10 20 10 0
## B2 10 10 18 0
Analisis de varianza con AOV
mod1 = aov(porc_germ ~ bloq* acido, datos_des)
mod1
## Call:
## aov(formula = porc_germ ~ bloq * acido, data = datos_des)
##
## Terms:
## bloq acido bloq:acido Residuals
## Sum of Squares 7478.283 209.889 164.590 4074.602
## Deg. of Freedom 2 2 4 106
##
## Residual standard error: 6.199971
## Estimated effects may be unbalanced
Analisis de varianza con lm
library(car)
mod2 = lm(porc_germ ~ bloq* 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)
## bloq 7539.5 2 98.0699 <2e-16 ***
## acido 209.9 2 2.7301 0.0698 .
## bloq:acido 164.6 4 1.0704 0.3749
## Residuals 4074.6 106
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Ya que tenemos dos factores NO se recomienda usar la función AOV Se observa que no hay interacción entre el bloque y el acido,
Ajustando el desabalanceado con diferentes ordenes
Queremos observar la diferencia cuando utilizamos un orden distinto
mod3 = lm(porc_germ ~ bloq + acido + bloq:acido, datos_des)
Anova(mod3, type='II')
## Anova Table (Type II tests)
##
## Response: porc_germ
## Sum Sq Df F value Pr(>F)
## bloq 7539.5 2 98.0699 <2e-16 ***
## acido 209.9 2 2.7301 0.0698 .
## bloq:acido 164.6 4 1.0704 0.3749
## Residuals 4074.6 106
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod3 = lm(porc_germ ~ acido + bloq + bloq:acido, datos_des)
Anova(mod3, type='II')
## Anova Table (Type II tests)
##
## Response: porc_germ
## Sum Sq Df F value Pr(>F)
## acido 209.9 2 2.7301 0.0698 .
## bloq 7539.5 2 98.0699 <2e-16 ***
## acido:bloq 164.6 4 1.0704 0.3749
## Residuals 4074.6 106
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod3 = lm(porc_germ ~ bloq:acido + acido + bloq, datos_des)
Anova(mod3, type='II')
## Anova Table (Type II tests)
##
## Response: porc_germ
## Sum Sq Df F value Pr(>F)
## acido 209.9 2 2.7301 0.0698 .
## bloq 7539.5 2 98.0699 <2e-16 ***
## bloq:acido 164.6 4 1.0704 0.3749
## Residuals 4074.6 106
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod3 = lm(porc_germ ~ bloq:acido + bloq + acido, datos_des)
Anova(mod3, type='II')
## Anova Table (Type II tests)
##
## Response: porc_germ
## Sum Sq Df F value Pr(>F)
## bloq 7539.5 2 98.0699 <2e-16 ***
## acido 209.9 2 2.7301 0.0698 .
## bloq:acido 164.6 4 1.0704 0.3749
## Residuals 4074.6 106
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Nota = Los resultados son identicos porque ponemos la suma de cuadrados tipo II para que no hayan diferencias en el orden. Este ajuste se da con la función ANOVA
AGREGAMOS UNA COVARIABLE
#covariable: diametro medio de la semilla, el diametro en campo se calcula con promedio geométrico
set.seed(123)
porc_germ = c(
rnorm(40,60,6),
rnorm(40,70,7),
rnorm(40,80,8)
)
diam_geom =sort(rnorm(120, 12, 1.3))
#Añadimos el factor de bloqueo, primero colocamos los bloques luego los factores
bloq = gl(3, 40, 120, c('BO','B1','B2'))
acido = gl(3,10,120, c('CO','C1','C2', "C3"))
datos = data.frame(acido,bloq, porc_germ, diam_geom)
datos_des = datos
datos_des [sample(120, 5), "porc_germ" ] = NA
#Eliminamos algunos datos especificos en lugar de filas
table(datos_des$bloq, datos_des$acido)
##
## CO C1 C2 C3
## BO 20 10 10 0
## B1 10 20 10 0
## B2 10 10 20 0
Analisis usando lm
mod1 = lm(porc_germ ~ diam_geom + bloq + acido +
bloq:acido,
datos_des)
Anova(mod1, type='II')
## Anova Table (Type II tests)
##
## Response: porc_germ
## Sum Sq Df F value Pr(>F)
## diam_geom 93.5 1 2.4833 0.1181
## bloq 3044.3 2 40.4390 9.505e-14 ***
## acido 168.0 2 2.2318 0.1124
## bloq:acido 143.1 4 0.9504 0.4381
## Residuals 3952.2 105
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Seguimos utilizando type II
Para reemplazar los datos que no tenemos vamos a sacar las media:
tapply(datos_des$porc_germ,
datos_des$acido,
mean, na.rm = TRUE)
## CO C1 C2 C3
## 68.84082 68.92311 72.57864 NA
Referencias:
Langsrud, Ø. (2003). ANOVA for unbalanced data: use type II instead of type III sumsof squares. Statistics and Computing, 13(2), 163. https://doi.org/10.1023/a:1023260610025
Notas de clase
Para el martes a las 2, quiz sobre covariable
Para el segundo parcial, como corre R los faltantes en un diseño desbalanceado cuando se identifican con NA