空间统计--二项分布和泊松分布案例代码分析
空间统计–二项分布和泊松分布案例代码分析
一、泊松分布
日常生活中,大量的事件是有固定频率的:
它们的特点就是,我们可以预估这些事件的总数,但是没法知道具体的发生时间。已知平均每小时出生3个婴儿,请问下一个小时,会出生几个?有可能一下子出生6个,也有可能一个都不出生。这是我们没法知道的。
上面就是泊松分布的公式。等号的左边, 表示概率,表示某种函数关系, 表示时间, 表示数量,1小时内出生3个婴儿的概率,就表示为 。等号的右边,表示事件的频率。
此处用1982–2012年枪击案的分布来学习泊松分布
这个例子给你了美国30年来每年的枪击案发生数目,需要解决的问题是能否从每年发生枪击案的数目判断美国枪击犯罪是否恶化。假设美国枪击案犯罪没有恶化,而是非常稳定,我们可以假设:枪击案的发生为泊松过程,每年平均发生枪击案的数目恒定(条件3),各个年份之间发生枪击案的数目不互相影响(条件2),任一时刻发生枪击案的概率很小(条件1),所以每年发生枪击案的数目服从泊松分布。
假设美国枪击案满足“泊松分布”三个条件:
(1)以下是,1982–2012年枪击案的分布情况:
(2)计算得到,平均每年发生2起枪击案,所以 。在我们的假设下每年发生枪击案的数目服从泊松分布,那么一年内发生0起枪击案的概率为:
一年内发生1起枪击案的概率为:
依此类推,那么我们可以得到一张分布图:我们假设出的年枪击案数目分布和实际枪击案发生数目的对照表:
上图中,蓝色的条形柱是实际的观察值,红色的虚线是理论的预期值。可以看到,观察值与期望值还是相当接近的。可以看到,在频率(2)附近,事件的发生概率最高,然后向两边对称下降,即变得越大和越小都不太可能。平均每年发生2起枪击案,这是最可能的结果,发生的得越多或越少,就越不可能。
然后可以得到一张我们假设出的年枪击案数目分布和实际枪击案发生数目的对照表:
再由一些统计学的计算方法,计算出我们假设的值与实际观测的值是否接近。如果接近,则说明我们的假设-枪击案发生为泊松过程-是正确的。可以用“卡方检验”如下:
更多详细信息可点击更多
二、伯努利分布
伯努利分布, 这个是最简单的分布,就是0-1分布以抛硬币为例, 为正面的概率为p, 反面的概率为q是一种离散型概率分布,也是很多分布的基础,它是二项分布的特殊情况。
三、二项分布
简单地说当一个实验满足:
(1)每次试验中事件只有两种结果:事件发生或者不发生,如硬币正面或反面,患病或没患病;
(2)每次试验中事件发生的概率是相同的,注意不一定是0.5;
(3)n次试验的事件相互之间独立。
以上三个条件时,即满足了伯努利试验。如抛硬币抛,在一次试验中硬币要么正面朝上,要么反面朝上,每次正面朝上的概率都一样,且每次抛硬币的事件相互独立,即每次正面朝上的概率不受其他试验的影响。若只抛一次则其满足伯努利分布,而 二项分布就是重复n次独立的伯努利试验,~,
如实例:
某人篮球投篮的命中率是0.3,总共投篮10次,问至少投中2次的概率?
分析:
(1)每次投篮有2种结果,投中或没投中;
(2)每次投篮的投中概率是相同的,都为0.3;
(3)每次投篮可认为是独立事件。
因此,符合二项分布。
显然,二项分布属于离散型分布。 至少2次投中概率即:
四、二项分布和泊松分布关系
很大, 很小时泊松分布可以用来近似二项分布,简单说泊松分布可看成是二项分布的极限而得到,记常数 。
更多详细关系可点击更多
备注:博客中泊松分布图python 实现代码为:
import numpy as np
import scipy.stats as st #引入stats包。其内部包含有许多分布
import matplotlib.pyplot as plt
rv = st.poisson(2) # 强度为2的泊松分布
num_years = [4, 10, 7, 5, 4, 0, 0, 1] #测量值
x = range(8) #可看成柱状图数量
plt.bar(np.array(x), num_years, label='Observed instances') #画直方图(横坐标,纵数值,标签)
plt.plot(x, sum(num_years)*rv.pmf(x), ls='dashed',
lw=2, c='r', label='Poisson distribution\n$(\lambda=2.0)$') #画直方图(横坐标,纵数值,虚线,线宽为2,线为红色,标签)
#print(sum(num_years)*rv.pmf(x)) #泊松分布计算值
plt.xlim([-1, 8]) #横轴
plt.ylim([0, 11]) #纵轴
#标题
plt.title('Mass Shootings in USA 1982-2012')
plt.xlabel('Number of mass ahooting in a year')
plt.ylabel('Number of years')
plt.legend(loc='best')
plt.show() #显示图