[Python] t分布を計算してmatplotlibで可視化する方法
Pythonでt分布を計算し、matplotlibで可視化するには、まずscipy.stats
モジュールのtクラス
を使用してt分布の確率密度関数(PDF)を計算します。
次に、matplotlib
を使ってその結果をプロットします。
具体的には、scipy.stats.t.pdf
を使ってt分布の値を計算し、matplotlib.pyplot.plot
でグラフを描画します。
自由度(degrees of freedom, df)を指定することで、異なるt分布を描画できます。
t分布とは何か
t分布は、統計学において重要な役割を果たす確率分布の一つです。
特に、サンプルサイズが小さい場合や母集団の標準偏差が不明な場合に、平均の推定や仮説検定に用いられます。
t分布は、正規分布に似ていますが、裾が厚く、自由度が小さいほどその特徴が顕著になります。
自由度が増えると、t分布は正規分布に近づきます。
この特性により、t分布は小さなサンプルからの推定において、より信頼性の高い結果を提供します。
Pythonでt分布を計算する方法
scipy.statsモジュールの紹介
Pythonでt分布を計算するためには、scipy
ライブラリのstats
モジュールを使用します。
このモジュールには、さまざまな確率分布に関する関数が含まれており、t分布の計算も簡単に行えます。
まずは、scipy
をインストールして、必要なモジュールをインポートしましょう。
# scipyをインポート
import scipy.stats as stats
t分布の確率密度関数(PDF)の計算
t分布の確率密度関数(PDF)は、特定の値に対する確率を示します。
scipy.stats.t.pdf関数
を使用して、t分布のPDFを計算できます。
以下は、自由度が5のt分布におけるx=1.0のPDFを計算する例です。
# 自由度
df = 5
# xの値
x = 1.0
# PDFの計算
pdf_value = stats.t.pdf(x, df)
print(pdf_value)
0.21967979735098053
t分布の累積分布関数(CDF)の計算
t分布の累積分布関数(CDF)は、特定の値以下の確率を示します。
scipy.stats.t.cdf関数
を使用して、t分布のCDFを計算できます。
以下は、自由度が5のt分布におけるx=1.0のCDFを計算する例です。
# CDFの計算
cdf_value = stats.t.cdf(x, df)
print(cdf_value)
0.8183912661754388
自由度を指定してt分布を計算する方法
t分布の計算では、自由度を指定することが重要です。
自由度は、サンプルサイズから1を引いた値であり、サンプルの数が多いほど自由度は大きくなります。
以下のコードでは、自由度を変えてt分布のPDFを計算する方法を示します。
# 自由度のリスト
dfs = [1, 5, 10]
# xの値
x = 1.0
# 各自由度に対するPDFを計算
for df in dfs:
pdf_value = stats.t.pdf(x, df)
print(f"自由度 {df} のPDF: {pdf_value}")
自由度 1 のPDF: 0.15915494309189535
自由度 5 のPDF: 0.21967979735098053
自由度 10 のPDF: 0.23036198922913864
t分布のパラメータの解説
t分布には主に以下のパラメータがあります。
パラメータ名 | 説明 |
---|---|
自由度 (df) | サンプルサイズから1を引いた値。t分布の形状に影響を与える。 |
平均 (μ) | t分布の中心位置。通常は0に設定される。 |
標準偏差 (σ) | t分布の広がり。通常は1に設定される。 |
自由度が小さいほど、t分布は裾が厚くなり、サンプルサイズが大きくなると正規分布に近づきます。
これにより、t分布は小さなサンプルからの推定において、より信頼性の高い結果を提供します。
matplotlibでt分布を可視化する方法
matplotlibの基本的な使い方
matplotlib
は、Pythonでデータを可視化するための強力なライブラリです。
特に、pyplot
モジュールを使用することで、簡単にグラフを作成できます。
まずは、matplotlib
をインポートして、基本的なプロットを作成する方法を見てみましょう。
# matplotlibをインポート
import matplotlib.pyplot as plt
# サンプルデータ
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# プロット
plt.plot(x, y)
plt.show()

