Files
fn_registry/python/functions/datascience/normality_tests.md
T
egutierrez 763e06c127 feat(browser): auto-commit con 178 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-20 18:22:23 +02:00

3.7 KiB

id, name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, example, tested, tests, test_file_path, file_path, params, output
id name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports example tested tests test_file_path file_path params output
normality_tests_py_datascience normality_tests function py datascience 1.0.0 pure def normality_tests(values: list, alpha: float = 0.05) -> dict Tests de normalidad (Jarque-Bera, D'Agostino-Pearson, Shapiro-Wilk) sobre una columna numerica para decidir si sigue una distribucion normal. Descarta None/NaN/no-numericos y reporta consenso de los tests aplicables.
eda
models
statistics
normality
hypothesis-test
distribution
shapiro
jarque-bera
false
math
scipy
from normality_tests import normality_tests import numpy as np result = normality_tests(np.random.default_rng(0).normal(0, 1, 1000).tolist()) # result["is_normal"] == True true
test_normal_large_sample_is_normal
test_skewed_sample_is_not_normal
test_small_sample_returns_note
test_drops_none_nan_and_non_numeric
test_shapiro_skipped_above_5000
test_normal_below_eight_after_cleaning_is_note
python/functions/datascience/normality_tests_test.py python/functions/datascience/normality_tests.py
name desc
values Lista de valores numericos (una columna). None, NaN, infinitos y no-numericos se descartan antes de testear. Los booleanos se excluyen.
name desc
alpha Nivel de significancia por test (default 0.05). normal = p > alpha (no se rechaza H0 de normalidad).
dict. Si n < 8 (tras limpiar): {n, note: "muestra insuficiente", is_normal: None}. En otro caso: {n, jarque_bera:{stat,p,normal}, dagostino:{stat,p,normal}, shapiro:{stat,p,normal}|None (solo 3<=n<=5000), is_normal:bool}. En cada test normal = p > alpha. is_normal es el consenso (todos los tests aplicables coinciden en que los datos son normales).

Ejemplo

from normality_tests import normality_tests
import numpy as np

# Muestra normal -> is_normal True
normal = np.random.default_rng(0).normal(loc=10, scale=2, size=1000).tolist()
r = normality_tests(normal)
r["is_normal"]                  # True
r["jarque_bera"]["normal"]      # True
r["shapiro"]["p"] > 0.05        # True

# Muestra exponencial (sesgada) -> is_normal False
expo = np.random.default_rng(7).exponential(scale=1.0, size=1000).tolist()
normality_tests(expo)["is_normal"]   # False

# Muestra insuficiente
normality_tests([1, 2, 3, 4, 5])
# {"n": 5, "note": "muestra insuficiente", "is_normal": None}

Cuando usarla

Antes de aplicar un test parametrico o un estimador que asume normalidad (t-test, ANOVA, regresion OLS con intervalos de confianza, z-score para outliers): comprueba primero si la columna es realmente normal. Tambien en la fase EDA para decidir entre media (datos normales) y mediana/transformacion log (datos sesgados), y como gate barato antes de elegir un modelo que asuma errores gaussianos.

Gotchas

  • Funcion pura y determinista para una entrada dada, pero los p-valores dependen del tamano de muestra: con n muy grande casi cualquier desviacion minuscula de la normalidad rechaza H0 (poder estadistico alto). Interpreta is_normal junto al tamano n y al contexto, no como verdad absoluta.
  • Shapiro-Wilk solo se ejecuta para 3 <= n <= 5000; fuera de ese rango su clave es None y is_normal se decide solo con Jarque-Bera y D'Agostino.
  • Con n < 8 no se ejecuta ningun test: devuelve note e is_normal: None. Cuenta el n tras limpiar (None/NaN/no-numericos descartados), no la longitud bruta de la lista.
  • D'Agostino-Pearson (normaltest) requiere internamente n >= 8 para skew y kurtosis; por eso el umbral de muestra insuficiente es 8.