概要
確率分布を扱う scipy のモジュールである scipy.stats の使い方について解説します。
確率変数
離散型及び連続型確率変数を表すクラスが提供されています。
scipy.stats.rv_discrete
scipy.stats.rv_discrete は離散型確率変数を表すクラスです。
サンプリング
scipy.stats.rv_discrete.rvs() で確率変数から観測値を取得します。
[4 1 0 2 1 1 3 1 2 0 2 1 1 3 3 2 3 1 0 1]
確率質量関数
scipy.stats.rv_discrete.pmf() は、確率質量関数の値 を返します。

scipy.stats.rv_discrete.logpmf() は、確率質量関数の対数をとった値 を返します。

累積分布関数
scipy.stats.rv_discrete.cdf() は、累積分布関数 の値を返します。

scipy.stats.rv_discrete.logcdf() は、累積分布関数の対数をとった値 を返します。

生存関数
scipy.stats.rv_discrete.sf() は、生存関数 の値を返します。

scipy.stats.rv_discrete.logsf() は、生存関数の対数をとった値 を返します。

分位関数 (累積分布関数の逆関数)
scipy.stats.rv_discrete.ppf() は分位関数 の値を返します。

生存関数の逆関数
scipy.stats.rv_discrete.isf() は生存関数の逆関数の値 を返します。

モーメント
scipy.stats.rv_discrete.moment() は 次のモーメントを計算します。
E[X^1] = 2.00 E[X^2] = 6.00 E[X^3] = 22.00 E[X^4] = 94.00
平均情報量 / エントロピー
scipy.stats.rv_discrete.entropy() で平均情報量を計算します。
1.7048826439329838
統計量
scipy.stats.rv_discrete.stats() で次の統計量を計算できます。計算対象の統計量は文字列で指定します。
- “m”: 期待値
- “v”: 分散
- “s”: 歪度 (skewness)
- “k”: 尖度 (kutosis)
mean = 2.00 var = 2.00 skew = 0.71 kutosis = 0.50
- scipy.stats.rv_discrete.median(): 中央値
- scipy.stats.rv_discrete.mean(): 期待値
- scipy.stats.rv_discrete.std(): 標準偏差
- scipy.stats.rv_discrete.var(): 分散
median = 2.00 mean = 2.00 var = 2.00 std = 1.41
確率変数を引数にとる関数 の期待値 を計算する場合は scipy.stats.rv_discrete.expect() を使用します。
6.999999999999999
信頼区間
scipy.stats.rv_discrete.interval() は、 が与えられたとき、 を満たす区間 を計算します。
P[0.0, 5.0]
台
scipy.stats.rv_discrete.support() は、確率質量関数の台 を返します。
(0, inf)
scipy.stats.rv_continuous
scipy.stats.rv_continuous は連続型確率変数を表すクラスです。
loc, scale パラメータ
すべての連続型確率変数の分布は、位置やスケールを調整するためのパラメータ loc, scale
をとります。
調整前の確率変数が としたとき、調整後の確率変数は以下のように計算されます。

サンプリング
scipy.stats.rv_continuous.rvs() で確率変数から観測値を取得します。
[ 0.52587614 -1.07375603 -1.24883296 -0.59328601 0.17404647 -0.30302527 -1.12587053 0.47764943 -0.81734939 0.16761539 -0.09701077 1.01066471 0.58933414 1.44496678 -0.34886864 -2.59756075 0.07253381 1.07815998 -0.56592292 0.26258007]
確率密度関数
scipy.stats.rv_continuous.pdf() は、確率密度関数の値 を返します。

scipy.stats.rv_continuous.logpdf() は、確率密度関数の対数をとった値 を返します。

累積分布関数
scipy.stats.rv_continuous.cdf() は、累積分布関数 の値を返します。

scipy.stats.rv_continuous.logcdf() は、累積分布関数の対数をとった値 を返します。

生存関数
scipy.stats.rv_continuous.sf() は、生存関数 の値を返します。

scipy.stats.rv_continuous.logsf() は、生存関数の対数をとった値 を返します。

分位関数 (累積分布関数の逆関数)
scipy.stats.rv_continuous.ppf() は分位関数 の値を返します。

生存関数の逆関数
scipy.stats.rv_continuous.isf() は生存関数の逆関数の値 を返します。

モーメント
scipy.stats.rv_continuous.moment() は 次のモーメント を計算します。
E[X^1] = 0.00 E[X^2] = 1.00 E[X^3] = 0.00 E[X^4] = 3.00
平均情報量 / エントロピー
scipy.stats.rv_continuous.entropy() で平均情報量を計算します。
1.4189385332046727
統計量
scipy.stats.rv_continuous.stats() で次の統計量を計算できます。計算対象の統計量は文字列で指定します。
- “m”: 期待値
- “v”: 分散
- “s”: 歪度 (skewness)
- “k”: 尖度 (kutosis)
mean = 0.00 var = 1.00 skew = 0.00 kutosis = 0.00
- scipy.stats.rv_continuous.median(): 中央値
- scipy.stats.rv_continuous.mean(): 期待値
- scipy.stats.rv_continuous.std(): 標準偏差
- scipy.stats.rv_continuous.var(): 分散
median = 0.00 mean = 0.00 var = 1.00 std = 1.00
確率変数を引数にとる関数 の期待値 を計算する場合は scipy.stats.rv_continuous.expect() を使用します。
2.000000000000001
信頼区間
scipy.stats.rv_continuous.interval() は、 が与えられたとき、 を満たす区間 を返します。
P[-1.959963984540054, 1.959963984540054]

台
scipy.stats.rv_continuous.support() は、確率質量関数の台 を返します。
(-inf, inf)
最尤推定
scipy.stats.rv_continuous.fit() でその分布の最尤推定を行います。
mean: 0.18434298655426873, std: 1.038091568649953
scipy.stats.rv_continuous.fit_loc_scale() は loc, scale
を推定します。
loc: 4.986848789248153, scale: 1.0205864431590375
対数尤度関数
scipy.stats.rv_continuous.nnlf() で対数尤度関数の負をとった値を返します。
theta
には、分布を表すパラメータ (loc、scale を含む) を theta = (*args, loc, scale)
とタプルで渡します。
144.17743898141782