python - tabla - que es puntuacion zy para que sirve
Convertir puntaje Z(valor Z, puntaje estándar) en valor p para distribución normal en Python (4)
¿Cómo se convierte un Z-score de la distribución Z (distribución normal estándar, distribución Gaussiana) a un valor p ? Todavía tengo que encontrar la función mágica en el módulo de stats
de Scipy para hacer esto, pero uno debe estar allí.
Aha! Lo encontré: scipy.special.ndtr
! Esto también parece estar bajo scipy.stats.stats.zprob
también (que es solo un puntero a ndtr
).
Específicamente, dado un ejemplo unidimensional numpy.array
z_scores
, uno puede obtener los p-values como
p_values = 1 - scipy.special.ndtr(z_scores)
o alternativamente
p_values = scipy.special.ndtr(-z_scores)
Creo que la función de distribución acumulativa (cdf) es preferible a la función de sobreviviente. La función de sobreviviente se define como 1-cdf, y puede comunicar incorrectamente las suposiciones que el modelo de lenguaje usa para los percentiles direccionales. Además, la función de punto porcentual (ppf) es la inversa de la cdf, que es muy conveniente.
>>> import scipy.stats as st
>>> st.norm.ppf(.95)
1.6448536269514722
>>> st.norm.cdf(1.64)
0.94949741652589625
Me gusta un poco mejor la función de supervivencia (probabilidad de cola superior) de la distribución normal, porque el nombre de la función es más informativo:
p_values = scipy.stats.norm.sf(abs(z_scores)) #one-sided
p_values = scipy.stats.norm.sf(abs(z_scores))*2 #twosided
La "norma" de distribución normal es una de alrededor de 90 distribuciones en scipy.stats
norm.sf también llama a la función correspondiente en scipy.special como en el ejemplo de gotgenes
pequeña ventaja de la función de supervivencia, sf: la precisión numérica debería ser mejor para los cuantiles cercanos a 1 que el uso del cdf
De la fórmula:
import numpy as np
import scipy.special as scsp
def z2p(z):
"""From z-score return p-value."""
return 0.5 * (1 + scsp.erf(z / np.sqrt(2)))