python求标准正态分布的分布函数值(具体实现及调用函数)
在做生物统计作业时用到了 Φ(-6.6),查表没有结果,所以想到用python解决。以下代码主要是通过划分子区间求和的方式来计算。import mathdef normal_distribution(x): #处理x<0(目标点在分布中心左侧)的情况if x<0:return 1-normal_distribution(-x)if x==0:return 0.5 #求标准正态分布的概率
·
在做生物统计作业时用到了 Φ(-6.6),查表没有结果,所以想到用python解决。
以下代码主要是通过划分子区间求和的方式来计算。
import math
def normal_distribution(x): #处理x<0(目标点在分布中心左侧)的情况
if x<0:
return 1-normal_distribution(-x)
if x==0:
return 0.5 #求标准正态分布的概率密度的积分
s=1/10000
xk=[]
for i in range(int(x/s)):
integral = fx_normal_distribution((i+1)*s )
xk.append(integral)
print(integral)
print(xk[0])
sum=0
for each in xk:
sum+=each
print(sum)
return 0.5+sum*s
def fx_normal_distribution(x):
return math.exp((-(x)**2)/2)/(math.sqrt(2*math.pi))
print(normal_distribution(-6.6))
当时,在x取-6.6时,因为概率已经跌破10的-11次方,上面的代码精确度已经不行了,主要是此时的结果已经依赖s的取值了。而继续降低s的数量级,程序已经很慢了。
后来,我才发现python是可以直接调用函数来计算的,qaq。
from scipy.stats import norm
q = norm.cdf(-6.6) # 累计密度函数
norm.ppf(q) # 累计密度函数的反函数
print(q)
print(norm.ppf(q)) #可以用来找置信区间
这是代码的结果:
更多推荐
已为社区贡献1条内容
所有评论(0)