1. ホーム
  2. python

[解決済み] Python で正規累積分布関数の逆数を計算するには?

2023-06-27 20:15:22

質問

Pythonで正規分布の累積分布関数(CDF)の逆数を計算するにはどうしたらよいですか?

どのライブラリを使用する必要がありますか?おそらくscipy?

どのように解決するのですか?

NORMSINV (コメントで言及) は、標準正規分布の CDF の逆数です。 を使って scipy を使えば、これを計算することができます。 ppf のメソッドで計算できます。 scipy.stats.norm オブジェクトを作成します。 頭文字をとって ppf パーセントポイント機能 の別名です。 分位数関数 .

In [20]: from scipy.stats import norm

In [21]: norm.ppf(0.95)
Out[21]: 1.6448536269514722

CDFの逆数であることを確認する。

In [34]: norm.cdf(norm.ppf(0.95))
Out[34]: 0.94999999999999996

デフォルトでは norm.ppf は mean=0 と stddev=1 を使用し、これは "標準" 正規分布となります。 を指定することにより、異なる平均と標準偏差を使用することができます。 locscale の引数をそれぞれ指定します。

In [35]: norm.ppf(0.95, loc=10, scale=2)
Out[35]: 13.289707253902945

のソースコードを見てみると scipy.stats.norm のソースコードを見てみると ppf メソッドは最終的に scipy.special.ndtri . ですから、標準正規分布のCDFの逆数を計算するには、その関数を直接使えばいいのです。

In [43]: from scipy.special import ndtri

In [44]: ndtri(0.95)
Out[44]: 1.6448536269514722