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