En esta sesión presentaremos diversas pruebas no paramétricas, técnicas con menores exigencias a sus símiles paramétricas. Es decir, para probar una misma hipótesis tenemos técnicas alternativas, y la decisión de qué prueba elegir depende de si los datos originales cumplen o no los requisitos para tales pruebas.
Al final de la sesión se debe poder responder las siguientes preguntas:
En el curso veremos las siguientes pruebas:
Todas estas pruebas tienen su paralelo entra las técnicas paramétricas. En general, diversos programas permiten su cálculo, siendo la única diferencia, a veces, el formato con el que se deben ingresar los datos.
La principal ventaja de las pruebas no paramétricas es que son efectivas aun cuando el número de casos sea bajo en la muestra, aun cuando los datos no se distribuyan normalmente, aun cuando los grupos bajo análisis no tengan dispersión similar.
Sin embargo, cuando se busca exactitud, las pruebas parametricas son menos utilizadas; por otro lado, dado que pueden ser aplicadas en pequeñas muestras, hay que ser más cuidadoso respecto a la representatividad de los datos a usar.
El nombre técnico de esta prueba es test de rangos con signo de Wilcoxon. La utilizamos cuando nuestra hipotesis usa una muestra para saber si un valor particular (valor de prueba) puede ser la mediana de una población.
Para ver cómo se aplica llevemos a cabo diversos pasos.
En este caso, el que contiene las edades de los trabajadores de una empresa:
Trabajadores=read.csv("https://s3-sa-east-1.amazonaws.com/ulima/edades.csv")
colnames(Trabajadores)
## [1] "CodigoTrabajador" "Edad"
En este caso, las edades de los trabajadores.
Trabajadores$Edad
## [1] 32 42 30 35 57 40 30 52 34 64 55 57 50 45 46 63
summary(Trabajadores$Edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 30.00 34.75 45.50 45.75 55.50 64.00
Tenemos sólo 16 datos en la muestra, lo cual ya representa un problema para cualquier inferencia estadística: los estadísticos se han calculado con poca información, que sería insuficiente para estimar los parámetros (siguiendo la lógica paramétrica). Un problema detectado.
Usemos un diagrama de cajas (boxplot) y un histograma:
#dividiendo la zona de gráficas, 2 filas y 1 columna:
par(mfrow=c(2,1))
hist(Trabajadores$Edad)
boxplot(Trabajadores$Edad,horizontal = TRUE)
En el boxplot notamos que hay aproximadamente la misma cantidad de datos a la derecha y a la izquierda de la mediana; ello es importante pues la prueba de Wilcoxon funciona mejor cuando ello sucede (simetría). Sin embargo, el histograma nos indica claramente que los datos están lejos de seguir una distribución normal. En ese sentido, si quisieramos probar si la media es igual a 48 (Hipotesis Nula), la prueba paramétrica t-Student no sería confiable. Segundo problema encontrado.
Probemos la hipótesis mencionada usando la t-Student de todas maneras:
resultado_T=t.test(Trabajadores$Edad,mu=48,alternative = "two.sided")
El p-valor lo vemos asi:
resultado_T$p.value
## [1] 0.4492955
Sabiendo ello, tomemos la decisión:
alfa=0.05 # puedes cambiar este valor
test=resultado_T$p.value>=alfa
text1='aceptar igualdad'
text2='rechazar igualdad'
ifelse(test,text1,text2)
## [1] "aceptar igualdad"
El problema es que la prueba t-Student no es confiable ante los problemas antes identificados.
resultado_W=wilcox.test(Trabajadores$Edad,mu=48,alternative = "two.sided", exact = F)
El p-valor lo vemos así:
resultado_W$p.value
## [1] 0.4848424
Sabiendo ello, tomemos la decisión:
alfa=0.05 # puedes cambiar este valor
test=resultado_W$p.value>=alfa
ifelse(test,text1,text2)
## [1] "aceptar igualdad"
NOTA: Si reemplazamos “two.sided” por “less”, la hipotesis nula es de una cola; y se estaría probando si el estadístico de la población es menor que el estadístico de prueba. La hipotesis donde el estadístico de la población es mayor que el estadístico de prueba requiere la opción “greater”.
Paso 1: Luego de abrir archivo, busque la prueba:
Paso 2: Complete el diálogo:
Paso 3: Lea resultados y decida:
Paso 1: Luego de abrir archivo, escriba estos comandos:
Paso 2: Lea resultados y decida:
El nombre técnico de esta prueba es U de Mann-Whitney. La utilizamos cuando tenemos dos muestras, y nuestra hipotesis (nula) plantea que las medias de cada muestra informan que las medias en la población de estudio no difieren entre sí.
Para ver cómo se aplica llevemos a cabo diversos pasos.
En este caso, el que contiene las notas de alumnos de dos especialidades:
Alumnos=read.csv("https://s3-sa-east-1.amazonaws.com/ulima/notas.csv")
colnames(Alumnos)
## [1] "codigoEstudiante" "nota" "especialidad"
En este caso, veamos las notas y grupos.
Alumnos
## codigoEstudiante nota especialidad
## 1 e1 100 1
## 2 e2 110 1
## 3 e3 80 1
## 4 e4 75 1
## 5 e5 130 1
## 6 e6 95 1
## 7 e7 105 1
## 8 e8 125 1
## 9 e9 140 1
## 10 e10 85 1
## 11 e11 92 2
## 12 e12 112 2
## 13 e13 83 2
## 14 e14 136 2
## 15 e15 65 2
## 16 e16 75 2
## 17 e17 89 2
## 18 e18 160 2
## 19 e19 90 2
## 20 e20 114 2
tapply(Alumnos$nota,Alumnos$especialidad,summary)
## $`1`
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 75.0 87.5 102.5 104.5 121.2 140.0
##
## $`2`
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 65.0 84.5 91.0 101.6 113.5 160.0
Tenemos sólo 20 datos en la muestra, lo cual ya representa un problema para cualquier inferencia estadística: los estadísticos se han calculado con poca información, que sería insuficiente para estimar los parámetros (siguiendo la lógica paramétrica). Un problema detectado.
Usemos un histograma:
par(mfrow=c(2,1))
hist(Alumnos$nota[Alumnos$especialidad==1])
hist(Alumnos$nota[Alumnos$especialidad==2])
Usemos ahora un boxplot:
boxplot(Alumnos$nota~Alumnos$especialidad,horizontal = F)
En los boxplots notamos que las medianas están algo alejadas; en esta situación, si quisieramos probar si la media de ambos grupos son iguales (Hipotesis Nula), la prueba t-Student podría ser una alternativa ante tal hipótesis, pero no sería confiable pues los histogramas no garantizan normalidad. Segundo problema encontrado. Así mismo, la dispersión es diferente entre los grupos: tercer problema encontrado.
Probemos la hipótesis mencionada usando la t-Student de todas maneras:
resultado_T=t.test(nota~especialidad,data=Alumnos)
El p-valor lo vemos asi:
resultado_T$p.value
## [1] 0.8044174
Sabiendo ello, tomemos la decisión:
alfa=0.10 # puedes cambiar este valor
test=resultado_T$p.value>=alfa
text1='aceptar igualdad'
text2='rechazar igualdad'
ifelse(test,text1,text2)
## [1] "aceptar igualdad"
El problema la prueba t-Student no es confiable ante los problemas antes identificados.
resultado_W=wilcox.test(nota~especialidad,data=Alumnos,exact = F)
El p-valor lo vemos asi:
resultado_W$p.value
## [1] 0.7053514
Sabiendo ello, tomemos la decisión:
alfa=0.10 # puedes cambiar este valor
test=resultado_W$p.value>=alfa
ifelse(test,text1,text2)
## [1] "aceptar igualdad"
Los datos de este ejemplo dificultan que Minitab sea aplicado, pues requiere que cada grupo se escriba en una columna diferente. Puede ver los detalles en este link.
Paso 1: Luego de abrir archivo, escriba estos comandos en la ventana de sintaxis; luego, ejecute (use símbolo “play” en color verde):
Paso 2: Lea resultados y decida:
El nombre técnico de esta prueba es H de Kruskall-Wallis. La utilizamos cuando tenemos más de dos muestras, y nuestra hipotesis (nula) plantea que las medias de cada muestra informan que las medias en la población de estudio no difieren entre sí.
Para ver cómo se aplica llevemos a cabo diversos pasos.
En este caso, el que contiene las notas de trabajadores de una empresa que han sido capacitados por separado en tres grupos, luego de lo cual han sido evaluados. Veamos los resultados de la evaluación:
Empresa=read.csv("https://s3-sa-east-1.amazonaws.com/ulima/performance.csv")
colnames(Empresa)
## [1] "CodigoTrabajador" "performance" "grupo"
En este caso, veamos la evaluación y grupos.
Empresa
## CodigoTrabajador performance grupo
## 1 t1 94 1
## 2 t2 87 1
## 3 t3 91 1
## 4 t4 74 1
## 5 t5 86 1
## 6 t6 97 1
## 7 t7 85 2
## 8 t8 82 2
## 9 t9 79 2
## 10 t10 84 2
## 11 t11 61 2
## 12 t12 72 2
## 13 t13 80 2
## 14 t14 89 3
## 15 t15 67 3
## 16 t16 72 3
## 17 t17 76 3
## 18 t18 69 3
tapply(Empresa$performance,Empresa$grupo,summary)
## $`1`
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 74.00 86.25 89.00 88.17 93.25 97.00
##
## $`2`
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 61.00 75.50 80.00 77.57 83.00 85.00
##
## $`3`
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 67.0 69.0 72.0 74.6 76.0 89.0
Tenemos sólo 18 datos en la muestra, lo cual ya representa un problema para cualquier inferencia estadística: los estadísticos se han calculado con poca información, que sería insuficiente para estimar los parámetros (siguiendo la lógica paramétrica). Un problema detectado.
Usemos un histograma:
par(mfrow=c(3,1))
hist(Empresa$performance[Empresa$grupo==1])
hist(Empresa$performance[Empresa$grupo==2])
hist(Empresa$performance[Empresa$grupo==3])
Usemos ahora un boxplot:
boxplot(Empresa$performance~Empresa$grupo,horizontal = F)
En los boxplots notamos que las medianas sí están alejadas; en esta situación, si quisieramos probar si la media de ambos grupos son iguales (Hipotesis Nula), un ANOVA de un sentido (prueba F-Schnedecor) podría ser una alternativa ante tal hipótesis, pero no sería confiable pues los histogramas no garantizan normalidad. Segundo problema encontrado.
Nótese además que la dispersión no es la misma, otro problema para la prueba F.
Probemos la técnica paramétrica mencionada de todas maneras:
resultado_F=summary(aov(performance ~ grupo, data = Empresa))[[1]][[5]][1]
El p-valor lo vemos así:
resultado_F
## [1] 0.01479328
Sabiendo ello, tomemos la decisión:
alfa=0.05 # puedes cambiar este valor
test=resultado_F>=alfa
text1='aceptar igualdad'
text2='rechazar igualdad'
ifelse(test,text1,text2)
## [1] "rechazar igualdad"
El problema es que la prueba F-Schnedecor no es confiable ante los problemas antes identificados.
resultado_KW=kruskal.test(performance~grupo,data=Empresa)
El p-valor lo vemos asi:
resultado_KW$p.value
## [1] 0.03556028
Sabiendo ello, tomemos la decisión:
alfa=0.05 # puedes cambiar este valor
test=resultado_KW$p.value>=alfa
ifelse(test,text1,text2)
## [1] "rechazar igualdad"
Como tenemos tres grupos, y se nos sugiere rechazar la igualdad, aun no está claro que grupo difiere de que otro grupo. Para ello se hacen pruebas post-hoc:
pairwise.wilcox.test(Empresa$performance,Empresa$grupo,p.adj = "none",exact=F)
##
## Pairwise comparisons using Wilcoxon rank sum test
##
## data: Empresa$performance and Empresa$grupo
##
## 1 2
## 2 0.027 -
## 3 0.055 0.464
##
## P value adjustment method: none
Del resultado anterior, la mayor diferencia es probablemente la que existe entre el grupo 1 y 2. Les parece bien?
Podemos controlar el efecto de multiples comparaciones:
pairwise.wilcox.test(Empresa$performance,Empresa$grupo,p.adj = "fdr",exact=F)
##
## Pairwise comparisons using Wilcoxon rank sum test
##
## data: Empresa$performance and Empresa$grupo
##
## 1 2
## 2 0.080 -
## 3 0.083 0.464
##
## P value adjustment method: fdr
De aqui, no se haya diferencia entre los grupos! A que se debe, si por el boxplot podríamos intuir que hay diferencia al menos entre el grupo 1 y 3!
Hacerlo en minitab es muy sencillo también. Puede ver los detalles en este video.
Paso 1: Luego de abrir archivo, escriba estos comandos; luego, ejecute:
Paso 2: Lea resultados y decida:
1 La clase está basada en el material coordinado y compartido con los demás profesores del curso: Grabiela Montes, Carlos Caycho, Carlos Jaimes, Carlos López, Víctor Merino, Kelva Llanos, Jaime Porras, Marivel Vega. ↩