web-dev-qa-db-fra.com

Convertir le score Z (valeur Z, score standard) en valeur p pour une distribution normale dans Python

Comment convertir un score Z de la distribution Z (distribution normale standard, distribution gaussienne) en p - valeur ? Je n'ai pas encore trouvé la fonction magique dans module stats de Scipy pour ce faire, mais il faut y être.

48
gotgenes

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

la distribution normale "norm" est l'une des 90 distributions dans scipy.stats

norm.sf appelle également la fonction correspondante dans scipy.special comme dans l'exemple gotgenes

petit avantage de la fonction de survie, sf: la précision numérique devrait être meilleure pour des quantiles proches de 1 que l'utilisation du cdf

41
Josef

Je pense que la fonction de distribution cumulative (cdf) est préférée à la fonction de survivant. La fonction de survivant est définie comme 1-cdf et peut communiquer de manière incorrecte les hypothèses que le modèle de langage utilise pour les centiles directionnels. De plus, 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
26
Myles Baker

Ah! Je l'ai trouvé: scipy.special.ndtr ! Cela semble également être sous scipy.stats.stats.zprob (Qui n'est qu'un pointeur vers ndtr).

Plus précisément, étant donné une instance unidimensionnelle de numpy.arrayz_scores, On peut obtenir les valeurs p comme

p_values = 1 - scipy.special.ndtr(z_scores)

ou bien

p_values = scipy.special.ndtr(-z_scores)
10
gotgenes

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)))
p_value = scipy.stats.norm.pdf(abs(z_score_max)) #one-sided test 
p_value = scipy.stats.norm.pdf(abs(z_score_max))*2 # two - sided test

La fonction de densité de probabilité (pdf) dans python produit des valeurs p-values ​​qui sont tirées d'un tableau de z-score dans un livre de statistiques intro/AP.

1
Vivek Gopalan