Probability to z-score and vice versa

Posted on

Question :

Probability to z-score and vice versa

How do I calculate the z score of a p-value and vice versa?

For example if I have a p-value of 0.95 I should get 1.96 in return.

I saw some functions in scipy but they only run a z-test on an array.

I have access to numpy, statsmodel, pandas, and scipy (I think).

Answer #1:

>>> import scipy.stats as st
>>> st.norm.ppf(.95)
1.6448536269514722
>>> st.norm.cdf(1.64)
0.94949741652589625

Default Python Probabilities

As other users noted, Python calculates left/lower-tail probabilities by default. If you want to determine the density points where 95% of the distribution is included, you have to take another approach:

>>>st.norm.ppf(.975)
1.959963984540054
>>>st.norm.ppf(.025)
-1.960063984540054

Density between two points

Answered By: Myles Baker

Answer #2:

Starting in Python 3.8, the standard library provides the NormalDist object as part of the statistics module.

It can be used to get the zscore for which x% of the area under a normal curve lies (ignoring both tails).

We can obtain one from the other and vice versa using the inv_cdf (inverse cumulative distribution function) and the cdf (cumulative distribution function) on the standard normal distribution:

from statistics import NormalDist

NormalDist().inv_cdf((1 + 0.95) / 2.)
# 1.9599639845400536
NormalDist().cdf(1.9599639845400536) * 2 - 1
# 0.95

An explanation for the ‘(1 + 0.95) / 2.’ formula can be found in this wikipedia section.

Answered By: Xavier Guihot

Leave a Reply

Your email address will not be published. Required fields are marked *