自然科普概率论与数理统计-python仿真

5. 离散型随机变量的分布-二项分布与泊松分布

2020-02-24  本文已影响0人  胡仲略

概率论中,随机变量的分布律是一个重要概念,它能够体现地反应一个随机事件发生的概率水平。对于离散型随机变量而言,主要的分布律有0-1分布,二项分布与泊松分布。而对于连续型随机变量而言,主要的分布律有均匀分布,指数分布以及正态分布。
将这些分布展现在图像之中可能可以更加便于大家去理解。这里我使用Python中的Matplotlib库绘制了这些分布的图像,大家可以在此基础上改变其中的参数,从而能够更好地理解这些分布的数值规律。

1. 二项分布

根据课本上的定义,在n重伯努利试验中,随机变量X代表其中事件A发生的次数,常数p为事件A发生的概率,X所有可能取值为0,1,2...n,那么在这n次试验中随机变量X即服从二项分布: X\sim B(n, p),其分布律可表示为:
P(X=k)=C^{k}_{n}p^k(1-p)^{n-k}
这里,n重伯努利试验是指独立重复一个只有两种可能结果的试验;最简单的一个例子就是扔硬币(概率论真是喜欢扔硬币啊)。把这个二项分布定义转换成人话,就是说:一个人扔了500次硬币(n=500),正面朝上0次,1次,2次...500次的概率到底如何呢?有高中概率知识的小伙伴们肯定都知道就是按照上面这个公式进行计算了。

生活中还有许许多多n重伯努利试验的例子,比如说投掷色子出现6这个事件(只有出现与不出现两种可能),射击(只有击中与不击中两种),考研究生(考上研究生,没考上)等等。不过从概率的角度来说,只有两种可能结果并不意味着这两种结果是等可能的。生活中遇到过不少人认为只有两种结果,这两种结果发生的可能性就是五五开(没那么好的事!),绝对是对概率论的一大误解。

那么我们怎么用Python对二项分布的图像进行绘制呢?可以参看下面的代码。

# Binomial Distritribution
# Author: Zhonglue
# Date: Feb 20th, 2020

import numpy as np 
from matplotlib import pyplot as plt 
import math

# set the parameter
number = 100 # number of tests
prob = 0.25 # probability of Event A happens

x = np.arange(number) # initialize X
y_binomial = np.zeros(number) # initialize Y

for i in range(number):
    y_binomial[i] = math.factorial(number)/(math.factorial(number-i)*math.factorial(i))*(prob)**i*(1-prob)**(number-i)       # For binomial distribution, P(X=i) = Cni p^i(1-p)^i

plt.style.use('seaborn') # use a nice style
plt.rc('font', size =14)
plt.rc('figure', titlesize = 18)
plt.rc('axes', labelsize =15)
plt.rc('axes', titlesize =18)

plt.title("Binomial distribution")
plt.xlabel("Number")
plt.ylabel("Probability")
plt.xlim(0, 100)
plt.ylim(0, 0.1)
plt.scatter(x, y_binomial, color = 'g', marker = 'o', alpha = 0.5)
plt.show()

这里计算的是概率为0.25的事件A在100次独立重复实验中发生次数的概率分布律,即X\sim B(0.25, 100)
绘制出来的图像是这样的:

二项分布图像, X~B(0.25, 100)

2. 泊松分布

离散型随机变量的另一个重要的分布是泊松分布(Poisson Distribution)。若随机变量X服从泊松分布,则其取各个值的概率为:
P(X=k)=\frac{\lambda ^k e^{-\lambda}}{k!}, k = 0, 1, 2, ...并记做:X\sim P(\lambda).

泊松分布看起来就比之前说的二项分布更加复杂一点。但是,具有泊松分布的随机变量在实际生活中是十分常见的。比如说,一个铸件上砂眼的数量,某一医院一天内的急诊病人数等。这些事件实际上均属于“泊松过程”。对于泊松分布,大家可以发现,事实上泊松分布只有一个参数,即\lambda。这个参数反映了泊松过程中事件发生的强度。比如说,若在一个医院中,平均一个小时有5位可爱的小婴儿出生。如果我们假设每小时婴儿出生的数量服从泊松分布,那么这里泊松分布的强度\lambda=5

那么我们怎么用Python对泊松分布进行绘制呢?代码如下。

# Poisson distribution
# Author: Zhonglue Hu
# Date: Feb 20, 2020

import numpy as np 
from matplotlib import pyplot as plt 
import math

# Set the parameters

number = 100 # Total number of tests  
lamda = 10 # the poisson ratio

x = np.arange(number)
z_poisson = np.zeros(number)

for i in range(number):
    z_poisson[i] = lamda**i*np.exp(-lamda)/math.factorial(i)

plt.style.use('seaborn') # use a nice style
plt.rc('font', size =14)
plt.rc('figure', titlesize = 18)
plt.rc('axes', labelsize =15)
plt.rc('axes', titlesize =18)

plt.title("Poisson distribution vs Binomial distribution")
plt.xlabel("Number")
plt.ylabel("Probability")
plt.xlim(0,100)
plt.ylim(0, 0.15)
plt.scatter(x, z_poisson, color= 'r', marker = 'o', alpha = 0.5)
plt.show()

那么泊松分布的看起来是什么样的呢?

泊松分布 X~P(10)

关于泊松分布的一个另外一个很重要的论点是,泊松分布在一定的条件下,可以用于二项分布的近似与拟合:二项分布中n较大 (n>10,p<0.05),且\lambda=np. 结合上面的代码,相信老铁们应该不难绘制出这样的图像。

好了,这篇文章先写到这里,感觉有帮助的老铁们点个赞再走呗~

上一篇下一篇

猜你喜欢

热点阅读