正規分布n(x):mean=0および\int_ {-a} ^ {a} n(x)=Pがあるとします。
そのような分布の標準偏差を計算する最も簡単な方法は何ですか?そのタスクに適したPythonまたはCの標準ライブラリがあるかもしれませんか?
正規分布n(x):mean=0および\int_ {-a} ^ {a} n(x)=Pがあるとします。
そのような分布の標準偏差を計算する最も簡単な方法は何ですか?そのタスクに適したPythonまたはCの標準ライブラリがあるかもしれませんか?
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 が得られます。これは実際の標準偏差です。
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で適切なリンクにすると、間違ってレンダリングされます。
sciPy Projectを見てください。必要なものが含まれているはずです。