t分布のPDFをプロットする
t分布の確率密度関数(PDF)をプロットするには、まずxの範囲を設定し、その範囲に対してPDFを計算します。
以下は、自由度が5のt分布のPDFをプロットする例です。
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
# 自由度
df = 5
# xの範囲
x = np.linspace(-5, 5, 100)
# PDFの計算
pdf_values = stats.t.pdf(x, df)
# プロット
plt.plot(x, pdf_values, label=f'自由度 {df}')
plt.title('t分布の確率密度関数')
plt.xlabel('x')
plt.ylabel('PDF')
plt.legend()
plt.grid()
plt.show()

複数の自由度でt分布を比較するグラフの作成
複数の自由度に対するt分布のPDFを比較するためには、同じグラフに複数の曲線を描画します。
以下のコードでは、自由度1、5、10のt分布を比較しています。
# 自由度のリスト
dfs = [1, 5, 10]
# xの範囲
x = np.linspace(-5, 5, 100)
# プロット
for df in dfs:
pdf_values = stats.t.pdf(x, df)
plt.plot(x, pdf_values, label=f'自由度 {df}')
plt.title('t分布の比較')
plt.xlabel('x')
plt.ylabel('PDF')
plt.legend()
plt.grid()
plt.show()

グラフのカスタマイズ(タイトル、軸ラベル、凡例)
グラフをより見やすくするために、タイトル、軸ラベル、凡例を追加することが重要です。
上記の例でも、plt.title()
、plt.xlabel()
、plt.ylabel()
、plt.legend()
を使用してカスタマイズしています。
これにより、グラフの内容が明確になり、視覚的に理解しやすくなります。
グラフの保存方法
作成したグラフは、画像ファイルとして保存することもできます。
plt.savefig()関数
を使用して、指定したファイル名で保存できます。
以下は、グラフをPNG形式で保存する例です。
# グラフのプロット
plt.plot(x, pdf_values, label=f'自由度 {df}')
plt.title('t分布の確率密度関数')
plt.xlabel('x')
plt.ylabel('PDF')
plt.legend()
plt.grid()
# グラフの保存
plt.savefig('t_distribution.png')
plt.show()

このように、matplotlib
を使用することで、t分布を簡単に可視化し、さまざまなカスタマイズや保存が可能です。
応用例:t分布を使った統計的検定
t検定とは
t検定は、2つのグループの平均を比較するための統計的手法です。
特に、サンプルサイズが小さい場合や母集団の標準偏差が不明な場合に有効です。
t検定には、独立した2つのグループの平均を比較する「独立t検定」と、同じグループの前後のデータを比較する「対応のあるt検定」があります。
t検定の結果は、p値として表され、通常は0.05以下であれば有意差があると判断されます。
Pythonでt検定を実行する方法
Pythonでは、scipy.stats
モジュールを使用してt検定を実行できます。
以下は、独立t検定の例です。
2つのサンプルデータを用意し、t検定を実行します。
import numpy as np
from scipy import stats
# サンプルデータ
group1 = np.array([2.3, 2.5, 2.7, 2.9, 3.0])
group2 = np.array([3.1, 3.3, 3.5, 3.7, 3.9])
# t検定の実行
t_statistic, p_value = stats.ttest_ind(group1, group2)
print(f"t統計量: {t_statistic}, p値: {p_value}")
t統計量: -4.297967830559864, p値: 0.002622950496536477
t検定の結果を可視化する
t検定の結果を可視化することで、データの分布や平均の差を直感的に理解できます。
以下は、2つのグループのデータを箱ひげ図で表示する例です。
import matplotlib.pyplot as plt
# データをまとめる
data = [group1, group2]
# 箱ひげ図の作成
plt.boxplot(data, labels=['グループ1', 'グループ2'])
plt.title('グループ間の比較')
plt.ylabel('値')
plt.grid()
plt.show()

