1

我想将数据集列表中的每个成员都拟合到对数正态分布。然后,我想计算一个函数在每个分布上的期望值。我尝试了以下代码并收到以下错误。

代码

   from numpy import *
   from scipy.stats import lognorm
   dists = map(lognorm,data)
   expectations = [dist.expect(r_[1,1],zeros(40,)) for dist in dists]

错误

  AttributeError: 'rv_frozen' object has no attribute 'expect'

也许我正在错误地阅读文档,但我认为它是一种可用于冻结发行版expect的方法。lognormal

从冻结分布中调用诸如“期望”之类的方法的正确方法是什么?

4

2 回答 2

3

见线程

http://mail.scipy.org/pipermail/scipy-user/2012-August/032860.html

expect尚未连接到冻结分布。要么使用未冻结的发行版,要么使用辅助函数,例如

def expect(X, f, lb, ub):
    if hasattr(X, 'dist'):
        return X.dist.expect(f, lb = lb, ub = ub)
    else:
        return X.expect(f, lb = lb, ub = ub)

更新:

除了冻结分布的问题外,您还需要检查分布的方法。您需要使用.fit(data, ...)来估计参数。

您可以使用计算函数的期望值expect,签名在这里http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_continuous.expect.html?highlight=expect#scipy.stats .rv_continuous.expect

默认值expect是计算均值的恒等映射。但是您也可以使用.mean.stats方法直接从分布中获取平均值。如果均值有明确的表达式,则可以避免积分。

于 2012-11-07T15:28:57.970 回答
0

如果您查看Scjipy Frozen Object,您会发现这expect不是它的方法。

尝试 :

 from numpy import *
 from scipy.stats import lognorm
 dists = map(lognorm,data)
 expectations = [ lognorm.expect(  func, s, loc  ) for dist in dists]

(我不知道功能选项)

于 2012-11-07T12:39:21.803 回答