【統計学R】素朴な乱数を利用して、正規分布っぽいか判定しようと思ったら事故った話
イントロ
こんにちは、たちつてとです。
前回、メルセンヌツイスタっていう乱数発生方法を利用して
正規分布っぽい分布や(正規分布になるはずだけど、サンプル数が少なくために)
正規分布っぽくない分布を作りました。↓前回記事です。
tachitutetonosuke.hatenablog.com
tachitutetonosuke.hatenablog.com
このデータたちに対して、いつかお世話になった正規性の検定をかましていったら
Rの方で問題が起きちゃった話です。
前回の復習と予想(と結果)
前回やったことを3行で書くと
0 or 1を返す確率変数をM回足す。
それをN回試す。
をやって、M回足してできた数の確率分布を見てみた
って話になります。
前回作った確率分布が下図なのですが、誰だっての時
の分布については、p値が大きくなって帰無仮説を棄却できなくなるのでは?
と思うはずです。
で、結論からのべると、Rくんの分布の取り方のせいで判断が保留になりました。
この結論出すのに、貴重な休日が費やされたので人のせいにしたくなるのも人情です。
悲しき結果
まず現象の理解(予想)
Kolmogorov-Smirnov検定をやってみました。初出はした記事。
tachitutetonosuke.hatenablog.com
下から3行目、p_valueをみてください。0.00000...22ってなっているでしょう...
前回も見たように、正規分布の関数形を仮定しフィッティングできているので、
p値がこんなに小さいのは、正直困ります。
ほんまたるい。
一緒に、確率分布と正規分布をはいてくれるんですが。
赤字のコメントは一旦おいといて、黒線とデータの分布がずれているのが
わかると思います。
- 全体的にずれている
- 検定処理でのずれが蓄積
- 正規分布である確率(=p値)が小さくなる
って感じなんですかね?あくまで予想ですがね...
ここが違う...
まず誰が悪いかというと、Rなんですが(事実)。
で、もっというと確率分布の取り方が悪いことがわかってるんです。
下図は僕が自分で作った確率分布です。長方形でなく丸い点がたくさんあるのは、
僕の怠慢なのであまり気にしないでください。
緑の線は、今回のデータから平均値と分散を
計算して、正規分布をプロットしたものになります。よくあっているのがわかります。
なので、僕の作った分布が正しい!です。この下図を基準にして話を続けます。
黒字のコメントの通り、x=51のところに分布の頂点がきます。これは
47 0.066700
48 0.072700
49 0.076700
50 0.076300
51 0.079100 ←ここ
52 0.076500
53 0.070800
という感じのデータがあって間違いないことです。
(上図の左下が50.9585となってるのは、51ぴったりにカーソルを持ってこれなかった
だけです...)
それで、先ほど保留したRがはいた分布(上図の一つ上の図)の話になります。
x=51直上には、
分布の長方形の中心ではなく、かどがきている
のがわかると思います。どうなって欲しかったかというと、赤い枠線のすぐ横の
一番高い長方形が上図の赤線の位置に来て欲しかった
です。
どうしてそうなったか
以下では、めんどくさいので横軸の値をとします。
Rくん的には、例えば、の点との範囲が対応しています。ここが悪い。今回の実験で、小数点なんて必要ないです。
少し長くなります。
大前提として、確率分布を有限の数データから作成するときは、空間(と
いうか横軸)を分割します。Rの作った確率分布は視覚的にわかりやすいですが、
線ではなく長方形からできているじゃないですか。つまり、確率分布を我々がデータ
から作るとき、連続的でなく離散的なものしか作れません。
離散的というのは整数1,2,3...という具合です。小数をとばして数えているでしょう。
なので、確率分布を作るときは、横軸を適当に分割(して離散的に)するという作業が
必須になります。※データが増えると、分割の仕方を細かくできるので、連続的な分布に近くなります。
ここで話が戻ります。
分割した結果、例えばという部分ができます。
一方で、この範囲の代表点って何かというと、範囲の真ん中であるが
最も自然でしょう。で、この分割の仕方だとどうしても小数点が出てきてしまう。
本当は、整数(=50)プラスマイナス0.5が一番嬉しい。↑の例では、
の代表点とだと自然ですよね?
このように対応させてくれると嬉しかった...
もしくは、整数プラスマイナス2.5とか。何しろ、範囲の端にしか値がないのは激しすぎる...
結局どういうこと
データから作成された確率分布の代表点の値と
データの平均値と標準偏差を当てはめた正規分布のの時の値を比較して
検定をしているはず
→今、0 or 1の乱数を足してるだけなのに、50.5なんて値出てくるはずないやん...
要は、「空間の分割の仕方が悪い」
となります。
一般に、
の値が50,50.1,50.8などと、の値が50以外の値もあるときは問題ないです。
しかし今回、は整数なので、の範囲にはの値しかないです。したがって、をの代表点として、対応させるの
は嬉しくないです。
Rの設定かスクリプトかいじればいいんでしょうが...めんどくさい...
最後に
【鉄獣戦線 徒花のフェリジット】メルカリ相場の価格分布はやはり正規分布っぽくない話(確定編)【遊戯王】
この話を確認してみたところ、範囲が1000円単位とかだったので、今回ほどは激しくなかったですね。この1000円の範囲に、11333とか11666とかがいるはずなので。
多分、結果は覆らない...はず....