Contraste de Hipótesis

Contraste por permutaciones: permutation test

Un esquema de contraste de hipótesis para \(X \sim N(\mu, \sigma^2)\) con hipótesis:

\[ H_0: \mu = \mu_0 \quad \text{vs} \quad H_A: \mu \ne \mu_0 \]


¿Qué es un Permutation Test?

Un Permutation Test (o prueba de permutación) es un método no paramétrico utilizado para probar hipótesis estadísticas. En lugar de depender de supuestos sobre la distribución de los datos, este enfoque utiliza las permutaciones (reordenamientos) de los datos para construir una distribución nula y evaluar la significancia estadística de un estadístico observado.

El objetivo principal es determinar si un efecto observado (como la diferencia entre medias de dos grupos) podría haberse obtenido por azar, bajo la suposición de que la hipótesis nula (\(H_0\)) es verdadera.

Procedimiento general:

  1. Definir la hipótesis nula (\(H_0\)):
    • Usualmente establece que no hay diferencia entre los grupos o que las etiquetas de los datos son intercambiables.
  2. Calcular el estadístico observado:
    • Por ejemplo, la diferencia de medias, suma de ranks, correlación, etc., dependiendo del contexto.
  3. Generar permutaciones:
    • Mezclar aleatoriamente las etiquetas de los datos (o reasignar los valores entre los grupos), conservando las características originales.
  4. Calcular el estadístico bajo cada permutación:
    • Para cada permutación, calcular el estadístico (como la diferencia de medias) y formar la distribución nula.
  5. Evaluar la significancia:
    • Comparar el estadístico observado con la distribución nula generada por las permutaciones.
    • El p-valor se calcula como la proporción de permutaciones cuyo estadístico es tan extremo (o más) que el observado.

Ejemplo práctico: Comparación de medias entre dos grupos

Supongamos que queremos evaluar si existe una diferencia significativa entre los rendimientos académicos de estudiantes que usan un método de estudio tradicional frente a aquellos que usan un método experimental.

Datos:

Hipótesis:

Procedimiento:

  1. Calcular la diferencia de medias observada: \[ \text{Diferencia observada} = \bar{X}_\text{experimental} - \bar{X}_\text{tradicional}. \]

  2. Generar todas las permutaciones posibles (o una muestra aleatoria si los datos son grandes) de las etiquetas de grupo.

  3. Para cada permutación, recalcular la diferencia de medias y construir la distribución nula.

  4. Calcular el p-valor como la proporción de permutaciones en las que la diferencia simulada es mayor o igual (en valor absoluto) que la diferencia observada.


Código en Python

Aquí está un ejemplo práctico de un permutation test en Python:

import numpy as np

# Datos
grupo_tradicional = np.array([70, 75, 80, 85, 90])
grupo_experimental = np.array([88, 92, 94, 96, 98])

# Diferencia observada
observed_diff = np.mean(grupo_experimental) - np.mean(grupo_tradicional)

# Combinar los grupos
datos_combinados = np.concatenate([grupo_tradicional, grupo_experimental])

# Permutaciones
n_permutaciones = 10000
differences = []

for _ in range(n_permutaciones):
    np.random.shuffle(datos_combinados)
    grupo_1_perm = datos_combinados[:len(grupo_tradicional)]
    grupo_2_perm = datos_combinados[len(grupo_tradicional):]
    diff = np.mean(grupo_2_perm) - np.mean(grupo_1_perm)
    differences.append(diff)

# Calcular el p-valor
differences = np.array(differences)
p_value = np.mean(np.abs(differences) >= np.abs(observed_diff))

# Resultados
print(f"Diferencia observada: {observed_diff:.2f}")
print(f"P-valor: {p_value:.4f}")

# Visualizar la distribución
import matplotlib.pyplot as plt

plt.hist(differences, bins=30, alpha=0.7, color='gray', label='Distribución nula')
plt.axvline(observed_diff, color='red', linestyle='--', label='Diferencia observada')
plt.axvline(-observed_diff, color='red', linestyle='--')
plt.title('Prueba de permutación')
plt.xlabel('Diferencia de medias')
plt.ylabel('Frecuencia')
plt.legend()
plt.show()