Validación y Análisis · Tema 16

Mann-Whitney

Dos grupos independientes, sin suponer normalidad: ¿los valores de uno tienden a superar a los del otro? U cuenta cada duelo.

01 · Punto de partida

Dos sucursales, una pregunta

Querés comparar esperas de dos sucursales (o real vs. simulado con corridas independientes). Las distribuciones son sesgadas y hay atípicos: el t de medias es frágil. Mann-Whitney pregunta algo más robusto:

  • ¿Un dato nuevo de B suele superar a uno de A?
  • ¿Cuántos de los nA×nB duelos gana cada grupo?
  • ¿Esa dominancia es azar o sistemática?
  • ¿Cuánto vale en la práctica (además del p)?

02 · Definición

Rangos, U y supuestos

⧉

Rangos conjuntos

Se juntan N = nA+nB datos, se ordenan y se reparten rangos (promedio en empates). R_B = suma de rangos de B.

U

Duelos

U_B = R_B − nB(nB+1)/2 cuenta pares (b>a). U_A + U_B = nA·nB. Bajo H0, U ≈ mitad.

✓

Supuestos

Independencia dentro y entre grupos, variable al menos ordinal/continua. No pide normalidad ni igual varianza (para dominancia).

Lectura de P(B>A) como efecto.
P(B>A)LecturaEjemplo
0,50EmpateMisma distribución
0,65Ventaja moderadaB supera 2 de cada 3 veces
0,80+Dominancia claraDecisión práctica, no solo p

03 · Método

Protocolo en 5 pasos

  1. 1
    Verificar independencia.

    Dos grupos distintos sin apareo. Si hay pareo por día o tanque, es Wilcoxon (Tema 17), no este.

  2. 2
    Rankear juntos con empates promediados.

    Ordenar N valores; empates comparten promedio. Anotar R_A y R_B.

  3. 3
    Calcular U y P(B>A).

    U_B = R_B − nB(nB+1)/2; efecto = U_B/(nA·nB). Informar ambos, no solo p.

  4. 4
    Aproximar z si n ≥ 10.

    μ = nA·nB/2, σ = √(nA·nB(N+1)/12), z = (U−μ)/σ. Con n chico usar tabla exacta.

  5. 5
    Dictaminar bilateral con efecto.

    «U = 190/256, p ≈ 0,01, P = 0,74: B domina». Sin efecto, el p es titular sin noticia.

rangos→U + P→z + p→efecto

04 · Lectura fina

Medianasy empates

Medianas

Solo si misma forma

Con formas parecidas, dominancia ≈ mediana B > mediana A. Con formas distintas, informar ambas distribuciones, no solo medianas.

Empates y chicos

Correcciones

Muchos empates → σ con corrección (menor). n < 10 → tabla exacta, no z. Unilateral solo si se pre-registró la dirección.

Rank-biserial
r = 2·P−1 (−1…1): versión simétrica del efecto. 0 empate, 0,5 ventaja grande.
Bilateral por defecto
H0: P = 0,5 contra P ≠ 0,5. Unilateral («B>A») exige hipótesis direccional previa.
No es t fallido
Si el t no da y se «prueba» Mann-Whitney hasta que dé, es p-hacking. El test se elige por diseño y forma, antes.

05 · Representación en Python

U a mano con 5 + 5

Python en tu navegador. Sin librerías: rangos, U, z y p normal.

A = [11, 12, 12, 13, 14]
B = [12, 13, 14, 15, 16]
import math

juntos = sorted([(v, 'A') for v in A] + [(v, 'B') for v in B])
# rangos con promedio en empates
rangos, i = [], 0
while i < len(juntos):
    j = i
    while j+1 < len(juntos) and juntos[j+1][0] == juntos[i][0]:
        j += 1
    prom = (i+1 + j+1) / 2
    rangos += [prom] * (j-i+1)
    i = j+1
RB = sum(r for (_, g), r in zip(juntos, rangos) if g == 'B')
nA, nB = len(A), len(B)
UB = RB - nB*(nB+1)/2
mu = nA*nB/2
sigma = math.sqrt(nA*nB*(nA+nB+1)/12)
z = (UB-mu)/sigma
# p bilateral normal
t = 1/(1+0.2316419*abs(z))
d = 0.3989423*math.exp(-z*z/2)
p1 = d*t*(0.3193815+t*(-0.3565638+t*(1.781478+t*(-1.821256+t*1.330274))))
p = 2*(1-p1 if z > 0 else p1)
print(f"RB={RB} UB={UB} P={UB/(nA*nB):.2f} z={z:.2f} p≈{p:.3f}")

