Convertir Z-score (valeur Z, score standard) en p-valeur pour la distribution normale en Python
Comment convertir un Z-score de la Z-distribution (distribution normale standard, distribution Gaussienne) pour un p valeur? Je n'ai pas encore trouvé la fonction magique dans le module stats
de Scipy pour ce faire, mais il faut être là.
4 réponses
J'aime un peu mieux la fonction de survie (Probabilité de queue supérieure) de la distribution normale, car le nom de la fonction est plus informatif:
p_values = scipy.stats.norm.sf(abs(z_scores)) #one-sided
p_values = scipy.stats.norm.sf(abs(z_scores))*2 #twosided
Distribution normale "norm" est l'une des quelque 90 distributions de scipy.les statistiques
Norme.sf appelle également la fonction correspondante dans scipy.spécial comme dans l'exemple gotgenes
Petit avantage de la fonction de survie, sf: la précision numérique devrait être meilleure pour les quantiles proches de 1 que d'utiliser le cdf
Je pense que la fonction de distribution cumulative (cdf) est préférée à la fonction survivor. La fonction survivor est définie comme 1-cdf et peut communiquer incorrectement les hypothèses que le modèle linguistique utilise pour les percentiles directionnels. En outre, la fonction de point de pourcentage (ppf) est l'inverse du cdf, ce qui est très pratique.
>>> import scipy.stats as st
>>> st.norm.ppf(.95)
1.6448536269514722
>>> st.norm.cdf(1.64)
0.94949741652589625
Aha! Je l'ai trouvé: scipy.special.ndtr
! Cela semble également être sous scipy.stats.stats.zprob
(qui est juste un pointeur vers ndtr
).
Plus précisément, étant donné une instance unidimensionnelle numpy.array
z_scores
, on peut obtenir les valeurs p comme
p_values = 1 - scipy.special.ndtr(z_scores)
Ou alternativement
p_values = scipy.special.ndtr(-z_scores)
De la Formule:
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)))