import scipy.stats as st
# define p-value
p = 0.0456
# calculate number of standard deviations (n-sigma) from p-value
# one-tailed
n_sigma_one_tailed = st.norm.ppf(1-p)
# two-tailed
n_sigma_two_tailed = st.norm.ppf(1-p/2.)
print(f" p-value = {p}, n_sigma_one_tailed = {n_sigma_one_tailed:.4f}, n_sigma_two_tailed = {n_sigma_two_tailed:.4f}")
p-value = 0.0456, n_sigma_one_tailed = 1.6891, n_sigma_two_tailed = 1.9991
# p-value from number of standard deviations (n-sigma)
n_sigma = 5
# one-tailed
p_value_one_tailed = 1 - st.norm.cdf(n_sigma)
# two-tailed
p_value_two_tailed = 2. * (1 - st.norm.cdf(n_sigma))
print(f" n-sigma = {n_sigma}, p_value_one_tailed = {p_value_one_tailed:.2g}, p_value_two_tailed = {p_value_two_tailed:.2g}")
n-sigma = 5, p_value_one_tailed = 2.9e-07, p_value_two_tailed = 5.7e-07
for nsigma in [1, 2, 3, 4, 5]:
p_value_one_tailed = 1 - st.norm.cdf(nsigma)
print(f"{nsigma} {p_value_one_tailed:.2g}")
1 0.16 2 0.023 3 0.0013 4 3.2e-05 5 2.9e-07