Cómo realizar fácilmente una prueba de Kruskal-Wallis en R

Se utiliza una prueba de Kruskal-Wallis para determinar si existe o no una diferencia estadísticamente significativa entre las medianas de tres o más grupos independientes.

Esta prueba es el equivalente no paramétrico del ANOVA de una vía y generalmente se usa cuando se viola el supuesto de normalidad.

La prueba de Kruskal-Wallis no asume normalidad en los datos y es mucho menos sensible a valores atípicos que el ANOVA de una vía.

Cómo realizar una prueba de Kruskal-Wallis en R

El siguiente ejemplo ilustra cómo realizar una prueba de Kruskal-Wallis en R.

Fondo

Un investigador quiere saber si tres medicamentos tienen o no efectos diferentes sobre el dolor de espalda, por lo que recluta a 30 personas que experimentan un dolor de espalda similar y los divide al azar en tres grupos para recibir el medicamento A, el medicamento B o el medicamento C.

Después de un mes de tomar el medicamento, el investigador le pide a cada individuo que califique su dolor de espalda en una escala de 1 a 100, donde 100 indica el dolor más severo.

El investigador realiza una prueba de Kruskal-Wallis usando un nivel de significancia de .05 para determinar si existe una diferencia estadísticamente significativa entre las calificaciones medianas de dolor de espalda en estos tres grupos.

El siguiente código crea el marco de datos con el que trabajaremos:

#Haga que este ejemplo sea reproducible
 set.seed (0)

#create marco de datos
data <- data.frame (fármaco = rep (c ("A", "B", "C"), cada uno = 10),
                   dolor = c (runif (10, 40, 60),
                            runif (10, 45, 65),
                            runif (10, 55, 70)))

#ver las primeras seis filas del marco de datos
cabeza (datos)
 
# dolor por drogas
# 1 A 57.93394
# 2 A 45.31017
# 3 A 47.44248
# 4 A 51.45707
# 5 A 58.16416
N.º 6 A 44.03364

La primera columna en el marco de datos muestra el medicamento que la persona tomó durante un mes y la segunda columna muestra el dolor de espalda informado después de un mes, en una escala de 0 a 100.

Explorando los datos

Antes de realizar la prueba de Kruskal-Wallis, podemos obtener una mejor comprensión de los datos al encontrar la media y la desviación estándar del dolor de espalda para cada fármaco utilizando el paquete dplyr :

#cargar paquete dplyr
biblioteca (dplyr)

# encontrar la desviación estándar y media del dolor de espalda informado para cada grupo de fármacos
datos%>%
  group_by (fármaco)%>%
   resumir (media = media (dolor),
            sd = sd (dolor))

# A tibble: 3 x 3
# droga significa sd
#    
# 1 A 52,7 5,60
# 2 B 54,7 5,99
# 3 C 61,9 4,88  

También podemos crear un diagrama de caja para cada uno de los tres medicamentos para visualizar la distribución del dolor de espalda para cada grupo:

#create boxplots
 boxplot (dolor ~ fármaco,
datos = datos,
main = "Dolor informado por fármaco",
xlab = "Medicamento",
ylab = "Dolor informado",
col = "azul acero",
border = "negro")

Diagramas de caja en R para la prueba de Kruskal-Wallis

Solo a partir de estos diagramas de caja podemos ver que el dolor medio reportado es más alto para los participantes que usaron el fármaco C.

También podemos ver que la desviación estándar (la «longitud» de la gráfica de caja) para el dolor informado es ligeramente mayor entre los participantes que usaron el fármaco A o el fármaco B en comparación con los que utilizaron el fármaco C.

A continuación, realizaremos la prueba de Kruskal-Wallis para ver si estas diferencias visuales son realmente estadísticamente significativas.

Realización de la prueba de Kruskal-Wallis

La sintaxis general para realizar una prueba de Kruskal-Wallis en R es la siguiente:

kruskal.test (variable de respuesta ~ variable de predicción, datos = conjunto de datos)

En nuestro ejemplo, podemos utilizar el siguiente código para realizar la prueba de Kruskal-Wallist, utilizando el dolor como variable de respuesta y el fármaco como variable predictora:

