当对指数分布的随机变量使用expect函数时,我无法获得预期的输出。这是一个小例子,我对函数的期望" x = 1"在0到3的范围内。这相当于积分密度函数,因此输出应该等于3中评估的CDF。
from scipy.stats.distributions import expon
mu = 0.3
rv = expon(scale=1/mu)
upper = 3.
print rv.dist.expect(lambda x: 1.,lb = 0.,ub = upper)
返回0.950212931632。
在upper中计算的指数分布的cdf应该给出相同的结果:
print rv.cdf(upper)
但是这给了0.593430340259。
这可能不是最有洞察力的问题,但我不明白我做错了什么。有没有人看到这个错误?或者期望函数有什么错误吗?
答案 0 :(得分:1)
此
rv = expon(scale=1/mu)
创建“冻结”分布,其比例固定为1 / mu。
冻结分布是rv_frozen
类的实例。
此类在其中包含对 unfrozen 分发的引用
dist
属性。因为dist
不是冻结分布,
如果您使用dist
中的任何方法,则必须提供所有参数
(否则他们使用与expon
相同的默认值,而不是。{
冻结论据。)
In [57]: mu = 0.3
In [58]: rv = expon(scale=1/mu)
In [59]: upper = 3.0
In [60]: rv.dist.expect(func=lambda x: 1, scale=1/mu, lb=0, ub=upper)
Out[60]: 0.5934303402594009
In [61]: rv.cdf(upper)
Out[61]: 0.59343034025940089
您可以轻松地使用dist
属性,而不是使用expon.expect
属性
使用In [62]: expon.expect(func=lambda x: 1, scale=1/mu, lb=0, ub=upper)
Out[62]: 0.5934303402594009
方法:
expect
这里的“真实”问题是冻结分布没有 提供{{1}}方法。如果它看起来像一个重要的功能 有,你可以创建一个增强请求的问题 scipy github site。