概率统计Python计算:离散型随机变量函数分布

在这里插入图片描述
设已知离散型随机变量 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.0510.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学,读正版书好
返回《导引》

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Python中,可以使用概率论中的随机变量分布来进行统计计算。常见的离散分布包括二项分布和泊松分布,连续性分布包括正态分布、均匀分布和指数分布等。这些分布可以用来计算概率、期望和方差等统计量。 对于正态分布,可以使用scipy.stats库中的norm模块进行计算。例如,可以使用norm.cdf函数计算小于某个值的概率,使用norm.ppf函数计算给定累积概率时的反函数值。代码示例如下: ``` from scipy.stats import norm # 计算小于40的概率 p1 = norm.cdf(40, loc=50, scale=10) # 计算30到40之间的概率 p2 = norm.cdf(40, loc=50, scale=10) - norm.cdf(30, loc=50, scale=10) # 计算小于2.5的概率 p3 = norm.cdf(2.5, 0, 1) # 计算-1.5到2之间的概率 p4 = norm.cdf(2) - norm.cdf(-1.5) # 计算累计概率为0.025时的反函数值 q1 = norm.ppf(0.025, loc=0, scale=1) # 计算累计概率为0.975时的反函数值 q2 = norm.ppf(0.975, 0, 1) print(p1, p2, p3, p4, q1, q2) ``` 对于计算随机变量概率分布的均值和方差,可以使用numpy库进行计算。代码示例如下: ``` import numpy as np # 假设有一个数据框df,其中包含了不合格品数和概率 mymean = sum(df['不合格品数'] * df['概率']) # 计算均值 myvar = sum((df['不合格品数'] - mymean) ** 2 * df['概率']) # 计算方差 mystd = np.sqrt(myvar) # 计算标准差 print(mymean, myvar, mystd) ``` 以上是关于Python统计学中随机变量概率分布的一些基本操作和计算方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python统计学03——随机变量概率分布](https://blog.csdn.net/weixin_46277779/article/details/126673517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值