【概率统计】S05E03 离散型随机变量的分布与度量

1.从概率到随机变量

在前面两节,我们介绍了概率的一些基本概念,给大家找了找概率的“感觉”,对于“试验”、“试验结果”、“事件发生的概率”等等重要概念有了感官上的认识,那么我们进一步来讨论:

我们可以把某一次具体试验中所有可能出现的结果构成一个样本空间,对于样本空间中的每一个可能的试验结果,我们去将他关联到一个特定的数。这种试验结果与数的对应关系就形成了随机变量,我们将试验结果所对应的数称为随机变量的取值。这里就是我们接下来要讨论的重要内容。

请注意这个概念中的一个关键点,随机变量如何取值?他可以直接就是试验的结果取值,比如“抛掷骰子的结果点数为5”。

但是,更多的是这种情况,比如“连续抛掷硬币10次,其中硬币正面出现的次数”,或者是“转了一道弯”的映射值:我们把骰子连续抛掷两次,随机变量对应连续两次试验中的最大值或者点数之和,这就是映射的情况。但是无论如何,对于随机变量,都要明确对应具体的取值。

2.离散型随机变量及其要素

读者很容易联想到,随机变量作为一种映射后的取值,本质上和函数取值一样,可以有连续型和离散型两种,在本节中,我们主要讨论离散型的情况和应用场景,连续型的我们放在下一小节。

其实连续和离散这个概念,一提这个概念,大家脑海里的直观印象往往更加简单,但具体怎么用概念的语言来描述他,反而要繁琐一些,我们还是严格的对离散型随机变量做一个定义,即:随机变量的取值只能是有限多个或者是可数的无限多个值

那么对于任意的我们获取的一组随机变量,我们最关注的是哪些要素呢?我来列举一下,大家一起来看一看:

第一个,随机变量的取值。显然这个是我们首先需要关注的,由试验结果派生出的这一组随机变量到底能取到哪些值,是我们首要关注的问题点。

第二个,试验中,每个对应取值的概率。每个事件的结果肯定不是等概论的,这也恰恰就是我们需要研究的出发点。

第三个,关于随机变量的统计特征和度量。对于随机变量每一个具体的取值,我们把握了他的个体特征,那么我们如何从整个上来把握这一组随机变量的统计特征?这也是非常重要的。

结合三个问题,我们来讨论一下离散型随机变量的分布列

3.离散型随机变量的分布列

分布列描述的就是离散型随机变量的取值及其对应的概率,随机变量一般用大写字母表示,其具体的取值一般用小写字母来表示,例如随机变量 $X$ 的分布列,我们一般用 $p_X$ ,而用 $x$ 来表示随机变量 $X$ 的某个具体取值,因此把上述信息合计起来就有:

随机变量 $X$ 取值为 $x$ 的概率,本质上也是一个事件的概率,这个事件就是 $\{X=x\}$,我们将他记作: $P_X(x)=P({X=x})$。

为了更清楚的解释这个式子,我们还是回到抛硬币这个最简单的情况中来,随机变量 $X$ 表示两次抛掷硬币,硬币正面向上的次数,随机变量 $X$ 的分布列如下表所示:

0 1 2 其他
$P_X(x)$ 1/4 1/2 1/4 0

从上面的随机变量中我们可以看出,随机变量 $X$ 的每一种取值以及所对应的取值概率。例如,正面向上的次数为 $1$ 时,从分布列中我们就可以看出对应的事件概率为 $1/2$。

这个分布列虽然非常非常简单,但是麻雀虽小五脏俱全,下面来重点关注一下里面最重要的两个要点:

第一,对于随机变量 $X$ 的所有可能取值,其概率之和为 1,表示成表达式就是:$\sum_{x}{P_X(x)}=1$

第二,对于随机变量 $X$ 的不同取值 $x$ ,对应的事件 $\{X=x\}$ 彼此之间是互不相容的。因此多个事件构成的事件集合 $S$ 的发生概率,可以通过对应事件发生的概率直接相加得到。即:$P(X\in S)=\sum_{x\in S}{p_X(x)}$。

来个例子,比如我们想计算一下连续两次抛掷硬币,出现正面向上的概率为多大,这个事件集合实际上包含了两个事件,事件1是 $\{X=1\}$,事件2是 $\{X=2\}$,二者彼此不相容,我们按照上面的式子可以得出其概率:

$P(X>0)=\sum_{x=1}^{2}{p_X(x)}=P_X(1)+P_X(2)=1/2+1/4=3/4$

4.分布列和概率质量函数PMF

一般情况下,我们最好是结合图形来观察一个随机变量的分布,这样一来,他的特性就能非常直观的展现出来。

这里,就不得不提一下概率质量函数PMF,概率质量函数就是将随机变量的每个值映射到其概率,看上去和分布列就是一回事儿。

以上,我们就讲清楚了离散型随机变量的基本概念,下面我们开始详细介绍几种常见、且非常重要的随机变量,并且借助python工具来进行随机变量的生成和概率的展示。

5.常见的离散型随机变量及其分布

5.1.二项分布及二项随机变量

5.1.1.分布列及PMF图

