(scipy.stats.poisson
としてscipyで実装)はdiscrete distributionです。 scipyの離散分布にはfit
メソッドがありません。
私はseaborn.distplot
関数にはあまり慣れていませんが、データが継続的に配布されていると考えられます。その場合、scipy.stats.poisson
にfit
メソッドがあったとしても、それは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>]
関連:https://github.com/scipy/scipy/issues/2184 – unutbu