与えられたデータの分布について
データ解析の基礎となるが、与えられた(あるいは収集した)データがどのような分布を有するかである。ヒストグラムを描いてデータ分布の性状を確認することが重要であるが、例えば分布が正規分布やt分布とどれほど近い・離れているのかや、統計学的にその差は有意なのかを検定することは重要だろう。以下ではPythonのいくつかのライブラリーを用いてQQ plotの描写やコルモゴロフ・スミルノフ検定などを行う。
QQプロット
まずはQQプロットから。QQプロットとは、横軸(\(x\)軸)に正規分布やt分布など指定する分布のppf (percent point function)、縦軸(\(y\)軸)に手持ちのデータのppfを描写するものである。Statsmodelsのライブラリーで簡単に行うことができる。
import statsmodels.api as sm
sm.qqplot(data, dist=<scipy.stats._continuous_distns.norm_gen object>, distargs=(), a=0, loc=0, scale=1, fit=False, line=None, ax=None, **plotkwargs)
以下で上のコードの説明を簡単に行う。”data”は自分が調べたい\(1\)次元のデータ。”dist”は比較する分布。デフォルトでは標準正規分布になっている。指定できるのは以下。
確率分布 | stats |
正規分布 | stats.norm |
ベータ分布 | stats.beta |
カイ二乗分布 | stats.chi2 |
F分布 | stats.f |
ガンマ分布 | stats.gamma |
t分布 | stats.t |
一様分布 | stat.uniform |
ベルヌーイ分布 | stats.bernoulli |
二項分布 | stats.binom |
ポアソン分布 | stats.poisson |
“distargs”はdist.ppfが完全に呼び出されるように指定するためにdistに渡される引数のタプル。どういうことかというと、t分布などでは自由度が必要なので、これを指定する。”a”は期待順序統計量のプロット位置のオフセットなど。プロット位置は\(\displaystyle \frac{i-a}{nobs-2\cdot a+1}\ \ (i = 0, 1, \cdots, nobs+1)\)で与えられる。”loc”と”scale”は指定する分布の位置パラメータ、スケールパラメータ。”fit”がFalseの場合、loc、scale、distargs が分布に渡される。fitがTrueの場合、distのパラメータはdist.fitを使用して自動的にフィットする。分位数は標準化されたデータからフィットされたlocを引き、フィットされたscaleで割ったものから作られる。”line”はreference線を引く。
line: {None, "45", "s", "r", "q"}
から指定する。”45″を指定するとすると\(x = y\)、”s”は標準線。”r”は回帰直線、”q”は4分位にfitした直線。defalutはNoneになっている。
QQプロットの実例
データセットは何でも良い。seabornのirisデータセットを用いる。
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from scipy import stats
df = sns.load_dataset("iris")
sm.qqplot(df["sepal_length"],dist = stats.norm, fit = True, line = "45")
概ねよくfitしているように見える。t分布やその他自由に対象となる分布を指定すれば良い。もう一つ例をあげる。
sm.qqplot(df["sepal_length"], dist = stats.t, distargs = (4,), loc = 2, scale = 3,fit = False, line = "45")
この例では全然fitしていない。
コルモゴロフ・スミルノフ検定
scpiyで行う。
from scipy import stats
stats.kstest(df["sepal_length"], "norm")
結果はこちら。
KstestResult(statistic=0.999991460094529, pvalue=0.0)
この場合、帰無仮説は正規分布と異なる、になるのでirisデータセットのsepal_lengthはほぼ正規分布と考えて良い事がわかる。
正規分布との比較の場合、
stats.shapiro
とすればシャピロ・ウィルク検定を行うことができる。
コメント