norm.ppf 对比 norm.cdf 在 python 的 scipy.stats
norm.ppf vs norm.cdf in python's scipy.stats
所以我把我的完整代码贴出来供大家参考,我想知道这里的ppf和cdf有什么用?你能解释一下吗?我做了一些研究,发现 ppf(百分比函数)是 CDF(计算分布函数)的倒数
如果它们真的是,如果我将 ppf 和 cdf 分别替换为 1/cdf 和 1/ppf,这段代码不应该工作吗?
请给我解释一下,两者的区别。以及如何以及何时使用 which
顺便说一句,这是假设检验。
很抱歉有这么多评论,只是习惯解释一切以供我将来参考。(如果我的评论有任何错误,请指出)
ball_bearing_radius = [2.99, 2.99, 2.70, 2.92, 2.88, 2.92, 2.82, 2.83, 3.06, 2.85]
import numpy as np
from math import sqrt
from scipy.stats import norm
# h1 : u != U_0
# h0 : u = u_0
#case study : ball bearing example, claim is that radius = 3, do hypothesis testing
mu_0 = 3
sigma = 0.1
#collect sample
sample = ball_bearing_radius
#compute mean
mean = np.mean(sample)
#compute n
n = len(sample)
#compute test statistic
z = (mean - mu_0) /(sigma/sqrt(n))
#set alpha
a = 0.01
#-------------------------
#calculate the z_a/2, by using percent point function of the norm of scipy
#ppf = percent point function, inverse of CDF(comulative distribution function)
#also, CDF = pr(X<=x), i.e., probability to the left of the distribution
z_critical = norm.ppf(1-a/2) #this returns a value for which the probab to the left is 0.975
p_value = 2*(1 - norm.cdf(np.abs(z)))
p_value = float("{:.4f}".format(p_value))
print('z : ',z)
print('\nz_critical :', z_critical)
print('\nmean :', mean, "\n\n")
#test the hypothesis
if (np.abs(z) > z_critical):
print("\nREJECT THE NULL HYPOTHESIS : \n p-value = ", p_value, "\n Alpha = ", a )
else:
print("CANNOT REJECT THE NULL HYPOTHESIS. NOT ENOUGH EVIDENCE TO REJECT IT: \n p-value = ", p_value, "\n Alpha = ", a )
.ppf()
函数计算给定正态分布值的概率,而.cdf()
函数计算给定概率为所需值的正态分布值。在这个特定的意义上,它们是彼此相反的。
为了说明此计算,请检查以下示例代码。
from scipy.stats import norm
print(norm.ppf(0.95))
print(norm.cdf(1.6448536269514722))
这张图片和上面的代码应该让你明白了。
谢谢!
所以我把我的完整代码贴出来供大家参考,我想知道这里的ppf和cdf有什么用?你能解释一下吗?我做了一些研究,发现 ppf(百分比函数)是 CDF(计算分布函数)的倒数 如果它们真的是,如果我将 ppf 和 cdf 分别替换为 1/cdf 和 1/ppf,这段代码不应该工作吗?
请给我解释一下,两者的区别。以及如何以及何时使用 which
顺便说一句,这是假设检验。 很抱歉有这么多评论,只是习惯解释一切以供我将来参考。(如果我的评论有任何错误,请指出)
ball_bearing_radius = [2.99, 2.99, 2.70, 2.92, 2.88, 2.92, 2.82, 2.83, 3.06, 2.85]
import numpy as np
from math import sqrt
from scipy.stats import norm
# h1 : u != U_0
# h0 : u = u_0
#case study : ball bearing example, claim is that radius = 3, do hypothesis testing
mu_0 = 3
sigma = 0.1
#collect sample
sample = ball_bearing_radius
#compute mean
mean = np.mean(sample)
#compute n
n = len(sample)
#compute test statistic
z = (mean - mu_0) /(sigma/sqrt(n))
#set alpha
a = 0.01
#-------------------------
#calculate the z_a/2, by using percent point function of the norm of scipy
#ppf = percent point function, inverse of CDF(comulative distribution function)
#also, CDF = pr(X<=x), i.e., probability to the left of the distribution
z_critical = norm.ppf(1-a/2) #this returns a value for which the probab to the left is 0.975
p_value = 2*(1 - norm.cdf(np.abs(z)))
p_value = float("{:.4f}".format(p_value))
print('z : ',z)
print('\nz_critical :', z_critical)
print('\nmean :', mean, "\n\n")
#test the hypothesis
if (np.abs(z) > z_critical):
print("\nREJECT THE NULL HYPOTHESIS : \n p-value = ", p_value, "\n Alpha = ", a )
else:
print("CANNOT REJECT THE NULL HYPOTHESIS. NOT ENOUGH EVIDENCE TO REJECT IT: \n p-value = ", p_value, "\n Alpha = ", a )
.ppf()
函数计算给定正态分布值的概率,而.cdf()
函数计算给定概率为所需值的正态分布值。在这个特定的意义上,它们是彼此相反的。
为了说明此计算,请检查以下示例代码。
from scipy.stats import norm
print(norm.ppf(0.95))
print(norm.cdf(1.6448536269514722))
这张图片和上面的代码应该让你明白了。
谢谢!