python实现常见一元随机变量的概率分布

一. 随机变量

随机变量是一个从样本空间Ω\OmegaΩ到实数空间RRR的函数,比如随机变量XXX可以表示投骰子的点数。随机变量一般可以分为两类:

  • 离散型随机变量:随机变量的取值为有限个。
  • 连续型随机变量:随机变量的取值是连续的,有无限多个。

scipy.stat模块中包含了多种概率分布的随机变量,包含离散型随机变量和连续型随机变量。离散型随机变量的常见接口如下:

方法名 功能
rvs 生成该分布的随机序列
pmf 概率质量函数
cdf 累计概率分布函数
stats 计算该分布的均值,方差,偏度,峰度。[Mean(‘m’), variance(‘v’), skew(‘s’), kurtosis(‘k’)]

连续型随机变量的常见接口如下:

方法名 功能
rvs 生成该分布的随机序列
pdf 概率密度函数
cdf 累计概率分布函数
stats 计算该分布的均值,方差,偏度,峰度。[Mean(‘m’), variance(‘v’), skew(‘s’), kurtosis(‘k’)]
二. 常见离散分布
1. 二项分布

如果随机变量XXX的分布律为P(X=k)=Cnkpkqn−k,k=0,1,...n,P(X=k) = C^k_np^kq^{n-k},k = 0,1,...n,P(X=k)=Cnkpkqnkk=0,1,...n其中 p+q=1p + q = 1p+q=1 ,则称XXX服从参数为n,pn,pn,p的二项分布,记为X∼B(n,p)X \sim B(n,p)XB(n,p)

  • 期望:E(X)=npE(X) = npE(X)=np
  • 方差:D(X)=np(1−p)D(X) = np(1 - p)D(X)=np(1p)
  1. 画出不同参数下的二项分布,n,pn, pn,p分别为(10,0.3),(10,0.5),(10,0.7)(10,0.3),(10,0.5),(10,0.7)(100.3),100.5,100.7

    import numpy as np
    from scipy.stats import binom
    import matplotlib.pyplot as plt
    
    plt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号
    
    if __name__ == '__main__':
        fig, ax = plt.subplots(3, 1, figsize = (10, 10))
        # 调整子图间距
        fig.subplots_adjust(hspace = 0.5)
    
        params = [(10, 0.3), (10, 0.5), (10, 0.7)]
    
        for i in range(len(params)):
            n = params[i][0]
            p = params[i][1]
    
            x = np.arange(0, n + 1)
            y = binom(n, p).pmf(x)
    
            # 计算随机变量的期望,方差
            mean, var = binom.stats(n, p, moments='mv')
    
            ax[i].scatter(x, y, color = 'blue', marker = 'o')
            ax[i].set_title('n = {}, p = {}'.format(n, p))
            ax[i].set_xticks(x)
            ax[i].text(1, 0.2, '期望: {:.2f}\n方差: {:.2f}'.format(mean, var))
            ax[i].grid()
    
        plt.show()
    

    运行结果:
    在这里插入图片描述

  2. 生成服从不同参数二项分布的随机数组(采样100000次),然后查看数组的频率分布

    import numpy as np
    from scipy.stats import binom
    import matplotlib.pyplot as plt
    
    plt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号
    
    if __name__ == '__main__':
        fig, ax = plt.subplots(3, 1, figsize = (10, 10))
        # 调整子图间距
        fig.subplots_adjust(hspace = 0.5)
    
        params = [(10, 0.3), (10, 0.5), (10, 0.7)]
    
        for i in range(len(params)):
            n = params[i][0]
            p = params[i][1]
            x = np.arange(0, 11)
            # 抽样10万次
            sample = binom.rvs(n = n, p = p, size = 100000)
            print(sample)
    
    
            ax[i].hist(sample, color = 'blue',<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值