t分布を使った信頼区間の計算
t分布を用いて、サンプルの平均に基づく信頼区間を計算することができます。
以下は、95%の信頼区間を計算する例です。
# サンプルサイズ
n = len(group1)
# サンプル平均と標準偏差
mean = np.mean(group1)
std_dev = np.std(group1, ddof=1)
# t値の計算
t_value = stats.t.ppf(0.975, n-1) # 95%信頼区間のためのt値
# 信頼区間の計算
margin_of_error = t_value * (std_dev / np.sqrt(n))
confidence_interval = (mean - margin_of_error, mean + margin_of_error)
print(f"95%信頼区間: {confidence_interval}")
95%信頼区間: (np.float64(2.3244415410601236), np.float64(3.0355584589398767))
t分布を使った仮説検定の解釈
t検定の結果を解釈する際には、得られたp値を基に判断します。
一般的に、p値が0.05以下であれば、帰無仮説(2つのグループの平均に差がないという仮説)を棄却し、統計的に有意な差があると考えます。
逆に、p値が0.05以上であれば、帰無仮説を棄却できず、2つのグループの平均に有意な差がないと判断します。
t検定の結果は、研究や実験の結論に大きな影響を与えるため、慎重に解釈することが重要です。
応用例:t分布と他の分布の比較
正規分布との比較
t分布と正規分布は、どちらも連続確率分布ですが、主にサンプルサイズやデータの特性によって使い分けられます。
t分布は、サンプルサイズが小さい場合や母集団の標準偏差が不明な場合に使用され、裾が厚いのが特徴です。
一方、正規分布はサンプルサイズが大きい場合に適用され、裾が薄く、平均を中心に対称的です。
t分布は自由度が小さいほど裾が厚くなり、自由度が増えると正規分布に近づきます。
カイ二乗分布との比較
カイ二乗分布は、主に分散の推定や適合度検定に使用される分布です。
t分布は平均の推定に関連しているのに対し、カイ二乗分布は分散に関連しています。
カイ二乗分布は、自由度が増えると正規分布に近づく特性がありますが、t分布とは異なり、常に非対称で右に裾が長い形状を持っています。
カイ二乗分布は、サンプルの分散が母集団の分散に従う場合に使用されます。
F分布との比較
F分布は、2つの母集団の分散を比較するために使用される分布です。
t分布は平均の比較に使用されるのに対し、F分布は分散の比較に特化しています。
F分布は、2つのカイ二乗分布の比として定義され、自由度に応じて形状が変わります。
F分布は常に非対称で、右に裾が長い形状を持ち、自由度が増えると分布がより集中します。
t検定はF検定の特別なケースと考えることができます。
各分布の可視化と違いの解説
以下のコードでは、t分布、正規分布、カイ二乗分布、F分布を可視化し、それぞれの違いを示します。
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
# xの範囲
x = np.linspace(-5, 5, 100)
# t分布(自由度5)
t_pdf = stats.t.pdf(x, df=5)
# 正規分布
normal_pdf = stats.norm.pdf(x)
# カイ二乗分布(自由度5)
chi2_pdf = stats.chi2.pdf(x**2, df=5)
# F分布(自由度3, 5)
f_pdf = stats.f.pdf(x**2, dfn=3, dfd=5)
# プロット
plt.figure(figsize=(12, 8))
plt.plot(x, t_pdf, label='t分布 (df=5)', color='blue')
plt.plot(x, normal_pdf, label='正規分布', color='green')
plt.plot(x**2, chi2_pdf, label='カイ二乗分布 (df=5)', color='red')
plt.plot(x**2, f_pdf, label='F分布 (dfn=3, dfd=5)', color='orange')
plt.title('t分布と他の分布の比較')
plt.xlabel('x')
plt.ylabel('確率密度')
plt.legend()
plt.grid()
plt.show()

このグラフから、t分布は裾が厚く、正規分布は対称的であることがわかります。
また、カイ二乗分布は右に裾が長く、F分布も同様に非対称であることが確認できます。
これらの分布の特性を理解することで、適切な統計手法を選択する際の参考になります。
まとめ
この記事では、t分布の基本的な概念から始まり、Pythonを用いたt分布の計算方法や可視化手法、さらにはt分布を利用した統計的検定の実施方法について詳しく解説しました。
また、t分布と他の確率分布との比較を通じて、それぞれの特性や適用場面についても触れました。
これらの知識を活用することで、実際のデータ分析や統計的推定において、より適切な手法を選択できるようになるでしょう。
今後は、実際のデータを用いてt分布や他の分布を適用し、統計的な分析を行ってみることをお勧めします。