2014-06-27 107 views
10

我正在嘗試使用statsmodels將泊松分佈擬合到我的數據中,但是我對結果感到困惑,並且該如何使用該庫。將統計模型中的泊松分佈擬合到數據中

我的真實數據將是一系列數字,我認爲我應該能夠描述爲具有泊松分佈加上一些異常值,所以最終我想對數據做一個穩健的擬合。

但是出於測試目的,我只是用scipy.stats.poisson

samp = scipy.stats.poisson.rvs(4,size=200) 

因此,要適應這種使用statsmodels我想,我只是需要有一個恆定的「endog」

res = sm.Poisson(samp,np.ones_like(samp)).fit() 
創建數據集

打印res.summary()

      Poisson Regression Results 
============================================================================== 
Dep. Variable:      y No. Observations:     200 
Model:      Poisson Df Residuals:      199 
Method:       MLE Df Model:       0 
Date:    Fri, 27 Jun 2014 Pseudo R-squ.:     0.000 
Time:      14:28:29 Log-Likelihood:    -404.37 
converged:      True LL-Null:      -404.37 
             LLR p-value:      nan 
============================================================================== 
       coef std err   z  P>|z|  [95.0% Conf. Int.] 
------------------------------------------------------------------------------ 
const   1.3938  0.035  39.569  0.000   1.325  1.463 
============================================================================== 

好吧,這看起來不正確的,但是,如果我做

res.predict() 

我得到一個4.03的數組(這是測試樣本的平均值)。 所以基本上,首先我非常困惑如何解釋statsmodel的這個結果,其次我應該做一些完全不同的事情,如果我對分佈的魯棒參數估計感興趣而不是適應趨勢,但我應該怎麼做呢?

編輯 我真的應該給出更多的細節來回答我的問題的第二部分。

我有一個事件發生在開始時間後的隨機時間。當我繪製許多事件延遲時間的直方圖時,我發現分佈看起來像一個縮放的泊松分佈加上幾個異常點,這些點通常是由我的底層系統中的問題引起的。所以我只想找到數據集的預期時間延遲,排除異常值。如果不是針對異常值,我可以簡單地找到平均時間。我想我可以手動排除它們,但我認爲我可以找到更嚴格的東西。

編輯 在進一步的思考,我會考慮其他的分佈,而不是用Poissonion和我的問題的細節堅持很可能從原來的問題分心,但我在這裏給他們留下反正。

+1

「魯棒」是什麼意思?強大的異常值,強大的錯誤指標,強大的數值問題,......? – user333700

+0

我的意思是強大到異常值 – robochat

+0

我在我的回覆中添加了一些關於異常強勁估計的評論。我剛纔開始研究它,但是在statsmodels中可用之前還有很長的路要走。 – user333700

回答

6

泊松模型,與廣義線性模型族或其他離散數據中的大多數其他模型一樣,假定我們有一個轉換,將預測限制在適當的範圍內。

泊松適用於非負數和改造exp,所以估計該模型假定的觀測值的預期值,有條件的解釋變量是

E(y | x) = exp(X dot params) 

要得到的拉姆達參數泊松分佈,我們需要使用EXP,即

>>> np.exp(1.3938) 
4.0301355071650118 

predict在默認情況下做到這一點,但你可以用關鍵字參數要求只是線性部分(X dot params)

BTW:statsmodels'有爭議的術語 endog爲y exog爲x(在其X) (http://statsmodels.sourceforge.net/devel/endog_exog.html

異常值的穩健估計

的問題的答案的最後一部分據我所知,目前在Python中對Poisson或其他計數模型沒有異常值的穩健估計。

對於超分散數據,如果方差大於均值,我們可以使用NegativeBinomial迴歸。對於Poisson中的異常值,我們將不得不使用R/Rpy或對異常值進行手動修剪。 異常值識別可以基於其中一個標準化殘差。

它將不會在statsmodels一段時間,除非有人貢獻這一點。

+0

謝謝,所以這回答我的第一個問題。顯然,在我接受statsmodels命名法之前,我需要做更多的統計。 – robochat

+0

endog/exog只是要記住的東西(在exog爲'ex'的幫助下)。迄今爲止我拒絕將一個字母名稱引入statsmodels代碼。 – user333700

+0

作爲一個新用戶,endog/exog的含義並沒有讓我感到困惑,因爲如何指定exog,而且我在執行迴歸與參數擬合分佈之間感到困惑。非常感謝您的答案,並確實爲statsmodels。 – robochat