概率统计Python计算:离散型变量独立性判断

在这里插入图片描述
随机变量之间的独立性是非常重要的关系。对离散型随机变量 X X X Y Y Y而言,我们知道 X X X Y Y Y独立,当且仅当 p i j = p i ⋅ ⋅ p ⋅ j , 1 ≤ i ≤ m , 1 ≤ j ≤ n p_{ij}=p_{i\cdot}\cdot p_{\cdot j},1\leq i\leq m, 1\leq j\leq n pij=pipj,1im,1jn。用矩阵表示为
( p 11 p 12 ⋯ p 1 n p 21 p 22 ⋯ p 2 n ⋮ ⋮ ⋯ ⋮ p m 1 p m 2 ⋯ p m n ) = ( p 1 ⋅ ⋅ p ⋅ 1 p 1 ⋅ ⋅ p ⋅ 2 ⋯ p 1 ⋅ ⋅ p ⋅ n p 2 ⋅ ⋅ p ⋅ 1 p 2 ⋅ ⋅ p ⋅ 2 ⋯ p 2 ⋅ ⋅ p ⋅ n ⋮ ⋮ ⋯ ⋮ p m ⋅ ⋅ p ⋅ 1 p m ⋅ ⋅ p ⋅ 2 ⋯ p m ⋅ ⋅ p ⋅ n ) \begin{pmatrix} p_{11}&p_{12}&\cdots&p_{1n}\\ p_{21}&p_{22}&\cdots&p_{2n}\\ \vdots&\vdots&\cdots&\vdots\\ p_{m1}&p_{m2}&\cdots&p_{mn} \end{pmatrix}= \begin{pmatrix} p_{1\cdot}\cdot p_{\cdot1}&p_{1\cdot}\cdot p_{\cdot 2}&\cdots&p_{1\cdot}\cdot p_{\cdot n}\\ p_{2\cdot}\cdot p_{\cdot1}&p_{2\cdot}\cdot p_{\cdot 2}&\cdots&p_{2\cdot}\cdot p_{\cdot n}\\ \vdots&\vdots&\cdots&\vdots\\ p_{m\cdot}\cdot p_{\cdot1}&p_{m\cdot}\cdot p_{\cdot2}&\cdots&p_{m\cdot}\cdot p_{\cdot n} \end{pmatrix} p11p21pm1p12p22pm2p1np2npmn = p1p1p2p1pmp1p1p2p2p2pmp2p1pnp2pnpmpn

( p 1 ⋅ ⋅ p ⋅ 1 p 1 ⋅ ⋅ p ⋅ 2 ⋯ p 1 ⋅ ⋅ p ⋅ n p 2 ⋅ ⋅ p ⋅ 1 p 2 ⋅ ⋅ p ⋅ 2 ⋯ p 2 ⋅ ⋅ p ⋅ n ⋮ ⋮ ⋯ ⋮ p m ⋅ ⋅ p ⋅ 1 p m ⋅ ⋅ p ⋅ 2 ⋯ p m ⋅ ⋅ p ⋅ n ) = ( p 1 ⋅ p 2 ⋅ ⋮ p m ⋅ ) ∘ ( p ⋅ 1 , p ⋅ 2 , ⋯   , p ⋅ n ) \begin{pmatrix} p_{1\cdot}\cdot p_{\cdot1}&p_{1\cdot}\cdot p_{\cdot 2}&\cdots&p_{1\cdot}\cdot p_{\cdot n}\\ p_{2\cdot}\cdot p_{\cdot1}&p_{2\cdot}\cdot p_{\cdot 2}&\cdots&p_{2\cdot}\cdot p_{\cdot n}\\ \vdots&\vdots&\cdots&\vdots\\ p_{m\cdot}\cdot p_{\cdot1}&p_{m\cdot}\cdot p_{\cdot2}&\cdots&p_{m\cdot}\cdot p_{\cdot n} \end{pmatrix} =\begin{pmatrix} p_{1\cdot}\\ p_{2\cdot}\\\vdots\\p_{m\cdot}\end{pmatrix}\circ (p_{\cdot1},p_{\cdot2},\cdots,p_{\cdot n}) p1p1p2p1pmp1p1p2p2p2pmp2p1pnp2pnpmpn = p1p2pm (p1,p2,,pn)
其中的运算符 ∘ \circ 表示将列向量 P X P_{X} PX作为 m × 1 m\times 1 m×1矩阵,行向量 P Y P_Y PY作为 1 × n 1\times n 1×n矩阵的矩阵乘法。这样,为验证 X X X Y Y Y是否相互独立,只需验证
P X Y = P X ∘ P Y P_{XY}=P_X\circ P_Y PXY=PXPY
是否成立。下列代码定义了根据 ( X , Y ) (X, Y) (X,Y)的联合分布律 P X Y P_{XY} PXY,判断两个有限取值的离散型随机变量 X X X Y Y Y是否独立的Python函数。

