Validación y Análisis · Tema 15

Tests no paramétricos

Cuando los datos no son normales, vienen sesgados o traen atípicos, las medias mienten: los rangos dicen la verdad robusta.

01 · Punto de partida

La media es frágil; el orden es robusto

Un solo tiempo de espera de 300 minutos (corte de sistema) arrastra la media de 12 a 25, pero apenas mueve la mediana de 12 a 13. Los tests clásicos (t, ANOVA) suponen normalidad y sufren con sesgos y atípicos. Los no paramétricos trabajan con rangos y signos: importa quién supera a quién, no por cuánto.

  • ¿Tus datos son normales o mejor no suponerlo?
  • ¿Las muestras son independientes o pareadas?
  • ¿Qué test corresponde a tu diseño?
  • ¿Qué tamaño del efecto informa además del p?

02 · Definición

Paramétrico frente a no paramétrico

◈

Paramétrico

Supone forma (normal) y compara parámetros (medias). Potente si el supuesto vale, frágil si no.

⧉

No paramétrico

Solo supone continuidad e independencia. Compara distribuciones, medianas o dominancia estocástica vía rangos.

⚖

Precio

Si todo era normal, pierde ~5% de potencia. Si no lo era, gana robustez y honestidad. Con atípicos, no hay debate.

Mapa de ruta (detalle en Temas 16–17).
DiseñoParamétricoNo paramétricoTema
2 indep.t de 2 muestrasMann-Whitney16
2 pareadast pareadaWilcoxon signos17
1 muestra vs. valort de 1 muestraSignos / Wilcoxon 1 muestra17

03 · Cómo elegir

El árbol en 3 preguntas

  1. 1
    ¿Pareadas o independientes?

    Mismo tanque antes/después → pareadas (Wilcoxon). Dos sucursales distintas → independientes (Mann-Whitney). Equivocarse aquí invalida todo.

  2. 2
    ¿Normalidad sostenible?

    n grande y simétrico sin atípicos → t. Sesgo, colas pesadas o atípicos → rangos. Con duda, rangos.

  3. 3
    ¿Qué efecto informa?

    Diferencia de medianas + probabilidad de superioridad P(X>Y), no solo p. Un p ≈ 0 con efecto 0,1 es irrelevante.

diseño→normalidad→rangos + efecto

04 · Rangos sin miedo

Ordenar, empatar y sumar

Idea

Juntar, ordenar, repartir

Se juntan ambas muestras, se ordenan de menor a mayor y se reparten rangos 1…N. Cada grupo suma los suyos: si uno acumula los grandes, domina.

Empates

Rango promedio

Valores iguales comparten el promedio de los rangos que ocupan. Muchos empates → corrección en la varianza (Temas 16–17).

U de Mann-Whitney
Cuenta cuántos pares (A,B) gana A. U grande = A domina. Se aproxima a normal con n ≥ 10.
W de Wilcoxon
Suma rangos de diferencias positivas en datos pareados. Simetría bajo H0, no normalidad.
P(X>Y)
Probabilidad de que un dato nuevo de A supere uno de B. Efecto en 0…1: 0,5 = empate, 0,8 = dominancia clara.

05 · Representación en Python

Rangos a mano: la media miente, la mediana no

Python en tu navegador. Un atípico de 100 destruye la media y apenas toca los rangos.

A = [11, 12, 12, 13, 14]
B = [12, 13, 13, 14, 100]  # un atípico (corte del sistema)

def media(x):
    return sum(x) / len(x)
