En esta sección vamos a ver los tests no paramétricos para aplicar en diferentes situaciones, sustituyendo a los procedimientos que asumen normalidad:
El test de Wilcoxon o U de Mann-Whitney permite sustituir a la t de student con una prueba que no asume normalidad, porque trabaja ordenando los datos de cada factor según su valor.
Este ejemplo lo vamos a ver nuevamente con los datos de CO2 y que pensamos que existe diferencias significativas:
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 3.5.1
## -- Attaching packages ----------------------------------------------------------------------------------------------------------- tidyverse 1.2.1 --
## v ggplot2 2.2.1 v purrr 0.2.4
## v tibble 1.4.2 v dplyr 0.7.4
## v tidyr 0.8.0 v stringr 1.3.0
## v readr 1.1.1 v forcats 0.3.0
## -- Conflicts -------------------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
data(CO2)
ggplot(CO2,aes(x=uptake))+geom_density()
ggplot(CO2,aes(y=uptake,x=Treatment))+geom_boxplot()
Así pues, la prueba de Wilcoxon puede realizarse simplemente con la función wilcox.test()
, especificando la fórmula y la fuente de datos de donde tomar los nombres de las variables:
wilcox.test(uptake~Treatment,data=CO2)
## Warning in wilcox.test.default(x = c(16, 30.4, 34.8, 37.2, 35.3, 39.2,
## 39.7, : cannot compute exact p-value with ties
##
## Wilcoxon rank sum test with continuity correction
##
## data: uptake by Treatment
## W = 1187.5, p-value = 0.006358
## alternative hypothesis: true location shift is not equal to 0
Por su parte, el test de Kruskal-Wallis es una variante del test anterior, cuando hay más de dos grupos que comparar. Vamos a cargar PlantGrowth, que tiene los datos de un experimento de crecimiento de plantas donde el resultado es peso, con tres tratamientos experimentales en la variable group.
data("PlantGrowth")
head(PlantGrowth)
## weight group
## 1 4.17 ctrl
## 2 5.58 ctrl
## 3 5.18 ctrl
## 4 6.11 ctrl
## 5 4.50 ctrl
## 6 4.61 ctrl
levels(PlantGrowth$group)
## [1] "ctrl" "trt1" "trt2"
ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()
kruskal.test(weight~group,data=PlantGrowth)
##
## Kruskal-Wallis rank sum test
##
## data: weight by group
## Kruskal-Wallis chi-squared = 7.9882, df = 2, p-value = 0.01842
ggplot(PlantGrowth,aes(x=group,y=weight))+geom_boxplot()
kruskal.test(weight~group,data=PlantGrowth)
##
## Kruskal-Wallis rank sum test
##
## data: weight by group
## Kruskal-Wallis chi-squared = 7.9882, df = 2, p-value = 0.01842
Para terminar vamos a ver el uso de la Chi-cuadrado en R, para usar dos variables factoriales. Utilizaremos el archivo Queen_scalop.txt
.
crabs<-read.table("Queen_scalop.txt")
Los datos tienen una estructura particular: cada fila representa un sitio de muestreo y una columna para cada especie para ver si está presente o no en ese sitio. La cuestión a testar es si las especies tienden a coincidir o a evitarse por lo que un test de Chi Cuadrado nos dirá si estos datos se desvian de una probabilidad al azar.
head(crabs)
## P..maximus A..opercularis
## 1 Presente Presente
## 2 Presente Presente
## 3 Presente Presente
## 4 Presente Presente
## 5 Presente Presente
## 6 Presente Presente
dim(crabs)
## [1] 49 2
table(crabs)
## A..opercularis
## P..maximus Ausente Presente
## Ausente 9 19
## Presente 15 6
Una tabla de contingencia permite ilustrar bien esta cuestión. Vemos que hay muchos menos sitios donde los cangrejos están presentes a la vez, y solo hay 9 sitios donde no hay ninguno de los dos.
La chi-cuadrado tomará esta tabla de contingencia como argumento para realizar el test, no cogerá los datos originales.
table(crabs)%>%chisq.test()
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: .
## X-squared = 5.9225, df = 1, p-value = 0.01495