• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

QQプロット

date: 2024-03-16 excerpt: QQプロットについて

tag: 正規分布統計QQプロット


QQプロットについて

概要

  • QQプロットは、2つのデータセットが同一の分布に従うかを視覚的に家人するためのグラフ
  • 多くは正規分布に従うかを確認するために使用される
    • 他の分布についても同様の手法で確認可能

正規表現のQQプロットの手順

  • サンプルデータを昇順に並べ替える
  • 理想的な正規分布から値を抽出し、昇順に並べ替える
  • 双方のデータの分位数を求め、プロットする
  • 分布が正規分布に従っている場合、プロットは直線(45度)に近い形状になる

numpyでの実装

import numpy as np
import matplotlib.pyplot as plt

# サンプルデータの生成 (正規分布に従う乱数を500個生成)
np.random.seed(0)  # 結果の再現性のため
sample_data = np.random.normal(loc=0, scale=1, size=500)

# サンプルデータをソート
sorted_sample = np.sort(sample_data)

# 理論的な正規分布の分位数を計算
norm_quantiles = np.linspace(0, 1, len(sorted_sample) + 2)[1:-1]
theoretical_quantiles = np.quantile(np.random.normal(loc=0, scale=1, size=10000), norm_quantiles)

# QQプロットの描画
plt.figure(figsize=(8, 8))
plt.plot(theoretical_quantiles, sorted_sample, "o", label="Sample Quantiles")
plt.plot(theoretical_quantiles, theoretical_quantiles, 'r--', label="Theoretical Quantiles")
plt.xlabel('Theoretical Quantiles')
plt.ylabel('Sample Quantiles')
plt.title('QQ Plot')
plt.legend()
plt.show()
QQプロット

statsmodelsでの実装(デフォルトで正規分布のQQプロットを描画)

import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt

# サンプルデータの生成 (正規分布に従う乱数を500個生成)
np.random.seed(0)
sample_data = np.random.normal(loc=0, scale=1, size=500)

# QQプロットの作成 (デフォルトでは正規分布と比較される)
fig = sm.qqplot(sample_data, line='45')
plt.title('QQ Plot')
plt.show()


正規分布統計QQプロット Share Tweet