今回はRを用いてQ-Qplotに関する話をしたいと思います。Q-Qplotは準一級の範囲だと思います。統計好きの人が問題にしたそうな内容ですよね。知りませんが。
Q-Qplotとは?
q-qplotとは簡単に言うと2つの分布(多くは得られた分布と理想的な分布)の類似の程度を視覚的に把握するplot図の事です。右肩上がりの直線に成る程良いとされています。使う機会を見かけるのは「この得られた分布は正規分布と言っていいのだろうか?」知りたい時とかですかね。
Q-Qplotの実例
今回はQ-Qplotの中でも得られたデータが正規分布を示しているのかを検証します。
こぼ場合はqqnormを使います。
得られたデータが正規分布している時のイメージ
step1 得られた分布を累積密度関数に
標準正規分布(mean=0,sd=1)に従う分布から100個の乱数を抽出し、得られた分布がきちんと正規分布に従っているかを確認しましょう。
まずはN(0,1)に従う分布から100個の乱数を抽出します。
それをx軸に並べ、y軸は累積密度にしたグラフが以下です。今回のサンプルサイズは100なので、1値毎に累積密度は0.01だけ上がっていくので階段状になっています。
負と正が綺麗に50-50に分かれているのが怖いですが抽出された100個の乱数を昇順に並べると以下の通りです。x=-2.36が最も小さい値で1つ目なのでy軸の累積密度関数は0.01の値をとります。x=-2.09では0.02、x=-1.96では0.03…のようにplotしていき、最大値x=2.06で累積密度関数は1をとります。
step2 比較する関数を累積密度関数に
今回は正規分布と比較するので、正規分布の累積密度関数を準備します。
見たことある図だと思います。例えば、標準正規分布表によるとZ=1.96の面積は0.475ですよね。正規分布は対称なのでx=-1.96での累積密度関数は0.025を取っています。
step3 2つの累積密度関数において各分位数(同じ累積密度関数の値)における各xの値をプロット
言葉ではわかりずらいので実際に視覚的に見てみましょう。
左から順にstep1で得た100個の乱数の累積密度分布、step2で得た累積密度分布、そしてq-qplotです。
q-qplotは同じ分位数当たりの値をカウントしていく訳です。例えば40個目の乱数、今回は乱数を100個抽出したのでつまり累積密度関数が0.4の時の各xの値は何でしょう?
左のstep1においてy=0.4と交わる点のxは-0.243です(図では小さくて分かりにくいですが、上図の乱数の昇順で40個目の値と同値なので⁾。
真ん中のstep2でy=0.4と交わる点のx値といえば、標準正規分布表で面積が0.1になるZ値を負にしたものです。標準正規分布表を開くとZ=0.25で面積は0.0987, Z=0.26で面積は0.1026となっています。今回はZ=0.25を採用することにします。
右のQ-Qplotでは縦軸にはstep1で得られた値で今回は-0.24が与えられます。横軸にはstep2で得た値で今回は-0.25が与えられます。この縦軸-0.24と横軸-0.25で与えられる点をplotします。
もう1つやってみましょう。累積密度関数の値=0.05の時を考えます。step1の乱数側では昇順で5番目の値なので-1.62です。step2の正規分布の累積密度分布ではp=0.05でよく使うZ=1.64なので与えられる値は-1.64です。Q-Qplotで左から5番目の点を読み取ると座標は(-1.64,-1.62)です。
これを累積密度関数値=,0.050.4だけでなく0.01から0.02,0.03…0.98,0.99,1.00の100個分でプロットすることでQ-Qplotが完成します。
Q-Qplot for rnorm(100) and normal distribution
Q-Qplotの見方
しつこいようですがQ-Qplotでは同じ分位数(累積密度関数の値)において求められる各数値を取ってplotしたものです。
今回は同じ正規分布から得たので数値のスケールは同じですが、普段は異なる機会が多いでしょう。ですがQ-Qplotでみたいのは2つの分布が類似しているかどうかだけ。重要なのは散らばり具合の類似度な訳です。同じ分位毎にplotしているので、どちらの値も尺度は違えど全体のスケールからみて同程度の値を取っていればy=xに近づきそうですよね。またy=xからの解離・ゆがみ具合でどのように分布が歪んでいるかを把握することが出来ますし、問題として作り易そうです。
(暇な時に問題作りたい)
MLB選手の安打数は正規分布を示しているかをQ-Qplotで検証
2018年に出場したMLB選手の安打数は正規分布を示しているのかを検証したいと思います(してないと思うので失敗例として扱う事を前提にしています)。本当はNPBにしようとしたけどMLBの方が人数多いしデータ揃ってそうなので。ここから引用しました。選手の抽出や.CSVでdataを得られたり本当に便利。すごい。
step1 2018年のMLB選手の安打数を累積密度分布に落とす
まずはヒストグラムを描くと
0~20本が多くて明らかに正規分布ではないです。これを累積密度分布に落とし込むと
0が多すぎて初っ端から累積密度が0.4位から始まるという笑
どうしてこうなるかというと毎日レギュラーで活躍している人は一握りで、4割近くの人はマイナーを往ったり来たりする控え選手or投手だからでしょう。
これでいいのかと考えた私はヒット数が20本以下は切り捨てて、21本以上の人に絞り込みました(本当は規定打席の方がいいんでしょうが)。すると
正規分布ではないですが、まだ使えそうな分布が得られました。累積密度分布に変換
すると
y=√x ,log(x)のような関数になりました。せっかくなのでこの2つをそれぞれQ-Qplotで正規分布と比較していきます。
step2 正規分布を累積密度分布に
これは前のと同じなので省略
step3 2つの累積密度関数において各分位数(同じ累積密度関数の値)における各xの値をプロット
まずはヒット数で限局していない1つ目の累積密度分布と正規分布でかけてやると
直線とは程遠い曲線が得られました。3つ並べると
左がヒット数の累積密度分布、真ん中が標準正規分布の累積密度分布、右がQ-Qplot.横軸が正規分布のx値で縦軸がMLB側のx値つまりヒット数です。初めは横軸が進んでも縦軸が全く縦に伸びていないのは0付近の値が多いからです。つまり半数近くは0付近のヒット数を誇っているのでしょう。
次に、ヒット数21本以上に限局した場合のQ-Qplotでは
直線とは言い難いですが、1つ目の限局しない場合よりはマシだと思います。それでも極端でないとはいえ本数が少ない選手の方が相対的に多くなっているので最初は鈍く、途中から鋭く曲がるような曲線になってしまっています。
よってMLBの選手の安打数は正規分布していないことが分かります(この程度だとhistで分かりますが)。
Q-Qplot as for the number of hit at(BAT) 2018MLB
Q-Qplotの正確な理解(未)
上で説明したのが1番イメージしやすい考えだと思っているし、Q-Qplotってそんなに正確な情報を得るために使う物ではないと勝手に思っているので十分だと思うのですが、実際は違うみたいなんですよね~ 頭いい人なら余裕で理解できるのでしょうが
だってこの考えだと累積密度関数の値が1の時の正規分布側の値って無限になりません? ずっと引っかかってました。wikipediaを拝見した所、
正規確率プロットを使用する際には、標準正規分布の順序統計量の期待値の尺度であるランキットを使用する。
なんとなくわかった。でも確認のために標準正規分布の順位統計量を自力で求めてみればいいのだろうけどちょっと面倒くさい…それにRでhelp(qqnorm)を入れても全部英語だし。上で説明したのも的外れ? 今後も勉学に努めます…