首页 文章

鉴于“冻结”的SciPy离散随机变量,我怎么知道它的支持?

提问于
浏览
0

如果我使用 scipy.stats.rv_discrete 手动创建离散随机变量,我可以通过提供下限,上限和增量(虽然后者是tested only for 1)来控制其支持(它可以获得的可能值),或者通过提供具体的 values 论点 .

这些方法实际上并不构造随机变量,而是构造一个离散分布,通过调用它可以从中构造一个随机变量 . 给定一个随机变量,它是通过给出具体的 values= 构造的分布构造的,我可以通过检查 rv.dist.xk 找出它的支持(事实上,这还不够;如果 values= 包含零概率,我们应该检查 rv.dist.xkrv.dist.pk 从支持中丢弃零概率值) . 但是,这种方法不适用于我们尚未定义且未使用 values= 方法定义的一般离散随机变量 .

是否有一般方法可以返回离散随机变量的支持集? single method 适用于使用 rv_discrete 生成的所有离散随机变量以及 scipy.stats 模块中定义的那些,例如 randint

1 回答

  • 1

    我们可以从scipy.stats.distribution的逆cdf, ppf 获得分布支持的下限和上限 .

    根据定义, ppf(0) 返回cdf为零的最大整数,因此下限大1 .

    如果我没记错的话,那么代码不会检查用户是否为使用 (xk, pk) 的用户明确定义的离散分布添加了零概率事件 .

    >>> stats.binom.ppf([0, 1], 20, 0.4)
    array([ -1.,  20.])
    
    >>> stats.geom.ppf([0, 1], 0.4)
    array([  0.,  inf])
    
    >>> stats.hypergeom.ppf([0, 1], 20, 15, 10)
    array([  4.,  10.])
    
    >>> stats.bernoulli.ppf([0, 1], 0.5)
    array([-1.,  1.])
    

    分发具有 .a.b 属性,用于定义下限 . 但是,如果支持取决于参数,则显示已设置的 the bounds of the last call . 这些也是 loc=0 标准分布的界限,也是 scale=1 的连续分布界限 .

    Only 如果您想熟悉实施细节,请使用此功能,并且您主要是供内部使用 .

    >>> stats.hypergeom.ppf([0, 1], 20, 15, 10)
    array([  4.,  10.])
    >>> stats.hypergeom.a, stats.hypergeom.b
    (5, array(10))
    
    # WRONG, stale state ! 
    >>> stats.hypergeom(20, 16, 10).dist.a, stats.hypergeom(20, 16, 10).dist.b   
    (5, array(10))
    
    >>> stats.hypergeom(20, 16, 10).ppf(0)
    5.0
    >>> stats.hypergeom(20, 16, 10).dist.a, stats.hypergeom(20, 16, 10).dist.b
    (6, array(10))
    

相关问题