2012-11-07 11 views
1

我想使數據集列表中的每個成員都符合對數正態分佈。然後,我想計算每個分佈函數的期望值。我試過下面的代碼,並得到以下錯誤。導入scipy統計模塊以獲得經驗分佈的預期值

代碼

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' 

也許我讀the documentation錯誤,我雖然因爲expectlognormal它是提供給冷凍分佈的方法。

從凍結分佈中調用諸如'expect'等方法的正確方法是什麼?

回答

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函數的預期值,簽名是這裏默認的expecthttp://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_continuous.expect.html?highlight=expect#scipy.stats.rv_continuous.expect

是標識映射計算的平均值。但是您也可以使用.mean.stats方法直接獲得分佈的均值。這避免了整合,如果有明確的表達式的意思。

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] 

(我不知道該功能的選項)

+0

您編寫的列表理解是否只是迭代,但從不使用dists中的信息?我凍結變量以保持經驗擬合分佈的形狀。 – mac389

+0

我沒有這方面的知識來回答你的問題:你必須找到在func,s和loc中放置什麼(我猜這個's'代表分配) – lucasg

+0

我的CS是一個CS點, for循環中的變量永遠不會作爲參數傳遞給'lognorm.expect'。 – mac389