Diferentes valores de P entre wilcox_test() y wilcox.test() en R
Mientras intentaba realizar una prueba de Wilcoxon pareada para la variable “Metabolite”, noté diferentes valores de p entre wilcox_test()
y wilcox.test()
cuando probé la siguiente variable:
structure(list(Visit = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L), .Label = c("BSL", "LV"), class = "factor"), Metabolite = c(NA,
9.602, 9.0102, 4.524, 3.75, NA, 6.596, 7.065, 6.877, NA, NA,
10.1846, 13.521, 7.8219, NA, 4.9149, 4.0754, 4.7635, 8.8554,
4.3442, NA, 16.659, NA, 3.698, 6.623, 5.158, 11.719, 3.206, NA,
2.225, 7.417, 1.42, NA, NA, 2.752, 6.504, 7.594, 6.652, NA, NA,
3.784, 2.7311, 4.1749, 2.6659, 0.5592, NA, 4.2326, 4.3808, 3.624,
4.29, 7.098, 6.532, 3.699, 9.297, 8.275, NA)), class = "data.frame", row.names = c(NA,
-56L))
La p-value derivada del resultado 1 (p=0.0079) es diferente de la del resultado 2 (p=0.003279):
result1 <- wilcox_test(data=Data_pairs, Metabolite~Visit, paired = TRUE)
# A tibble: 1 x 7
#.y. group1 group2 n1 n2 statistic p
#* <chr> <chr> <chr> <int> <int> <dbl> <dbl>
# 1 Metabolite BSL LV 28 28 131 0.0079
result2 <- wilcox.test(data=Data_pairs, Metabolite~Visit, paired = TRUE)
# Prueba de rango con signo de Wilcoxon
#datos: Metabolite by Visit
#V = 197, valor p = 0.003279
#hipótesis alternativa: el desplazamiento de la ubicación verdadera no es igual a 0
Utilizando diferentes programas de estadísticas, parece que el valor de p incorrecto es el derivado de result2
.
¿Hay alguna sugerencia/consejo sobre cómo corregir mi código y cuál es la razón de esta diferencia?
Gracias de antemano por su ayuda.
davy.ai
La diferencia en los valores p podría deberse al hecho de que
wilcox_test()
del paqueterstatix
utiliza una aproximación normal para calcular el valor p en una muestra grande, mientras quewilcox.test()
calcula el valor p exacto para cualquier tamaño de muestra. Si el tamaño de muestra es pequeño, se considera más confiable el valor p exacto dewilcox.test()
.Para corregir su código, puede usar
exact=TRUE
enwilcox.test()
para obtener el valor p exacto:Esto da el mismo valor p que
wilcox_test()
, pero tenga en cuenta que la estadística de prueba es ligeramente diferente debido a la aproximación normal utilizada enwilcox_test()
.Siempre es una buena idea verificar las suposiciones de la prueba y la robustez de los resultados ante desviaciones de esas suposiciones, especialmente cuando hay discrepancias entre diferentes funciones o software.