2013-05-08 60 views

回答

7

簡短回答:因爲沒有人爲它寫過代碼,或者甚至嘗試過,據我所知。

較長的答案:我不知道我們可以用通用最大似然方法得到離散模型還有多遠,因爲它適用於連續分佈,它適用於許多但不是全部。

大多數離散分佈對參數強大的限制,很可能其中大部分都需要特定的分配

>>> [(f, getattr(stats, f).shapes) for f in dir(stats) if isinstance(getattr(stats, f), stats.distributions.rv_discrete)] 
[('bernoulli', 'pr'), ('binom', 'n, pr'), ('boltzmann', 'lamda, N'), 
('dlaplace', 'a'), ('geom', 'pr'), ('hypergeom', 'M, n, N'), 
('logser', 'pr'), ('nbinom', 'n, pr'), ('planck', 'lamda'), 
('poisson', 'mu'), ('randint', 'min, max'), ('skellam', 'mu1,mu2'), 
('zipf', 'a')] 

statsmodels是提供一些離散模型的擬合方法其中的參數也可以取決於一些解釋變量。其中大多數類似廣義線性模型,需要一個鏈接函數來將參數的值限制爲有效範圍,例如概率的區間(0,1),或者計數模型中的參數的值大於零。

然後,二項式中的「n」參數和其他一些參數需要是整數,這使得不可能使用scipy.optimize中通常的連續最小值。

一個好的解決方案是有人可以添加分佈特定的擬合方法,以便我們至少有更容易的方法。

+0

我明白了。感謝您的有用答案。如果我可以拒絕或不拒絕Zipf作爲管理某些數據的候選分佈,那麼我的問題就會向前推進,所以我可能不得不自己去寫這篇文章。有趣的是,Mathematica對於能夠爲離散分佈找到MLE有很好的印象。但我相信M'matica函數往往會有很多特殊情況被硬編碼到它們中。 – 2013-05-09 22:00:51

+0

Statsmodels有一個通用的最大可能性類,在某些情況下可能有用,請參閱我的答案https://groups.google.com/d/msg/pystatsmodels/GZ8kXoFitn0/9ve8GVOwl1kJ MLE可能適用於Zipf(我從未看過它)http://stats.stackexchange.com/questions/6780/how-to-calculate-zipfs-law-coefficient-from-a-set-of-top-frequencies – user333700 2013-05-09 23:50:51