设已知离散型随机变量
X
X
X的分布律
P
(
X
=
x
k
)
=
p
k
P(X=x_k)=p_k
P(X=xk)=pk,
k
=
1
,
2
,
⋯
k=1,2,\cdots
k=1,2,⋯及函数
Y
=
g
(
X
)
Y=g(X)
Y=g(X)为计算
Y
Y
Y的分布律,先算得序列
{
g
(
x
1
)
,
g
(
x
2
)
,
⋯
}
\{g(x_1), g(x_2), \cdots\}
{g(x1),g(x2),⋯},对其中的每一个值
g
(
x
k
)
g(x_k)
g(xk)若有
{
g
(
x
k
1
)
,
g
(
x
k
2
)
,
…
,
g
(
x
k
i
)
}
\{g(x_{k_1}), g(x_{k_2}),\dots, g(x_{k_i})\}
{g(xk1),g(xk2),…,g(xki)}与之等值,则仅保留1项,譬如,保留
g
(
x
k
)
g(x_k)
g(xk)。而将保留项的概率值更改为
p
k
1
+
p
k
2
+
⋯
+
p
k
i
p_{k_1}+p_{k_2}+\dots+p_{k_i}
pk1+pk2+⋯+pki,即
P
(
Y
=
g
(
x
k
)
)
=
p
k
1
+
p
k
2
+
⋯
+
p
k
i
P(Y=g(x_{k}))=p_{k_{1}}+p_{k_{2}}+\dots+p_{k_{i}}
P(Y=g(xk))=pk1+pk2+⋯+pki。直至所有的
g
(
x
k
)
g(x_k)
g(xk)均两两不等,
k
=
1
,
2
,
…
k=1, 2, \dots
k=1,2,…。将此解决离散型随机变量函数的分布问题的一般方法实现为如下的Python函数定义:
import numpy as np #导入numpy
def distCalcu(Y, P): #计算Y=g(X)的分布的函数
Y1=np.unique(Y) #剔除Y中的重复值
n=len(Y1) #g(X)不重复值的个数
P1=np.zeros(n) #Y的分布概率P1初始化为0
for i in range(n): #扫描Y1
P1[i]=np.sum(P[np.where(Y==Y1[i])]) #Y中与Y1[i]等值的概率和
return (Y1, P1) #返回Y=g(X)的分布律
程序定义的函数distCalcu,对由参数Y,P(numpy的array数组)确定的随机变量
Y
=
g
(
X
)
Y=g(X)
Y=g(X)的初始分布律(Y保存
Y
Y
Y的取值,P表示
Y
Y
Y的,也是
X
X
X各取值对应的概率),计算规整后
Y
Y
Y的分布律。
由
Y
=
g
(
X
)
Y=g(X)
Y=g(X),得到
Y
Y
Y的所有可能取值,由于函数g未必是单射,故第3行调用numpy的函数unique构造Y中所有不同元素组成的数组Y1。
第5行设置数组P1,元素初始化为0,用于存储Y1中值对应的概率。
第6~7行的for语句循环扫描Y1中每个值Y1[i],i=0,1,…,n-1。第8行调用numpy的函数where在数组Y中查找与Y1[i]相等的元素的下标,用其构成列表[np.where(Y== Y[i])]。用该列表取数组P中对应的概率值:P[np.where(Y== Y[i])],调用numpy的sum函数求和,即为对应于Y1[i]的概率值,存储于P1[i]。扫描完毕,P1中即为Y1中各值对应的概率。
第8行返回由二元组(Y1, P1)确定的
Y
=
g
(
X
)
Y=g(X)
Y=g(X)规整后的分布律。
例1 设随机变量
X
X
X~
(
−
3
−
1
0
1
3
0.05
0.2
0.15
0.35
0.25
)
\begin{pmatrix}-3&-1&0&1&3\\ 0.05&0.2&0.15&0.35&0.25\end{pmatrix}
(−30.05−10.200.1510.3530.25),试计算
Y
=
X
2
+
1
Y=X^2+1
Y=X2+1的分布律。
解:由
X
X
X的取值为
{
−
3
,
−
1
,
0
,
1
,
3
}
\{-3,-1,0,1,3\}
{−3,−1,0,1,3},知
Y
=
X
2
+
1
Y=X^2+1
Y=X2+1的所有取值为
{
1
,
2
,
10
}
\{1, 2, 10\}
{1,2,10}。仔细观察,可以发现
{
Y
=
1
}
=
{
X
=
−
1
}
∪
{
X
=
1
}
\{Y=1\}=\{X=-1\}\cup\{X=1\}
{Y=1}={X=−1}∪{X=1}。
P
(
Y
=
1
)
=
P
(
X
=
−
1
)
+
P
(
X
=
1
)
=
0.2
+
0.35
=
0.55
P(Y=1)=P(X=-1)+P(X=1)=0.2+0.35=0.55
P(Y=1)=P(X=−1)+P(X=1)=0.2+0.35=0.55。相仿地,
P
(
Y
=
10
)
=
P
(
X
=
−
3
)
+
P
(
X
=
3
)
=
0.05
+
0.25
=
0.3
P(Y=10)=P(X=-3)+P(X=3)=0.05+0.25=0.3
P(Y=10)=P(X=−3)+P(X=3)=0.05+0.25=0.3。故
Y
Y
Y的分布律为
(
1
2
10
0.15
0.55
0.3
)
\begin{pmatrix}1&2&10\\ 0.15&0.55&0.3\end{pmatrix}
(10.1520.55100.3)。
下列代码验算本例结果。
import numpy as np #导入numpy
X=np.array([-3, -1, 0, 1, 3]) #设置变量X
P=np.array([0.05, 0.2, 0.15, 0.35, 0.25]) #X取值对应的概率
Y=X**2+1 #计算Y=g(X)
(Y1, P1)=distCalcu(X, P) #计算g(X)的分布律
print(np.stack((Y1, P1)))
程序的2~3行设定随机变量X的分布律,numpy(第1行导入)数组X存储变量的取值,P存储各个取值的概率。
第4行计算函数关系
Y
=
g
(
X
)
Y=g(X)
Y=g(X)。第5行调用以上定义的函数distCalcu,传递表示Y的初始分布律的数组Y和P。返回值是表示
Y
Y
Y的规整后分布律的两个数组Y1和P1。
第6行输出计算结果。其中,调用numpy的函数stack将两个一维数组Y1和P1重叠为一个二维数组。
运行程序,输出:
[[ 1. 2. 10. ]
[ 0.15 0.55 0.3 ]]
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好。
返回《导引》