2012-03-25 30 views
2

stats.norm.rvsと同じように、SciPyの分布から乱数を引き出そうとしています。しかし、私は経験的な分布から数値を取ろうとしています。それは歪んだデータセットであり、私が描いている分布に歪みと尖度を取り入れたいと思っています。理想的にはstats.norm.rvs(loc = blah、scale = blah、size = blah)を呼び出してから、平均と分散だけでなくスキューとkurtも設定したいと思います。ノルム関数は、sとkがスキューと尖度を表す 'mvsk'の配列からなる 'moments'引数をとりますが、明らかにsとkがrvから計算されることを求めています。で始まる分布のパラメータとしてsとkを定める。scipyで歪んだ分布の確率変数

とにかく、私は統計の専門家ではありません。おそらく、これは簡単で誤った質問です。助けていただければ幸いです。

EDIT:4つのモーメントが十分分布を定義するのに十分ではない場合は、次のようになります経験分布で構成されている値を描画するための他の方法があります:http://i.imgur.com/3yB2Y.png

答えて

1

ディストリビューションの末尾に出てこないとデータが浮動小数点である場合は、 経験的な分布からサンプルできます。

  • データを並べ替えます。
  • データに0をプリペンドします。
  • )(このdata_array
  • 計算Qの長さを表すNう= scipy.rand * N
  • IDX = INT(Q)。 di = q-idx
  • xlo = data_array [idx]、xhi = data_array [idx + 1];
  • リターン×10の+(XHI-×10)*ジ

基本的に、これは直線 ランダム変量を得るために、経験的CDFに補間されます。

データセットが小さい場合は、 ディストリビューウェルを表すことはできません。また、既存のデータセットに最大値の より大きい値を生成しないようにすることもできます。

これらを超えるには、上記のガンマ分布のようなパラメトリック分布を見る必要があります。

1

正規分布は、2つのパラメータ、平均及び分散を有します。スキューと尖度を追加した4つのパラメータを持つ正規分布の拡張があります。 1つの例はGram-Charlier拡張ですが、私が知っている限り、pdfのみがrvsではなくscipyで利用可能です。

代わりにscopy.statsには、柔軟性はありますが異なるパラメータ化を持つjohnsonsuのような4つのパラメータを持つディストリビューションがあります。

しかし、あなたの例では、分布は0より大きい値のため、ほぼ正規分布ではうまくいきません。 Andrewが示唆したように、私はガンマのようにゼロの下限値を持つscipy.statsの分布を調べるべきだと思います。近くに何かがあるかもしれません。

また、サンプルが十分な大きさであれば、gaussian_kdeを使用して乱数を作成することもできます。しかし、gaussian_kdeは、有限バインディングで配布するようには設計されていません。

0

短い答え、必要に応じて他のディストリビューションと交換してください:

n = 100 
a_b = [rand() for i in range(n)] 
a_b.sort() 
# len(a_b[:int(n*.8)]) 
c = a_b[int(n*.8)] 
print c 
関連する問題