RB = 33,5, UB = 18,5, P = 0,74, z ≈ 1,47, p ≈ 0,14: ventaja visible pero sin evidencia al 5% con n=5.

Efecto además de p

P = UB/(nA*nB)
print(f"P(B>A)={P:.2f} rank-biserial={2*P-1:+.2f}")
print("Con n=5 el p no puede bajar mucho: pedir más datos (Tema 28)")

06 · Exploración

Laboratorio: duelos U en vivo

A ∼ N(10, 1), B ∼ N(10 + diferencia, 1) más atípico en B. Mové diferencia, n y atípico. El panel muestra R_B, U, p normal y P(B>A). La línea gruesa es la mediana de cada grupo.

EXPERIMENTO 16

Mann-Whitney por rangos

U = R_B − n(n+1)/2 · α = 0,05 bilateral

Los resultados numéricos aparecen debajo.
U (B) / máx0 / 0
p aprox.1,00
P(B>A)0,50
Veredicto—

Con diferencia 1 y n=16, B gana la mayoría de los duelos.

Puntos por grupo con medianas gruesas. El rojo es el atípico. U cuenta pares ganados por B sobre n×n posibles.

Preguntas para explorar

  1. Con diferencia 1, n=16 y atípico 0: ¿U, p y P? ¿Evidencia al 5%?
  2. Agregá atípico +8: ¿U y p se mueven mucho? ¿Por qué los rangos lo absorben?
  3. Bajá a n=6 con diferencia 1: ¿p aunque P sea 0,75? ¿Qué enseña sobre potencia mínima?
Ver respuestas sugeridas
  1. U ≈ 190/256, p ≈ 0,01, P ≈ 0,74: dominancia significativa. B gana 3 de cada 4 duelos.
  2. Casi nada: el atípico aporta un solo rango máximo. En medias habría movido todo; en rangos, un puesto.
  3. p ≈ 0,2 aunque P = 0,75: con n=6 no hay potencia para el 5%. El efecto importa pero la evidencia no alcanza: pedir más n.

07 · Comprensión

Confusiones frecuentes

«Mann-Whitney compara medianas»

Solo con misma forma. En general compara dominancia P(B>A). Con formas distintas, medianas iguales pueden dar p chico.

«Vale para datos pareados»

No: exige independencia entre grupos. Pareados → Wilcoxon (Tema 17). Mezclarlos invalida el p.

«Unilateral porque conviene»

Unilateral solo con dirección pre-registrada. Elegirlo tras ver los datos duplica la falsa alarma.

«p ≈ 0,06 casi significativo»

No existe «casi»: con α = 0,05 no hay evidencia. O se acepta, o se pide más n con protocolo (Tema 28).

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: U de un caso mínimo

A = [1, 2], B = [3, 4]. ¿U_B y P?

A, B = [1, 2], [3, 4]
UB = sum(1 for a in A for b in B if b > a)
print(f"UB={UB}/{len(A)*len(B)} P={UB/(len(A)*len(B)):.2f} (dominancia total)")
Ver solución razonada

UB = 4/4, P = 1,00: B gana todos los duelos. Aun así con n=2 el p exacto bilateral es 0,33: efecto total sin evidencia suficiente.

Ejercicio 2: el atípico que no voltea U

¿U con y sin atípico de 100?

A = [11, 12, 13]
for B in [[12, 13, 14], [12, 13, 100]]:
    u = sum(1 for a in A for b in B if b > a) + 0.5*sum(1 for a in A for b in B if b == a)
    print(B, "U =", u)
Ver solución

6,5 vs. 7,0 sobre 9: el 100 solo suma medio duelo extra. La media saltaría de 13 a 41; U ni se inmuta.

Ejercicio 3: informar completo

Redactá el informe de U = 190/256, p ≈ 0,01, medianas 10 vs. 11.

Ver una posible respuesta
print("Mann-Whitney bilateral: U=190/256, p≈0.01, P(B>A)=0.74.")
print("Medianas 10 vs 11. B domina: 3 de cada 4 duelos. n=16+16.")

Efecto + significación + n + medianas: el lector sabe si importa y si alcanza. p solo no dice nada de eso.

09 · Síntesis

Ideas para recordar

  • Solo independientes: dos grupos distintos sin apareo.
  • U = duelos ganados; P = U/(nA·nB) es el efecto que importa.
  • z normal con n ≥ 10; tabla exacta con n chico; empates promediados.
  • Bilateral por defecto; informar U + P + p + n + medianas.
  • Pareados → Wilcoxon (Tema 17), no este.

En el próximo tema, el hermano pareado: Wilcoxon de signos y rangos.