もんた
scipyは、科学技術計算のためのPythonライブラリで、確率論や統計学に関連する多数の関数が提供されています。その中で、beta分布に関連する関数をメモしておきます。
目次
beta.pdfの使い方
beta.pdfは、beta分布の確率密度関数を表す関数です。beta分布は、0から1の範囲で値を取る連続的な確率分布で、2つのパラメータaとbによって形状が決定されます。この関数を使うことで、特定のパラメータに対応する確率密度関数をプロットできます。
引数の説明
beta.pdfは以下の引数を取り、確率変数の値がx
である確率密度を返します。
scipy.stats.beta.pdf(x, a, b, loc=0, scale=1)
x
: 確率変数の値を指定するための引数です。x
は実数値か、またはNumPyの配列で指定できます。a
とb
: ベータ分布のパラメータを指定するための引数です。a
とb
はいずれも非負の実数値で、共に0以上でなければなりません。loc
: 分布の平均を指定するための引数です。デフォルト値は0です。scale
: 分布の標準偏差を指定するための引数です。デフォルト値は1です。
beta分布をプロット
import numpy as np
from scipy.stats import beta
import matplotlib.pyplot as plt
a, b = 2, 3
x = np.linspace(0, 1, 100)
y = beta.pdf(x, a, b)
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('Probability density')
plt.title('Beta distribution with a=2, b=3')
plt.show()
beta分布の累積分布関数はbeta.cdfを使う
beta.cdf(x, a, b)
は、beta分布の累積分布関数(Cumulative Distribution Function; CDF)を計算する関数で、以下のように記述します。
a = 2
b = 3
x = 0.5
cdf = beta.cdf(x, a, b)
print(cdf) # 0.6875
x
は、確率変数が取りうる値。beta.cdf(x, a, b)
は、確率変数がx
以下になる確率を返します。a
とb
は、ベータ分布の形状パラメータ。
もんた
beta.cdf(x, 2, 3)の結果をプロットすると下図のようになります。
累積分布関数の逆関数はbeta.ppfを使う
beta.ppfは、累積分布関数の逆関数を表す関数で、以下を引数に取ります。
引数の説明
beta.ppf(q, a, b, loc=0, scale=1)
q
: 累積分布関数の値を指定するための引数です。q
は実数値か、またはNumPyの配列で指定できます。q
は0から1の間の値をとります。a
とb
: ベータ分布のパラメータを指定するための引数です。a
とb
はいずれも非負の実数値で、共に0以上でなければなりません。loc
: 分布の平均を指定するための引数です。デフォルト値は0です。scale
: 分布の標準偏差を指定するための引数です。デフォルト値は1です。
beta.ppfを使ってみる
beta.ppfは、beta分布の累積分布関数の逆関数を計算します。つまり、確率変数が何らかの値を取る確率が、q
になるような確率変数の値を求めることができます。
from scipy.stats import beta
q = 0.5 # 累積分布関数の値
a = 2 # パラメータa
b = 3 # パラメータb
ppf_value = beta.ppf(q, a, b) # 累積分布関数の逆関数を計算
print(ppf_value)
このコードでは、累積分布関数の値q
が0.7、パラメータa
が2、パラメータb
が3の場合のベータ分布の逆関数を計算しています。
もんた
上のコードを実行すると、結果は0.385となります。求めた値を累積分布関数(上の例と同じ)と一緒にプロットすると、ちゃんと確率変数の値を逆算できていることがわかります。
# パラメータの設定
a = 2
b = 3
# x軸の値を用意
x = np.linspace(0, 1, 100)
# 累積分布関数を計算
cdf = beta.cdf(x, a, b)
# 累積分布関数の逆関数を計算
ppf_value = beta.ppf(q, a, b)
# プロット
plt.plot(x, cdf, linewidth=0.5)
plt.scatter(ppf_value, 0.5)
plt.xlabel('x')
plt.ylabel('Cumulative distribution function')
plt.title('Beta distribution with a=2, b=3')
plt.show()