def mediana(x):
    s = sorted(x)
    return s[len(s)//2]

print(f"medias: A={media(A):.1f} B={media(B):.1f} (el atípico manda)")
print(f"medianas: A={mediana(A)} B={mediana(B)} (robustas)")

juntos = sorted([(v, 'A') for v in A] + [(v, 'B') for v in B])
for rango, (v, g) in enumerate(juntos, start=1):
    print(f"rango {rango}: {v} ({g})")

B suma los rangos altos por el 100, pero el resto se reparte: los rangos amortiguan sin esconder la dominancia.

P(X>Y) como efecto honesto

gana = sum(1 for a in A for b in B if b > a)
total = len(A) * len(B)
print(f"P(B>A) = {gana}/{total} = {gana/total:.2f}")
print("0.5 empate · 0.7+ dominancia que importa en la práctica")

06 · Exploración

Laboratorio: la media se deja voltear, los rangos no

Grupo A ∼ N(10, 1), grupo B ∼ N(10 + diferencia, 1) más un atípico sumado al primer dato de B. Mové la diferencia real, el n y el atípico. La banda muestra medianas; el panel calcula U, p normal y P(B>A).

EXPERIMENTO 15

Rangos robustos vs. medias frágiles

U Mann-Whitney · p normal · α = 0,05

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

Con diferencia 1 y sin atípico, B domina y el test lo detecta.

Cada punto es una medición; las líneas gruesas son medianas. El punto rojo es el atípico de B. U cuenta pares ganados por B.

Preguntas para explorar

  1. Con diferencia 1, n=16 y atípico 0: ¿U, p y P(B>A)? ¿Detecta la dominancia?
  2. Sumá atípico +8 sin tocar lo demás: ¿p y P(B>A) cambian mucho o poco? ¿Qué habría pasado con un t de medias?
  3. Poné diferencia 0 con atípico +8: ¿el test declara dominancia por un solo punto? ¿Qué dice eso de la robustez?
Ver respuestas sugeridas
  1. U alto (~190/256), p ≈ 0,01, P ≈ 0,75: dominancia clara y significativa. Los rangos la capturan sin suponer normalidad.
  2. Cambian poco (el atípico aporta un solo rango alto): p sigue ≈ 0,01. Un t habría inflado media y varianza y hasta podría perder significación por el desvío.
  3. No: P ≈ 0,55, p alto. Un solo atípico no fabrica dominancia en rangos (en medias, sí la exageraría). Robustez demostrada.

07 · Comprensión

Confusiones frecuentes

«No paramétrico = sin supuestos»

Tiene supuestos (independencia, continuidad, misma forma bajo H0), solo que no supone normalidad. «Sin supuestos» no existe.

«Compara medianas siempre»

Compara distribuciones/dominancia. Solo bajo misma forma el test equivale a comparar medianas.

«Con n chico uso no paramétrico y listo»

Con n chico ningún test tiene potencia. Los rangos protegen de atípicos, no crean evidencia de la nada.

«Si el t da significativo, no necesito rangos»

Si hay atípicos o sesgo, el t puede mentir en ambas direcciones. Con duda sobre normalidad, reportar ambos es honestidad.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: elegir el test por el diseño

¿Mann-Whitney o Wilcoxon en cada caso?

casos = ["2 sucursales distintas", "mismo tanque antes/después", "sim vs. real pareados por día"]
for c in casos:
    t = "Wilcoxon" if "antes" in c or "pareados" in c else "Mann-Whitney"
    print(c, "->", t)
Ver solución razonada

Sucursales distintas → independientes → Mann-Whitney. Antes/después y pareados por día → pareadas → Wilcoxon. El diseño manda, no la forma.

Ejercicio 2: el atípico que voltea la media

¿Media vs. mediana con un corte de 200?

x = [12, 13, 12, 14, 13, 200]
print("media", sum(x)/len(x), "| mediana", sorted(x)[len(x)//2])
Ver solución

Media 44 (absurda), mediana 13 (representativa). El t usaría 44; los rangos usarían «el mayor», sin dejarse arrastrar al 200.

Ejercicio 3: efecto además de p

Calculá P(B>A) y juzgá importancia, no solo significación.

Ver una posible respuesta
A = [10, 11, 12]
B = [11, 12, 13]
p_sup = sum(1 for a in A for b in B if b > a) / (len(A)*len(B))
print(f"P(B>A) = {p_sup:.2f} (0.67: ventaja moderada)")

0,67 es ventaja moderada aunque el p con n=3 jamás será significativo. Efecto y p cuentan historias distintas y complementarias.

09 · Síntesis

Ideas para recordar

  • Rangos, no medias, cuando hay sesgo, colas pesadas o atípicos.
  • Diseño primero: independientes → Mann-Whitney (T16); pareadas → Wilcoxon (T17).
  • Informar mediana + P(X>Y) + p + n: señal, tamaño y evidencia.
  • Robustez ≠ potencia con poco n: los datos mandan igual.
  • Con duda sobre normalidad, rangos; con normalidad clara, t.

En los próximos temas, la lupa fina: Mann-Whitney y Wilcoxon paso a paso.