我们举一个大家非常熟悉的场景:将一个硬币抛掷 $n$ 次,每次抛掷出现正面的概率为 $p$ ,每次抛掷都是相互独立的,随机变量 $X$ 对应 $n$ 次抛掷得到的正面的次数。

这里,随机变量 $X$ 服从二项分布,二项分布中的核心参数就是 $n$ 和 $p$,随机变量的分布列可以通过下面这个熟悉的公式计算得到:

$p_X(k)=P(X=k)=\begin{pmatrix} n\\ k \end{pmatrix}p^k(1-p)^{n-k}$

下面我们通过指定不同的参数,绘制PMF图,来观察一下二项随机变量的分布情况:

代码片段:

import numpy as np
from scipy.stats import binom
import matplotlib.pyplot as plt
import seaborn
seaborn.set()

k = np.arange(0, 11)

fig, ax = plt.subplots(2, 1)
fig.suptitle('binomial distribution PMF')
binom_rv_0 = binom(n=10, p=0.5)
binom_rv_1 = binom(n=10, p=0.25)

ax[0].plot(k, binom_rv_0.pmf(k), 'bo', ms=8)
ax[0].vlines(k, 0, binom_rv_0.pmf(k), colors='b', lw=5, alpha=0.5)
ax[0].set_title('n=10,p=0.5')

ax[1].plot(k, binom_rv_1.pmf(k), 'ro', ms=8)
ax[1].vlines(k, 0, binom_rv_1.pmf(k), colors='r', lw=5, alpha=0.5)
ax[1].set_title('n=10,p=0.25')

plt.show()

运行结果:

挺好看的一张图,我们来简要解释一下代码:

第11行~第12行:生成指定 $n$, $p$ 参数的二项随机变量。
第14行~第20行:分别对其进行绘制PMF图,因为是离散型随机变量,因此不建议画成折线图,而是这种形态的更为合适一些。

这是直接通过 $scipy$ 中的 $stats$ 模块得到的二项分布的概率质量函数图,也就是反映了不同参数条件下,随机变量 $X$ 各取值点所对应的取值概率。

5.1.2.随机变量的模拟

我们可以使用 $binom$ 模块中的 $rvs$ 方法进行二项随机变量的模拟,我们可以指定所要模拟的试验次数,这里指定重复 $10$ 万次。我们还是使用上面所用过的两组参数$(n,p)$,一个是 $(10,0.5)$,另一个是 $(10,0.25)$

通过上述模拟试验可以得到每种实验结果所对应的次数,然后我们通过归一化,可以计算出随机变量每一种取值所对应的频数,并将其作为概率的近似进行绘图观察。

代码片段:

import numpy as np
from scipy.stats import binom
import matplotlib.pyplot as plt
import seaborn
seaborn.set()

fig, ax = plt.subplots(2, 1)
fig.suptitle('binomial distribution RVS')
binom_rv_0 = binom(n=10, p=0.5)
binom_rv_1 = binom(n=10, p=0.25)

rvs_0 = binom_rv_0.rvs(size=100000)
rvs_1 = binom_rv_1.rvs(size=100000)

ax[0].hist(rvs_0, bins=11, normed=True)
ax[0].set_title('n=10,p=0.5')

ax[1].hist(rvs_1, bins=11, normed=True)
ax[1].set_title('n=10,p=0.25')

print('rvs_0:{}'.format(rvs_0))
print('rvs_1:{}'.format(rvs_1))
plt.show()

运行结果:

rvs_0:[7 4 7 ..., 7 4 6]
rvs_1:[2 0 3 ..., 5 4 3]

程序打印的结果是两个数组,这就是我们在不同参数下分别做十万次试验的结果数组。

5.1.3.随机变量的数字特征

满足二项分布的随机变量,他的期望和方差的表示很简单,服从参数为 $(n,p)$ 的二项分布的随机变量 $X$,他的期望和方差的公式我们直接给出来:

期望: $E[X]=np$
方差: $V[X]=np(1-p)$

我们可以结合上面的模拟二项试验,用几种方法来验证一下上述结论:

代码片段:

import numpy as np
from scipy.stats import binom

binom_rv = binom(n=10, p=0.25)
mean, var, skew, kurt = binom_rv.stats(moments='mvsk')

binom_rvs = binom_rv.rvs(size=100000)
E_sim = np.mean(binom_rvs)
S_sim = np.std(binom_rvs)
V_sim = S_sim * S_sim

print('mean={},var={}'.format(mean,var))
print('E_sim={},V_sim={}'.format(E_sim,V_sim))
print('E=np={},V=np(1-p)={}'.format(10 * 0.25,10 * 0.25 * 0.75))

运行结果:

mean=2.5,var=1.875
E_sim=2.50569,V_sim=1.8735076238999997
E=np=2.5,V=np(1-p)=1.875

我们用三种方法计算了二项随机变量的均值和方差,其中:

第04行~第05行:是用函数包中的方法计算的分布的理论值;
第07行~第10行:从模拟试验得到的数据中计算出来的均值和方差;
第14行:通过公式直接计算出来的理论值。

看的出,用模拟试验数据计算出来的值和理论值相比,基本上是相等的。

5.2.几何分布与几何随机变量

top Created with Sketch.