kruskal.test (dolor ~ fármaco, datos = datos)

# Prueba de suma de rangos de Kruskal-Wallis
#
#data: dolor por drogas
# Chi-cuadrado de Kruskal-Wallis = 11,105, gl = 2, valor p = 0,003879

A partir de la salida, podemos ver que el estadístico de prueba de chi-cuadrado es 11,105 y el valor p correspondiente es 0,003879 . Dado que este valor p es menor que el nivel de significación de 0,05, esto significa que hay una diferencia estadísticamente significativa entre los niveles de dolor informados entre los tres fármacos.

Analizar las diferencias de grupo

Una vez que hayamos identificado que existe una diferencia estadísticamente significativa entre los niveles de dolor informados para los tres fármacos, podemos realizar una prueba post hoc para determinar exactamente qué grupos de tratamiento difieren entre sí.

Para nuestra prueba post hoc, usaremos la función pairwise.wilcox.test () para calcular comparaciones por pares entre los grupos usando la siguiente sintaxis:

pairwise.wilcox.test (variable de respuesta ~ variable de predicción, método p.adjust)

El siguiente código ilustra cómo aplicar esta función a nuestros datos:

pairwise.wilcox.test (datos $ dolor, datos $ fármaco, p.adjust.method = "BH")

# Comparaciones por pares usando la prueba de suma de rangos de Wilcoxon 
#
#data: datos $ dolor y datos $ fármaco 
#
# AB     
#B 0.3527 -     
#C 0,0032 0,0220
#
# Método de ajuste del valor P: BH 

Las comparaciones por pares muestran que la diferencia entre los niveles de dolor informados para el fármaco A y el fármaco C es estadísticamente significativa (valor p = 0,0032 ) y la diferencia entre los niveles de dolor informados para el fármaco B y el fármaco C es estadísticamente significativa (valor p = .0220 ).

Estos resultados se alinean con lo que vimos en los diagramas de caja anteriormente. Vimos que los niveles de dolor informados para los participantes que tomaban el medicamento C eran notablemente más altos en comparación con el medicamento A y el medicamento B, y que solo había una diferencia sutil entre el medicamento A y el medicamento B.

El código completo

Puede encontrar el código completo utilizado en este análisis aquí:

#Haga que este ejemplo sea reproducible
 set.seed (0)

#create data frame
 data <- data.frame (fármaco = rep (c ("A", "B", "C"), cada uno = 10),
                   dolor = c (runif (10, 40, 60),
                   runif (10, 45, 65),
                   runif (10, 55, 70)))

#ver las primeras seis filas del marco de datos
cabeza (datos)

#cargar biblioteca dplyr
biblioteca (dplyr)

# encontrar la desviación estándar y media del dolor de espalda informado para cada grupo de fármacos
datos%>%
  group_by (fármaco)%>%
  resumir (media = media (dolor),
            sd = sd (dolor))

#visualizar diagrama de caja de datos
 (dolor ~ fármaco,
datos = datos,
main = "Dolor informado por fármaco",
xlab = "Medicamento",
ylab = "Dolor informado",
col = "azul acero",
border = "negro")

# realizar la prueba de Kruskal-Wallis
 kruskal.test (dolor ~ fármaco, datos = datos)

# realizar una prueba post-hoc para comparaciones por pares
 pairwise.wilcox.test (datos $ dolor, datos $ fármaco, p.adjust.method = "BH")

Recursos adicionales

Prueba de Kruskal-Wallis: definición, fórmula y ejemplo
Calculadora de la prueba de Kruskal-Wallis
Cómo verificar los supuestos de ANOVA

  • https://r-project.org
  • https://www.python.org/
  • https://www.stata.com/

Deja un comentario

Muchas pruebas estadísticas suponen que los residuos de una variable de respuesta se distribuyen normalmente. Sin embargo, a menudo los…
statologos comunidad-2

Compartimos información EXCLUSIVA y GRATUITA solo para suscriptores (cursos privados, programas, consejos y mucho más)

You have Successfully Subscribed!