3

二項分布に似た分布を生成しようとしています。私は二項分布が欲しいが、ゼロを中心にしたい(これは二項分布の定義に関してはあまり意味がないことを知っているが、それでも、これが私の目標です。)

Pythonでこれを行う唯一の方法は次のとおりです。

def zeroed_binomial(n,p,size=None):
    return numpy.random.binomial(n,p,size) - n*p

このディストリビューションの本名はありますか? このコードは実際に私が欲しいものを提供してくれますか (そしてどうすればわかりますか)? これを行うためのよりクリーンな/より良い/標準的な/すでに実装されている方法はありますか?

4

2 に答える 2

2

0 を中心とした「離散化された」正規分布が必要な場合は、これで問題ありません。整数値が必要な場合は、n*p減算する前に丸める必要があります。

しかし、二項分布の極限は、nが大きくなり、p0 または 1 から離れて有界になったときの正規分布です。n*pは特定の値を除いて整数にならないので、正規分布を使用しないのはなぜですか?

于 2013-03-22T15:27:09.890 に答える
2

モジュールに実装されている確率分布により、コンストラクターでキーワードをscipy.stats指定することにより、分布を任意にシフトできます。loc平均が 0 近くにシフトした二項分布を取得するには、次のように呼び出します。

p = stats.binom(N, p, loc=-round(N*p))

loc(離散分布では必ず整数値を使用してください。)

次に例を示します。

p = stats.binom(20, 0.1, loc=-2)
x = numpy.arange(-3,5)
bar(x, p.pmf(x))

棒グラフ

編集:

実際の乱数を生成するrvs()には、モジュール内のすべてのランダム分布に付属するメソッドを使用しscipy.statsます。例えば:

>>> stats.binom(20,0.1,loc=-2).rvs(10)
array([-2,  0,  0,  1,  1,  1, -1,  1,  2,  0]) 
于 2013-03-22T20:32:55.863 に答える