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

在这里插入图片描述
我们知道,对 X X X已知的分布函数 F X ( x ) F_X(x) FX(x),若函数 Y = g ( X ) Y=g(X) Y=g(X)具有单调增加的反函数 X = g − 1 ( Y ) X=g^{-1}(Y) X=g1(Y),则 Y Y Y的分布函数 F Y ( y ) = F X ( g − 1 ( y ) F_Y(y)=F_X(g^{-1}(y) FY(y)=FX(g1(y)。在Python中,我们也可以通过这样的函数复合方式计算连续型随机变量函数的分布:构造 y = g ( x ) y=g(x) y=g(x)的反函数 h ( y ) = g − 1 ( y ) h(y)=g^{-1}(y) h(y)=g1(y),然后将其作为参数传递给 X X X的累积概率函数的自变量。
例1 X X X~ U ( a , b ) U(a, b) U(a,b) 0 ≤ a < b 0\leq a<b 0a<b), Y = π 4 X 2 Y=\frac{\pi}{4}X^2 Y=4πX2,当 y ≥ 0 y\geq0 y0时, g − 1 ( y ) = h ( y ) = 2 y π g^{-1}(y)=h(y)=2\sqrt{\frac{y}{\pi}} g1(y)=h(y)=2πy 单调增加,所以 F Y ( y ) = F X ( h ( y ) ) = F X ( 2 y π ) F_Y(y)=F_X(h(y))=F_X(2\sqrt{\frac{y}{\pi}}) FY(y)=FX(h(y))=FX(2πy )。由于scipy.stats中的uniform就表示均匀分布,所以只需要定义好函数 g − 1 ( y ) = h ( y ) g^{-1}(y)=h(y) g1(y)=h(y)
传递给uniform的cdf函数的自变量参数就可以定义 Y Y Y的分布了。由于 a ≥ 0 a\geq0 a0,故可将 h ( y ) h(y) h(y)定义为
h ( y ) = { 0 y < 0 2 y π y ≥ 0 . h(y)=\begin{cases}0&y<0\\2\sqrt{\frac{y}{\pi}}&y\geq0\end{cases}. h(y)={02πy y<0y0.
下列代码实现 h ( y ) h(y) h(y)的定义

def h(y):
    x=np.zeros(y.size)              #返回值初始化为0
    d=np.where(y>=0)                #y>=0的下标序列
    x[d]=2*np.sqrt(y[d]/np.pi)      #y>=0时对应的函数值
    return x

利用上列程序定义好的函数h(y),我们定义如下的ydist分布

from scipy.stats import uniform, rv_continuous
class ydist(rv_continuous):
    def _cdf(self, y, a, b):
        return uniform.cdf(x=h(y), loc=a, scale=b-a)

ydist类中定义的累积概率函数cdf除了self以外的3个参数y表示自变量,a,b分别表示 X X X作为均匀分布的参数 a a a b b b。第4行调用uniform(均匀分布)的cdf函数,传递h(y)给参数x,a给参数loc,b-a给参数scale。计算的结果作为返回值返回。利用ydist分布,我们可以模拟 Y Y Y所描述的随机试验。

import numpy as np
from matplotlib import pyplot as plt
dist=ydist()
x=np.linspace(-2, 25, 256)
a, b=2, 5
y=dist.pdf(x,a,b)
plt.plot(x,y)
v=dist.rvs(a, b, size=200)
plt.hist(v, density=True)
plt.show()

程序的第3行用程序2.17定义的分布ydist类创建对象dist。第6行调用dist的概率密度函数pdf,传递参数a和b(第5行创建并初始化)计算横轴范围x=(-2, 25)(第4行创建)对应的函数值。第7行绘制概率密度函数的图像。第8行调用dist的rvs函数产生200个服从dist分布的随机数构成的序列v。第9行用v的数据绘制直方图。运行程序,展示下图。可见数据v很好地模拟了dist分布描述的试验。
在这里插入图片描述
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好
返回《导引》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值