【Python】ガンマ分布の計算を行う方法

この記事では、ガンマ分布について詳しく解説します。

ガンマ分布の確率密度関数やPythonを使った計算方法、可視化、さらには信頼区間の計算や仮説検定までを学ぶことができます。

Pythonを使ってガンマ分布を理解しましょう!

目次から探す

ガンマ分布とは

ガンマ分布は、確率分布の一種であり、非負の連続確率変数に対して使用されます。

ガンマ分布は、指数分布やカイ二乗分布など、さまざまな確率分布のベースとなる分布として重要です。

ガンマ分布は、その形状によってさまざまな応用があり、信頼区間の計算や仮説検定などに広く利用されています。

ガンマ分布の確率密度関数

ガンマ分布は、確率密度関数を用いて表現される確率分布の一つです。

ガンマ分布の確率密度関数は以下のように表されます。

ここで、 は形状パラメータ、 は尺度パラメータ、 はガンマ関数を表します。

ガンマ分布の確率密度関数は、( x ) の値に対して確率を表し、面積が1となるように定義されています。

形状パラメータ ( k ) が大きくなるほど、分布のピークが高くなり、尺度パラメータ θ が大きくなるほど分布が右に広がります。

ガンマ分布の確率密度関数を理解することで、与えられたパラメータに基づいて確率を計算したり、分布の形状を把握したりすることが可能となります。

Pythonでのガンマ分布の計算方法

ガンマ分布のパラメータ設定

ガンマ分布を計算する際には、ガンマ分布のパラメータを設定する必要があります。

一般的にガンマ分布は2つのパラメータ、形状パラメータ(shape parameter)であるkと尺度パラメータ(scale parameter)であるθで表されます。

ガンマ分布の確率密度関数の計算

ガンマ分布の確率密度関数は以下の数式で表されます。

ここで、xは確率変数、kは形状パラメータ、θは尺度パラメータです。

Pythonを用いてガンマ分布の確率密度関数を計算する際には、SciPyライブラリgammaモジュールを使用します。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gamma

# ガンマ分布のパラメータ設定
k = 2  # 形状パラメータ
theta = 2  # 尺度パラメータ

# 確率密度関数の計算
x = np.linspace(0, 10, 1000)
pdf = gamma.pdf(x, k, scale=theta)

# 結果のプロット
plt.figure(figsize=(10, 6))
plt.plot(x, pdf, label=f'Gamma PDF (k={k}, theta={theta})')
plt.xlabel('x')
plt.ylabel('Probability Density')
plt.title('Gamma Distribution Probability Density Function')
plt.legend()
plt.grid(True)
plt.show()

SciPynumpymatplotlibはインストールが必要なパッケージです。未インストールの場合はpipでインストールしておきましょう。

pip install numpy
pip install matplotlib
pip install scipy

ガンマ分布の累積分布関数の計算

ガンマ分布の累積分布関数は確率変数がある値以下となる確率を表します。

累積分布関数は以下の数式で表されます。

Pythonを用いてガンマ分布の累積分布関数を計算する際には、SciPyライブラリgammaモジュールを使用します。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gamma

# ガンマ分布のパラメータ設定
k = 2  # 形状パラメータ
theta = 2  # 尺度パラメータ

# 累積分布関数の計算
x = np.linspace(0, 10, 1000)
cdf = gamma.cdf(x, k, scale=theta)

# 結果のプロット
plt.figure(figsize=(10, 6))
plt.plot(x, cdf, label=f'Gamma CDF (k={k}, theta={theta})')
plt.xlabel('x')
plt.ylabel('Cumulative Probability')
plt.title('Gamma Distribution Cumulative Distribution Function')
plt.legend()
plt.grid(True)
plt.show()

ガンマ分布からの乱数生成

ガンマ分布から乱数を生成することができます。

乱数生成にはgamma.rvs()関数を使用します。

この関数は指定された形状パラメータと尺度パラメータに基づいて乱数を生成します。

from scipy.stats import gamma

