4

正規分布n(x):mean=0および\int_ {-a} ^ {a} n(x)=Pがあるとします。

そのような分布の標準偏差を計算する最も簡単な方法は何ですか?そのタスクに適したPythonまたはCの標準ライブラリがあるかもしれませんか?

4

4 に答える 4

7

X が平均 0 で標準偏差シグマの正規分布の場合、次が成り立たなければなりません。

P = Prob[ -a <= X <= a ] = Prob[ -a/sigma <= N <= a/sigma ]
  = 2 Prob[ 0 <= N <= a/sigma ]
  = 2 ( Prob[ N <= a/sigma ] - 1/2 )

ここで、N は平均 0、標準偏差 1 の正規分布です。

P/2 + 1/2 = Prob[ N <= a/sigma ] = Phi(a/sigma)

ここで、Phi は平均 0 と stddev 1 を持つ正規変数の累積分布関数 (cdf) です。次に、正規 cdf (または「パーセント点関数」) が必要です。これは Python では scipy.stats.norm.ppf( )。サンプルコード:

from scipy.stats import norm
P = 0.3456
a = 3.0

a_sigma = float(norm.ppf(P/2 + 0.5))   # a/sigma
sigma = a/a_sigma   # Here is the standard deviation

たとえば、N(0,1) 変数が区間 [-1.1] に入る確率は ~ 0.682 (この図の濃い青色の領域) であることがわかっています。P = 0.682 と a = 1.0 を設定すると、シグマ ~ 1.0 が得られます。これは実際の標準偏差です。

于 2008-11-25T21:44:54.413 に答える
5

Pr(-a < X < a) = P の平均ゼロ ガウス分布の標準偏差は、

a/(sqrt(2)*inverseErf(P))

inverseErf はエラー関数 (一般に erf として知られています) の逆関数です。

C については、Gnu Scientific Library (GSL) が優れたリソースです。ただし、inverseErf ではなく erf しかないため、自分で反転する必要があります (単純なバイナリ検索でうまくいきます)。別の方法として、erf と inverseErf を近似する良い方法を次に示します。

http://homepages.physik.uni-muenchen.de/~Winitzki/erf-approx.pdf

Python の場合、SciPy ライブラリと同様に inverseErf を使用できるerfinvため、標準偏差は次のようになります。

a/(math.sqrt(2)*erfinv(P))

PS: Stackoverflow の URL レンダリングにある種のバグがあり、上記の GSL にリンクできません: http://www.gnu.org/software/gsl。上記のURLをpdfで適切なリンクにすると、間違ってレンダリングされます。

于 2008-11-26T06:05:02.670 に答える
3

SciPyにはstatsサブパッケージがあります。

于 2008-11-25T16:29:17.060 に答える
1

sciPy Projectを見てください。必要なものが含まれているはずです。

于 2008-11-25T16:29:05.157 に答える