Tanto scipy.stats.ranksums de python como wilcox.test de R se supone que calculan los valores de p de dos lados para una prueba de suma de rangos de Wilcoxon. Pero cuando corro ambas funciones en los mismos datos, consigo los valores de p que difieren en varios órdenes de magnitud:scipy.stats.ranksums de python contra wilcox.test de R
R:
> x=c(57.07168,46.95301,31.86423,38.27486,77.89309,76.78879,33.29809,58.61569,18.26473,62.92256,50.46951,19.14473,22.58552,24.14309)
> y=c(8.319966,2.569211,1.306941,8.450002,1.624244,1.887139,1.376355,2.521150,5.940253,1.458392,3.257468,1.574528,2.338976)
> print(wilcox.test(x, y))
Wilcoxon rank sum test
data: x and y
W = 182, p-value = 9.971e-08
alternative hypothesis: true location shift is not equal to 0
Python:
>>> x=[57.07168,46.95301,31.86423,38.27486,77.89309,76.78879,33.29809,58.61569,18.26473,62.92256,50.46951,19.14473,22.58552,24.14309]
>>> y=[8.319966,2.569211,1.306941,8.450002,1.624244,1.887139,1.376355,2.521150,5.940253,1.458392,3.257468,1.574528,2.338976]
>>> scipy.stats.ranksums(x, y)
(4.415880433163923, 1.0059968254463979e-05)
Así que R me da 1e -7 mientras que Python me da 1e-5.
¿De dónde viene esta diferencia y cuál es el valor de p 'correcto'?
Sí, Scipy devuelve el puntaje z aquí. http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ranksums.html –
Creo que también pueden existir diferencias cuando se manejan las ligaduras, que pueden tener que manejarse específicamente en scipy. – seberg
¡Gracias por la explicación! ¿Sabes si hay alguna manera de forzar a Scipy a calcular un valor p exacto y también a manejar lazos? Sé que hay una función alternativa en Scipy llamada scipy.stats.mannwhitneyu que maneja vínculos y hace una corrección de continuidad, pero aún no es exacta y los documentos indican que debo tener al menos 20 muestras para cada uno de todos modos. – Nils