2016-05-28 6 views
2

私はポアソン分布に自分のデータを合わせてみてください:シーボンとポアソン分布を合わせるにはどうすればいいですか?

import seaborn as sns 
import scipy.stats as stats 

sns.distplot(x, kde = False, fit = stats.poisson) 

をしかし、私はこのエラーを取得する:

はAttributeError:「poisson_gen」オブジェクトが属性を持っていない

他のディストリビューションを「フィット」(ガンマ、など)うまく動作します。

+2

関連:https://github.com/scipy/scipy/issues/2184 – unutbu

答えて

6

scipy.stats.poissonとしてscipyで実装)はdiscrete distributionです。 scipyの離散分布にはfitメソッドがありません。

私はseaborn.distplot関数にはあまり慣れていませんが、データが継続的に配布されていると考えられます。その場合、scipy.stats.poissonfitメソッドがあったとしても、それはdistplotに渡す適切な配信ではありません。


質問のタイトルは「?seabornとポアソン分布をフィットする方法」であるので、完全を期すために、ここではデータとそのフィットのプロットを得るための一つの方法です。 seabornは棒グラフにのみ使用され、@ mwaskomの提案ではseaborn.countplotを使用しています。ポアソン分布の最尤推定は単純にデータの平均であるため、フィッティングは実際には些細なことです。

まず、輸入:

In [136]: import numpy as np 

In [137]: from scipy.stats import poisson 

In [138]: import matplotlib.pyplot as plt 

In [139]: import seaborn 

で動作するようにいくつかのデータを生成します。

In [140]: x = poisson.rvs(0.4, size=100) 

これらはxでの値です:プロットする

In [141]: k = np.arange(x.max()+1) 

In [142]: k 
Out[142]: array([0, 1, 2, 3]) 

使用seaborn.countplotデータ:

In [143]: seaborn.countplot(x, order=k, color='g', alpha=0.5) 
Out[143]: <matplotlib.axes._subplots.AxesSubplot at 0x114700490> 

ポアソンパラメータの最尤推定は、単にデータの平均値である:

In [144]: mlest = x.mean() 

使用poisson.pmf()予想される確率を取得し、期待カウントを取得するには、データセットのサイズによって乗算しますmatplotlibを使用してプロットします。バーは、実際のデータの数であり、ドットが当てはめられた分布の予想カウントです:

In [145]: plt.plot(k, poisson.pmf(k, mlest)*len(x), 'go', markersize=9) 
Out[145]: [<matplotlib.lines.Line2D at 0x114da74d0>] 

plot

+0

"また、(...)データ上に推定PDFをプロットすることもできます。はい、それは前提のようです。 PDF(確率密度関数)は、連続する確率変数を意味します。 – ayhan

+0

私は 'distplot'を使って離散分布を表示することは可能ですが、いくつかのパラメータを調整する必要があるかもしれません。 'countplot'はより良い選択です(' order = 'を使うことを確認してください)。 – mwaskom

+1

@mwaskomチップをありがとう。答えに 'countplot'を付けてプロットを追加しました。 –

関連する問題