Skip to content

Instantly share code, notes, and snippets.

@jmquintana79
Last active November 8, 2024 20:51
Show Gist options
  • Save jmquintana79/742642dfb377b4c0a72dd6f821aabced to your computer and use it in GitHub Desktop.
Save jmquintana79/742642dfb377b4c0a72dd6f821aabced to your computer and use it in GitHub Desktop.
import numpy as np
from scipy.stats import t
def grubbs_test(data, alpha=0.05):
"""
Realiza el Grubbs' Test para detectar un único valor atípico en la muestra de datos.
Parameters:
data (list or numpy array): Lista de datos numéricos.
alpha (float): Nivel de significancia para el test. Default es 0.05.
Returns:
bool: True si hay un valor atípico, False si no lo hay.
float: El valor de Grubbs' test estadístico.
float: El valor crítico.
"""
n = len(data)
mean_data = np.mean(data)
std_data = np.std(data, ddof=1)
# Cálculo del estadístico G
G = max(abs(data - mean_data)) / std_data
# Cálculo del valor crítico de Grubbs
t_crit = t.ppf(1 - alpha / (2 * n), n - 2)
G_critical = ((n - 1) / np.sqrt(n)) * np.sqrt(t_crit**2 / (n - 2 + t_crit**2))
# Comparación entre el estadístico G y el valor crítico
is_outlier = G > G_critical
return is_outlier, G, G_critical
# Ejemplo de uso
data = np.array([10, 12, 12, 13, 12, 14, 13, 100]) # 100 es un posible valor atípico
is_outlier, G, G_critical = grubbs_test(data)
print(f"¿Hay valor atípico? {'Sí' if is_outlier else 'No'}")
print(f"Estadístico G: {G}")
print(f"Valor crítico: {G_critical}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment