在做生物统计作业时用到了 Φ(-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)) #可以用来找置信区间

这是代码的结果:
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