import numpy as np                          #导入numpy
def independent(Pxy):                       #判断X,Y是否独立的函数定义
    Px, Py=margDist(Pxy)                    #计算边缘分布
    PxPy=Px.dot(Py)                         #计算边缘分布的矩阵积
    if PxPy.dtype==float64:                 #若数据是浮点型
        return (abs(PxPy-Pxy)<1e-8).all()
    return (PxPy==Pxy).all()                #数据是有理数型

程序的第2~7行定义判断随机变量 X X X Y Y Y是否独立的函数independent,参数Pxy为 ( X , Y ) (X, Y) (X,Y)的联合分布律的概率矩阵。第3行调用博文《离散型维随机向量的联合分布律及边缘分布》定义的函数margDist,计算 X X X Y Y Y的边缘分布律概率序列,分别记为Px和Py(注意Px和Py分别为列向量和行向量)。第4行调用Px的矩阵乘法dot函数,计算与Py的积矩阵,结果存于PxPy。第5~6行的if语句,对数组元素类型为浮点型float64的情形,调用矩阵abs(PxPy-Pxy)<1e-8的all函数,判断PxPy中每个元素与矩阵Pxy中对应元素之差的绝对值是否全部小于 1 0 − 8 10^{-8} 108。此处,abs(PxPy-Pxy)<1e-8是一个形状与Pxy(或PxPy)相同的矩阵,其中每个元素为 ∣ p i ⋅ ⋅ p ⋅ j − p i j ∣ < 1 0 − 8 |p_{i\cdot}\cdot p_{\cdot j}-p_{ij}|<10^{-8} pipjpij<108是否相成立,是为True,否为False。若该矩阵的所有元素均为True,则all()返回True。否则,返回False。相仿地,而对于数据类型为Rational的情形,第7行调用(Pxy==Pxpy).all(),判断 X X X Y Y Y的相互独立性。
例1 从含有3个正品,2个次品的5个产品中依次无放回地抽取两个。设 X X X表示第1次取到的次品个数, Y Y Y表示第2次取到的次品个数。我们知道 ( X , Y ) (X, Y) (X,Y)的联合分布律的概率矩阵为 P X Y = ( 3 10 3 10 3 10 1 10 ) P_{XY}=\begin{pmatrix}\frac{3}{10}&\frac{3}{10}\\\frac{3}{10}&\frac{1}{10}\end{pmatrix} PXY=(103103103101),及 X X X Y Y Y的边缘分布律的概率序列分别为 P X = ( 3 5 2 5 ) P_X=\begin{pmatrix}\frac{3}{5}\\\frac{2}{5}\end{pmatrix} PX=(5352) P Y = ( 3 5 , 2 5 ) P_Y=(\frac{3}{5},\frac{2}{5}) PY=(53,52)。由于 p 00 = 3 10 ≠ 3 5 ⋅ 3 5 = p 0 ⋅ ⋅ p ⋅ 0 p_{00}=\frac{3}{10}\not=\frac{3}{5}\cdot\frac{3}{5}=p_{0\cdot}\cdot p_{\cdot0} p00=103=5353=p0p0,故 X X X Y Y Y不是相互独立的。
若将抽取方式改为有放回的,则不难算得 ( X , Y ) (X,Y) (X,Y)的联合分布律概率矩阵为 P X Y = ( 9 25 6 25 6 25 4 25 ) P_{XY}=\begin{pmatrix}\frac{9}{25}&\frac{6}{25}\\\frac{6}{25}&\frac{4}{25}\end{pmatrix} PXY=(259256256254),且由此算得 X X X Y Y Y的边缘分布律的概率序列分别为 P X = ( 3 5 2 5 ) P_X=\begin{pmatrix}\frac{3}{5}\\\frac{2}{5}\end{pmatrix} PX=(5352) P Y = ( 3 5 , 2 5 ) P_Y=(\frac{3}{5},\frac{2}{5}) PY=(53,52)。可以验证: P X Y = P X ∘ P Y P_{XY}=P_X\circ P_Y PXY=PXPY,故此时 X X X Y Y Y是独立的。下列代码验证此结果。

import numpy as np                                      #导入numpy
from sympy import Rational as R                         #导入Rational
Pxy=np.array([[R(3,10), R(3,10)], [R(3,10), R(1,10)]])  #无放回抽样分布律
print('无放回抽样,X与Y相互独立是%s'%independent(Pxy))
Pxy=np.array([[9/25, 6/25], [6/25, 4/25]])              #有放回抽样分布律
print('有放回抽样,X与Y相互独立是%s'%independent(Pxy))

程序中,第3行和第5行分别设置 ( X , Y ) (X, Y) (X,Y)在无放回抽样下和有放回抽样下的联合分布律。第4行和第6行分别调用independent函数验算两个不同抽样下 X X X Y Y Y的相互独立性。注意,第3行设置Pxy时,元素为Rational类型,而第5行设置成float64型。运行程序,输出

无放回抽样,X与Y相互独立是False
有放回抽样,X与Y相互独立是True

即在无放回抽样下,判断 X X X Y Y Y不是相互独立的,而在有放回抽样下 X X X Y Y Y是相互独立的。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好
返回《导引》

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值