欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

统计学的Python实现-017:标准正态分布

程序员文章站 2022-07-11 14:59:05
...

作者:长行

时间:2019.03.15

统计学解释

正态分布:正态分布(normal distribution),又称高斯分布;其概率密度(正态分布曲线)呈钟型,两头低,中间高,左右对称。分布如图:

(图片参见同名word文件)

其概率密度公式为:
ϕ(x)=12πσe(Xμ)22σ2 \phi(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(X-\mu)^2}{2\sigma^2}}
其中σ\sigma为标准差,μ\mu为均值。

μ=0\mu=0σ=1\sigma=1时称随机变量X服从标准正态分布,其概率密度为:
ϕ(x)=12πex22 \phi(x)=\frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}
标准正态分布的概率即为φ(x)的标准正态分布的概率密度的积分,也就是标准正态分布的分布函数的值。标准正态分布的分布函数如下:
ϕ(x)=12πxet22dt \phi(x)=\frac{1}{\sqrt{2\pi}}\int^{x}_{-∞}{e^{-\frac{t^2}{2}}dt}

实现思路

因为标准正态分布的概率密度为超越函数(不可积积分),因此我们通过将被函数包围的面积切分为大量矩阵来计算它的积分。

因为在计算机中我们不方便直接从-∞开始切分为小矩形,所以对于x>0的情况,我们利用ϕ(0)=0.5\phi(0)=0.5ϕ(x)\phi(x)转化为在区间(0,X)上的积分,再加上ϕ(0)\phi(0)的0.5;对于x<0的情况,我们利用公式:
ϕ(x)=1ϕ(x) \phi(-x)=1-\phi(x)
进行处理,将x<0的情况转化为x>0的情况。

实现代码

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(1,x*10000):
        xk.append(i*s)
    integral=(fx_normal_distribution(0)+fx_normal_distribution(x))/2 #f(0)和f(x)各算一半
    for each in xk:
        integral+=fx_normal_distribution(each)
    return 0.5+integral*s

def fx_normal_distribution(x):
    return math.exp((-(x)**2)/2)/(math.sqrt(2*math.pi))

print(normal_distribution(1))

结果

0.8413447458669009