正規QQプロット(Normal Quantile-Quantile Plot)は、観測データが正規分布に従っているかを調査する方法です。
下記に正規QQプロットについて説明します。
正規QQプロットの数式
-
観測データの分位数(Sample Quantiles):
観測データの分位数を小さい順に並べます。
並べた観測値を下記にようにします。
$$ Q_{\text{observed}} = { q_{(1)},q_{(2)}, \ldots, q_{(n)} } $$ ここで、$q_{(k)}$ は観測データの中で $k$ 番目に小さい値です。 $n$でデータ数です。 -
理論的な分布の分位数(Theoretical Quantiles):
各データの分位点(累積確率)を算出します。
$p_{(k)} = \frac{k}{n+1}$を用いて、それぞれの分位点を算出します。
正規分布の確率密度関数の逆関数$F^{-1}(x)$を用いて期待値を算出します。 $$Q_{\text{theoretical}} = { F^{-1}(p_{(1)}), F^{-1}(p_{(2)}), \ldots, F^{-1}(p_{(n)}) }$$ -
正規QQプロットの作成:
正規QQプロットは、 $Q_{\text{theoretical}}$を横軸に、 $Q_{\text{observed}}$を縦軸にとり、これらの対応関係を散布図としてプロットします。理想的には、両者が一致する場合、データは対象とした理論分布に従っていることになります。
解説
-
観測データの分位数 $q_{(k)}$ は、実際に観測されたデータの中で小さい順に並べた値です。これにより、データの分布全体の形状を示します。
-
理論的な分布の分位数 $F^{-1}(p_{(k)})$ は、比較したい理論的な確率分布 $F$ の逆関数を用いて計算されます。これにより、理論分布がどのように観測データに適合するかを示します。
-
正規QQプロットの対角線 は、完全な一致を表す参照線であり、もし観測データが理論分布に完全に従っていれば、点はこの線上に分布します。
Pythonで表示する場合は、下記のように作成することでも可能です。
statsmodelsというライブラリを用いることで調べることができます。
今回の記事で利用しているバージョンは0.14.0です。
$ pip install statsmodel
また、今回は実際のデータではなく、乱数を用いて作成した正規分布に従う値を用いています。
import statsmodels.api as sm
from matplotlib import pyplot as plt
np.random.seed(0)
data = np.random.normal(loc=0, scale=1, size=1000)
fig = sm.qqplot(data, stats.t, fit=True, line="45")
実行した際に下記のようなグラフが出力されます。
赤色の直線にデータが当てはまれば正規分布に従っていると言えます。