# ガンマ分布のパラメータ設定
k = 2  # 形状パラメータ
theta = 2  # 尺度パラメータ

# ガンマ分布からの乱数生成
random_samples = gamma.rvs(k, scale=theta, size=100)

print(random_samples)

これで、Pythonを使用してガンマ分布の計算を行う方法について理解することができました。

ガンマ分布の可視化

ガンマ分布の確率密度関数のグラフ化

ガンマ分布の確率密度関数をグラフ化することで、分布の形状やピークを視覚的に理解することができます。

以下は、Pythonを用いてガンマ分布の確率密度関数をグラフ化するサンプルコードです。

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats

# ガンマ分布のパラメータ設定
shape = 2  # シェイプパラメータ
scale = 1  # スケールパラメータ

# 確率密度関数の計算
x = np.linspace(0, 10, 1000)
pdf = stats.gamma.pdf(x, a=shape, scale=scale)

# グラフ化
plt.figure(figsize=(10, 6))
plt.plot(x, pdf, label='Gamma PDF (shape=2, scale=1)')
plt.xlabel('x')
plt.ylabel('Probability Density')
plt.title('Gamma Distribution Probability Density Function')
plt.legend()
plt.grid(True)
plt.show()
生成されたグラフ

ガンマ分布の累積分布関数のグラフ化

ガンマ分布の累積分布関数をグラフ化することで、特定の値以下になる確率を視覚的に表現することができます。

以下は、Pythonを用いてガンマ分布の累積分布関数をグラフ化するサンプルコードです。

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats

# ガンマ分布のパラメータ設定
shape = 2  # シェイプパラメータ
scale = 1  # スケールパラメータ

# 累積分布関数の計算
x = np.linspace(0, 10, 1000)
cdf = stats.gamma.cdf(x, a=shape, scale=scale)

# グラフ化
plt.figure(figsize=(10, 6))
plt.plot(x, cdf, label='Gamma CDF (shape=2, scale=1)')
plt.xlabel('x')
plt.ylabel('Cumulative Probability')
plt.title('Gamma Distribution Cumulative Distribution Function')
plt.legend()
plt.grid(True)
plt.show()
生成されたグラフ

ガンマ分布の応用例

ガンマ分布を用いた信頼区間の計算

ガンマ分布は、信頼区間の計算にも利用されます。

信頼区間は、母集団のパラメータが含まれる区間を推定するために使用されます。

以下は、Pythonを用いてガンマ分布を使って信頼区間を計算する例です。

import numpy as np
import scipy.stats as stats

# データセットの作成
data = np.array([10, 15, 20, 25, 30])

# 信頼区間の計算
alpha = 0.95  # 信頼水準
n = len(data)  # サンプルサイズ
mean = np.mean(data)  # 平均値
std_err = stats.sem(data)  # 標準誤差

# 信頼区間の計算
conf_int = stats.t.interval(alpha, df=n-1, loc=mean, scale=std_err)

print(f"信頼区間: {conf_int}")

このコードでは、与えられたデータセットから信頼水準95%の信頼区間を計算しています。

信頼区間はconf_intに格納され、結果が出力されます。

ガンマ分布を用いた仮説検定

ガンマ分布は、仮説検定にも利用されます。

仮説検定は、ある仮説が正しいかどうかを統計的に検証する手法です。

以下は、Pythonを用いてガンマ分布を使って仮説検定を行う例です。

import numpy as np
import scipy.stats as stats

# データセットの作成
data1 = np.array([10, 15, 20, 25, 30])
data2 = np.array([12, 18, 22, 28, 32])

# 2つのデータセットの平均値の差の検定
t_stat, p_val = stats.ttest_ind(data1, data2)

if p_val < 0.05:
    print("有意な差があります")
else:
    print("有意な差がありません")

このコードでは、2つのデータセットの平均値に有意な差があるかどうかを検定しています。

結果に応じて、有意な差がありますまたは有意な差がありませんと出力されます。

目次から探す