Subido por PATRICIO GUZMAN

ejemplo anova en r (1)

Anuncio
Estadística (Q) – Ejemplo de ANOVA en R
Un investigador registró las transpiración de plantas de tabaco de 5 variedades distintas.
Para cada una de las variedades registró la transpiración de 12 plantas elegidas al azar. Se
decide aplicar un modelo de análisis de la varianza (ANOVA) para analizar si existen
diferencias significativas entre las variedades. Los datos observados son
Tabaco1
9.080729
8.898094
8.70729
8.577438
9.127343
8.607059
8.934845
8.759148
8.768539
8.428109
9.23441
8.98094
Tabaco2
8.798094
8.980729
8.577438
9.027343
8.607059
9.234845
8.459148
8.668539
8.828109
8.993441
8.798094
8.980729
Tabaco3
8.619636
9.403858
8.819636
9.103858
9.02778
9.443001
8.919614
9.263839
9.092951
8.869939
9.17763
8.817533
Tabaco4
9.003297
8.919114
8.785475
9.339848
9.226791
8.559244
8.425281
9.208764
8.680994
8.779978
8.978667
9.003297
Tabaco5
9.948916
9.509691
9.462271
9.56095
9.116161
9.727411
9.757861
9.087074
9.392484
9.53709
9.284733
9.432191
a) Plantee un modelo para este problema definiendo claramente las variables aleatorias y
los parámetros involucrados en este problema. Indique cuáles son los supuestos
necesarios para aplicar el anova. Escriba las hipótesis que se desea testear.
b) Analizar la validez de los supuestos.
c) Testee las hipótesis planteadas en a) con nivel de significación 0.05. ¿Qué test/salida
emplea para tomar esta decisión? Plantee el p-valor. Escriba la conclusión del test.
d) ¿Qué pares de variedades difieren significativamente entre sí con un nivel de
significación simultáneo del 5%? Explique en qué método/s y en qué salida/s basa su
conclusión.
e) Usando cada uno de los métodos para calcular todos los intervalos de confianza de nivel
simultáneo 0.95 para la diferencia de medias entre las variedades, construya un
intervalo para la diferencia entre la variedad 1 y la 5.
> # Primero leemos los datos
> tabac<-scan(file.choose())
Read 60 items
> # tabac.txt contiene al vector de datos
>
> varie<-c(rep("var1",12), rep("var2",12), rep("var3",12),
+
rep("var4",12), rep("var5",12))
> varie
[1]
[14]
[27]
[40]
[53]
"var1"
"var2"
"var3"
"var4"
"var5"
"var1"
"var2"
"var3"
"var4"
"var5"
"var1"
"var2"
"var3"
"var4"
"var5"
"var1"
"var2"
"var3"
"var4"
"var5"
"var1"
"var2"
"var3"
"var4"
"var5"
"var1"
"var2"
"var3"
"var4"
"var5"
"var1"
"var2"
"var3"
"var4"
"var5"
"var1"
"var2"
"var3"
"var4"
"var5"
"var1"
"var2"
"var3"
"var4"
"var1"
"var2"
"var3"
"var5"
"var1"
"var2"
"var4"
"var5"
"var1"
"var3"
"var4"
"var5"
"var2"
"var3"
"var4"
"var5"
> varie.f<-factor(varie)
1
> levels(varie.f)
[1] "var1" "var2" "var3" "var4" "var5"
> # El vector "varie" contiene las variedades (o grupos) a las que corresponden
> # las observaciones. La instruccion "factor" le dice al R que guarde en varie.f
> # las palabras (o numeros) del vector varie y que las utilice como codigos
> # que indican la pertenencia a distintas variedades (o grupos).
>
> #######################################################################
> #
otra manera de leer los datos
> #######################################################################
> # cuando los datos se guardan en un archivo con dos columnas, una
> # con los datos y la otra con el grupo al que pertenecen, se pueden
> # cargar al R de la siguiente forma, ejemplificamos con los datos
> # de un ejercicio de la practica
> # cereales<-read.table(file.choose(),header=T)
#y buscar el archivo
"cereales.txt" en la computadora
> # attach(cereales)
#para convertir a las dos
columnas del archivo en los vectores "tiamina" y "cereal"
> # cereal.f<-factor(cereal)
#convierte al vector "cereal" en
un factor
> # Seguimos con el ejercicio
# En papel, escriba las variables, el modelo, los supuestos y defina
# los parametros y las hipotesis que testea anova. En R,
> salida<-aov(tabac~varie.f)
> summary(salida)
Df Sum Sq Mean Sq F value Pr(>F)
varie.f
4 3.563 0.8908 14.26 4.78e-08 ***
Residuals 55 3.436 0.0625
--Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> names(salida)
[1] "coefficients" "residuals"
"effects"
"rank"
"fitted.values"
[6] "assign"
"qr"
"df.residual" "contrasts"
"xlevels"
[11] "call"
"terms"
"model"
> # vemos que el objeto producido por la instruccion "aov" es una lista
> # que tiene muchos componentes adentro. La instruccion summary(aov) muestra
> # en pantalla los que son relevantes para testear la hipotesis de igualdad
> # de medias
> qf(0.95,df1=4,df2=55) #cuantil para hacer el test a mano
[1] 2.539689
> # El p-valor del test de F para la igualdad de medias resulta ser
> # 4.78*10^(-8) < 0.05, luego rechazamos la hipotesis nula de
> # igualdad de medias y concluimos que tenemos evidencia suficiente
> # en la muestra para afirmar, a nivel 0.05, que las transpiraciones
> # medias de al menos dos variedades de tabaco son distintas entre si.
> # En un item posterior veremos cuales son esas variedades.
>
> boxplot(tabac~varie.f,main ="boxplot de la transpiracion para distintos tabacos")
> boxplot(residuals(salida),main="boxplot de los residuos")
> qqnorm(residuals(salida))
# otra instrucción que proporciona graficos, hay que apretar
2
# el <Enter> para ver los siguientes graficos
> plot(salida)
<Enter> para ver el próximo gráfico:
# Al mirar los boxplots de las transpiraciones de las 12 plantas de
# tabaco de cada variedad EN LA MISMA ESCALA vemos que las variabilidades
# de los cinco grupos de observaciones no parecen diferir entre si. Con
# respecto al centro de cada conjunto de datos, vemos que la mediana de
# la variedad 5 es mas alta que el resto, seguida por la de la variedad 3.
# Para ver si esta diferencia observada en la muestra es suficiente como
# para implicar una diferencia entre las transpiraciones medias poblacionales
# es que hicimos el test F, en el que vimos que al menos dos medias poblacionales
# son diferentes. Por otro lado, los cinco conjuntos de datos no muestran
# severos apartamientos de la normalidad. Sin embargo, como cada boxplot esta
# basado en solo 12 datos, para tener una vision mas clara de la validez de los
# supuestos, estudiamos los residuos, que son la resta entre cada observacion y
# la media muestral del grupo al que pertenece. Los residuos se guardan en el
# vector residuals(salida). Tanto del qqplot como del boxplot
# de los 60 residuos concluimos que no pareciera haber razones para sospechar
# de la normalidad de los datos. Otro grafico que permite ver la
homoscedasticidad
# (igualdad de varianzas) y un poco la normalidad (sobre todo la asimetria o la
# existencia de observaciones atipicas) es el grafico de residuos (o residuos
3
# estandarizados), es decir, divididos por el valor de sigma estimado versus el
# grupo al que pertenecen las observaciones. En este caso tampoco se ven
# alejamientos de la normalidad.
# De paso, una pregunta, cuales son los estimadores de los 6 parametros
# del modelo de anova? (Primero: cuales son los 6 parametros del modelo?)
#
#
#
#
#
#
Las 5 medias poblacionales son estimadas por las medias muestrales de cada
variedad (o grupo). Observemos que esta informacion no aparece directamente
en la salida del comando aov del R (ni en la tabla de anova clasica). Por
otro lado, la varianza poblacional se estima con un promedio ponderado de las
varianzas muestrales de cada grupo. Este dato en que lugar de la tabla anova
se puede leer?
# Para calcular las medias y varianzas muestrales por variedad "a mano"
> medias<-tapply(tabac,varie.f,mean)
> medias
var1
var2
var3
var4
var5
8.841995 8.829464 9.046606 8.909229 9.484736
> # vemos que las medias se comportan de igual modo que las medianas que analizamos
> # en los boxplots
> varianzas<-tapply(tabac,varie.f,var)
> varianzas
var1
var2
var3
var4
var5
0.05912479 0.05037476 0.06259336 0.07631125 0.06398942
> # las varianzas muestrales no parecen ser muy diferentes, mas abajo
> # lo testeamos
> # reconstruimos el S_p al cuadrado, o sea la estimacion de sigmacuadrado bajo el
> # modelo a partir de las varianzas muestrales.
> sum(varianzas)*11/55
[1] 0.06247872
> # En que parte de la tabla anova esta esta informacion?
> # Tambien podemos calcular las medias usando la instruccion aov
> model.tables(salida,"means")
Tables of means
Grand mean
9.022406
varie.f
varie.f
var1 var2 var3 var4 var5
8.842 8.829 9.047 8.909 9.485
# primero testeamos la igualdad de varianzas
# de las observaciones de cada grupo con el test de levene que no es
4
#
#
#
#
muy potente pero es resistente a apartamientos de la normalidad
(es decir, funciona bien aun cuando las observaciones no son normales)
Una pregunta, que hipotesis testea este test?
Otra mas: a que nivel conviene llevarlo a cabo? Por que no es 0.05?
> install.packages("lawstat")
> library("lawstat")
> levene.test(tabac,varie.f)
modified robust Brown-Forsythe Levene-type test based on the absolute
deviations from
the median
data: tabac
Test Statistic = 0.1292, p-value = 0.9711
# como el p-valor da 0.9711 > 0.20, no tenemos evidencia para rechazar
# la hipotesis de homoscedasticidad, es decir, no tenemos razones para
# dudar de la igualdad de varianzas
#
#
#
#
#
habiendo pasado el test de igualdad de varianzas, testeamos la
hipotesis de normalidad de las observaciones a traves del test de
shapiro-wilks aplicado a los residuos.
Una pregunta, que hipotesis testea este test?
Otra mas: a que nivel conviene llevarlo a cabo? Por que no es 0.05?
> shapiro.test(salida$res)
Shapiro-Wilk normality test
data: salida$res
W = 0.9811, p-value = 0.4761
# el p-valor del test de shapiro da 0.4761 > 0.20, luego no rechazamos
# H0 en base a la muestra dada, es decir, no tenemos razones para dudar
# de la normalidad de las observaciones
#
#
#
#
#
#
#
para quedarnos tranquilos, una vez que nuestros datos pasaron el test
de normalidad, podemos aplicar el test de bartlett para la igualdad
de varianzas, que necesita que los datos sean normales para funcionar.
Cuando los datos son normales, el test de bartlett es mas potente que
el de levene
Una pregunta, que hipotesis testea este test?
Otra mas: a que nivel conviene llevarlo a cabo? Por que no es 0.05?
> bartlett.test(tabac,varie.f)
Bartlett test of homogeneity of variances
data: tabac and varie.f
Bartlett's K-squared = 0.4754, df = 4, p-value = 0.9758
# El p-valor del test es 0.9758 > 0.20 por lo que confirmamos la conclusion
# de levene: no tenemos razones para dudar de la igualdad de varianza de
# las poblaciones de las que provienen los datos.
5
#
#
#
#
Ya vimos que al menos dos medias poblacionales difieren entre sí.
Las instrucciones que siguen permiten realizar las comparaciones entre
pares de medias, a posteriori de haber detectado que existen diferencias
estadísticamente significativas.
> install.packages("asbio")
> library("asbio")
# Cuantas comparaciones hacemos?
> choose(5,2) #numero de comparaciones a hacer, choose calcula el numero
combinatorio
[1] 10
###############################################
# Intervalos de confianza de bonferroni
###############################################
# Para que parametros se calculan los intervalos?
> int.bonf<-pairw.anova(y = tabac, x = varie.f, method = "bonf")
> plot(int.bonf,type="2",las=1)
> int.bonf
95% Bonferroni confidence intervals
muvar1-muvar2
muvar1-muvar3
muvar2-muvar3
muvar1-muvar4
muvar2-muvar4
muvar3-muvar4
muvar1-muvar5
muvar2-muvar5
muvar3-muvar5
muvar4-muvar5
#
#
#
#
#
#
#
#
#
#
Diff
Lower
Upper Decision Adj. p-value
0.01253 -0.28592 0.31098
FTR H0
1
-0.20461 -0.50306 0.09384
FTR H0
0.498824
-0.21714 -0.51559 0.08131
FTR H0
0.378412
-0.06723 -0.36568 0.23122
FTR H0
1
-0.07977 -0.37822 0.21869
FTR H0
1
0.13738 -0.16107 0.43583
FTR H0
1
-0.64274 -0.94119 -0.34429 Reject H0
1e-06
-0.65527 -0.95372 -0.35682 Reject H0
0
-0.43813 -0.73658 -0.13968 Reject H0
0.00072
-0.57551 -0.87396 -0.27706 Reject H0
6e-06
las=1 es una opcion grafica para que los rotulos del eje y aparezcan
horizontales y sean mas faciles de leer
FTR H0: fail to reject H0
si el pvalor ajustado es menor que el alfa = 0.05,
rechazamos la hipotesis nula de dicha comparacion de pares de medias
Una pregunta, que hipotesis testearia cada uno de estos tests?
Recordar que al utilizar este procedimiento (o el de tukey, o algunos
otros disponibles) las conclusiones sobre las comparaciones de a pares se
se extraen a nivel conjunto, es decir con nivel de confianza sobre TODOS
los intervalos igual a 0.05.
# Que pares de medias difieren entre si a nivel conjunto 0.05, si utilizamos el
# metodo de Bonferroni para sacar las conclusiones? Asegurese de detectar los 4
pares.
> choose(5,2) #numero de comparaciones a hacer
[1] 10
6
> 1-0.05/20
[1] 0.9975
> qt(0.9975,df=55) #percentil para armarlo a mano
[1] 2.924701
# Calcule a mano el IC para mu1 - mu5 segun bonferroni
# y chequeelo con el calculado por R.
###############################################
# Intervalos de confianza de tukey
###############################################
> int.tuk<-pairw.anova(y = tabac, x = varie.f, method = "tukey")
> plot(int.tuk,type="2",las=1)
> int.tuk
95% Tukey-Kramer confidence intervals
muvar1-muvar2
muvar1-muvar3
muvar2-muvar3
muvar1-muvar4
muvar2-muvar4
Diff
Lower
Upper
0.01253 -0.27527 0.30033
-0.20461 -0.49241 0.08319
-0.21714 -0.50494 0.07066
-0.06723 -0.35503 0.22057
-0.07977 -0.36756 0.20803
Decision Adj. p-value
FTR H0
0.999947
FTR H0
0.27725
FTR H0
0.223187
FTR H0
0.964232
FTR H0
0.934857
7
muvar3-muvar4 0.13738 -0.15042
muvar1-muvar5 -0.64274 -0.93054
muvar2-muvar5 -0.65527 -0.94307
muvar3-muvar5 -0.43813 -0.72593
muvar4-muvar5 -0.57551 -0.86331
> qtukey(0.95,5,55)
[1] 3.988545
> qtukey(0.95,5,55)/sqrt(2) #es
[1] 2.820328
0.42518
-0.35494
-0.36747
-0.15033
-0.28771
FTR
Reject
Reject
Reject
Reject
H0
H0
H0
H0
H0
0.663893
1e-06
0
0.000665
6e-06
lo que usamos para los ic de tukey
# Calcule a mano el IC para mu1 - mu5 segun tukey
# y chequeelo con el calculado por R.
# Que pares de medias difieren entre si a nivel conjunto 0.05, si utilizamos el
# metodo de Tukey para sacar las conclusiones? Asegurese de detectar los 4 pares.
# Cual de los dos metodos estudiados (Bonferroni o Tukey) conviene elegir en
# este caso?
8
Descargar