1
6

More than 1 year has passed since last update.

統計学とPython: データの正規性検定と可視化

Last updated at Posted at 2023-05-16

本記事では、データ分析において重要な役割を果たす正規性検定について説明し、Pythonを用いた具体的な実装方法を紹介します。具体的には、ヒストグラムとQ-Qプロットの作成、そして正規性検定(ダゴスティーノの歪度/尖度検定、オムニバス検定、コルモゴロフ=スミルノフ検定、シャピロ=ウィルク検定)を取り上げます。

ヒストグラムの描画

ヒストグラムは、データの分布を可視化するためのツールです。Pythonでは、matplotlibのhist関数を使って簡単に描画できます。

import matplotlib.pyplot as plt
import numpy as np

# データ生成
data = np.random.normal(0, 1, 1000)

# ヒストグラムの描画
plt.hist(data, bins=30)
plt.show()

Q-Qプロットの描画

Q-Qプロットは、データの分布が特定の理論分布(ここでは正規分布)に従っているかを視覚的に判断するためのツールです。Pythonでは、scipyのprobplot関数を使って描画できます。

import scipy.stats as stats

# Q-Qプロットの描画
stats.probplot(data, dist="norm", plot=plt)
plt.show()

正規性の検定

ダゴスティーノの歪度/尖度検定

歪度と尖度はデータの形状を特徴付ける指標です。ダゴスティーノの歪度/尖度検定は、これらを基にデータが正規分布からどれほどずれているかを検定します。scipyのskewtestおよびkurtosistest関数を用います。

### 歪度の検定
skewness, skew_p_value = stats.skewtest(data)
print(f'Skewness test statistic: {skewness}, p-value: {skew_p_value}')

### 尖度の検定
kurtosis, kurt_p_value = stats.kurtosistest(data)
print(f'Kurtosis test statistic: {kurtosis}, p-value: {kurt_p_value}')

オムニバス検定

オムニバス検定は、歪度と尖度の両方を考慮して正規性を検定します。scipyのnormaltest関数を使います。
以下のコードでは、正規分布からランダムに生成した1000個のデータをテストしています。検定統計量とp値が出力されます。p値が一定の閾値(一般的には0.05)以下であれば、そのデータが正規分布に従っていないと判断します。

from scipy import stats

# データ生成
data = stats.norm.rvs(size=1000)

# オムニバス検定の実行
k2, omnibus_p_value = stats.normaltest(data)
print(f'Omnibus test statistic: {k2}, p-value: {omnibus_p_value}')

コルモゴロフ=スミルノフ検定

コルモゴロフ=スミルノフ検定は、サンプル分布と理論分布が同じかを検定します。scipyのkstest関数を使います。

ks_statistic, ks_p_value = stats.kstest(data, 'norm')
print(f'K-S test statistic: {ks_statistic}, p-value: {ks_p_value}')

シャピロ=ウィルク検定

シャピロ=ウィルク検定は、データが正規分布に従っているかを検定します。scipyのshapiro関数を使います。

W, shapiro_p_value = stats.shapiro(data)
print(f'Shapiro-Wilk test statistic: {W}, p-value: {shapiro_p_value}')

有用なデータ分析の場面

正規性検定はデータ分析の様々な場面で活用されます。例えば、A/Bテストにおける結果の分析、統計的仮説検定、回帰分析など、多くの統計的手法はデータの正規性を前提としています。また、データの特性を理解するためにも、その分布の形状を確認することは有用です。

1
6
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6