統計分析 SciPy

統計分析

統計分析の一例として、t検定を用いた2つのサンプル間の平均値の差の検定を行います。

以下に、SciPyを使ってt検定を実行する方法を示します。


まず、2つのサンプルデータを用意します。

1
2
sample1 = [12, 15, 16, 18, 19, 22, 24, 25, 26, 28]
sample2 = [20, 22, 24, 26, 28, 30, 32, 34, 36, 38]

次に、SciPyのstatsモジュールをインポートし、ttest_ind関数を使ってt検定を実行します。

1
2
3
from scipy import stats

t_statistic, p_value = stats.ttest_ind(sample1, sample2)

t_statisticはt統計量、p_valueはp値を表します。

p値が有意水準(例えば0.05)よりも小さい場合、帰無仮説(2つのサンプル間に平均値の差がない)を棄却し、対立仮説(2つのサンプル間に平均値の差がある)を採択します。

1
2
3
4
5
alpha = 0.05
if p_value < alpha:
print("帰無仮説を棄却し、対立仮説を採択します。2つのサンプル間に平均値の差があります。")
else:
print("帰無仮説を採択します。2つのサンプル間に平均値の差はありません。")

この例では、sample1sample2のデータを用いてt検定を実行し、2つのサンプル間に平均値の差があるかどうかを検定しています。

[実行結果]
帰無仮説を棄却し、対立仮説を採択します。2つのサンプル間に平均値の差があります。

グラフ化

結果をグラフ化するために、MatplotlibSeabornを使ってデータの分布を可視化し、t検定の結果を理解しやすくします。

以下のコードで、2つのサンプルデータのヒストグラム箱ひげ図を作成できます。


まず、必要なライブラリをインポートします。

1
2
import matplotlib.pyplot as plt
import seaborn as sns

次に、ヒストグラムを作成します。

1
2
3
4
5
6
7
plt.hist(sample1, alpha=0.5, label='Sample 1')
plt.hist(sample2, alpha=0.5, label='Sample 2')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.legend(loc='upper right')
plt.title('Histogram of Sample 1 and Sample 2')
plt.show()
[実行結果]

このヒストグラムでは、sample1sample2のデータ分布が重なっている部分が少ないことがわかります。

これは、2つのサンプル間に平均値の差があることを示唆しています。


さらに、箱ひげ図を作成してデータの分布を確認します。

1
2
3
4
5
6
sns.boxplot(data=[sample1, sample2])
plt.xlabel('Sample')
plt.ylabel('Value')
plt.title('Boxplot of Sample 1 and Sample 2')
plt.xticks([0, 1], ['Sample 1', 'Sample 2'])
plt.show()
[実行結果]

箱ひげ図では、sample1sample2中央値四分位範囲外れ値が表示されます。

この図からも、2つのサンプル間に平均値の差があることがわかります。


これらのグラフを使って、t検定の結果を視覚的に確認できます。

グラフにより、2つのサンプル間に平均値の差があることが示されているため、t検定の結果が理解しやすくなります。

解釈

グラフによる結果の確認が終わったら、t検定の結果を詳しく解釈しましょう。

先ほどのt検定の結果を再度表示します。

1
2
print(f"t統計量: {t_statistic:.2f}")
print(f"p値: {p_value:.5f}")
[実行結果]
t統計量: -3.34
p値: 0.00364

t統計量p値を見て、帰無仮説(2つのサンプル間に平均値の差がない)を棄却するかどうかを判断します。

p値が有意水準(例えば0.05)よりも小さい場合、帰無仮説を棄却し、対立仮説(2つのサンプル間に平均値の差がある)を採択します。

1
2
3
4
5
alpha = 0.05
if p_value < alpha:
print("帰無仮説を棄却し、対立仮説を採択します。2つのサンプル間に平均値の差があります。")
else:
print("帰無仮説を採択します。2つのサンプル間に平均値の差はありません。")
[実行結果]
帰無仮説を棄却し、対立仮説を採択します。2つのサンプル間に平均値の差があります。

この例では、グラフとt検定の結果から、sample1sample2の間に平均値の差があることが示されています。

これにより、データを分析し、2つのサンプル間の違いを定量的に評価することができます。

統計分析を通じて、データに潜むパターンや関係性を明らかにし、意思決定や予測に役立てることができます。