「データの見えざる手」の正規分布の図が一様分布に見えたのでRで試した
「データの見えざる手」は読んでいて、引っ掛かりまくりでした。
読んだかた、「U分布」ってピンときました?
どこで躓いたかというと、こんな感じでコンピュータシミュレーションの結果が紹介されていたのですが、上の「正規分布(ポアソン分布)」と書かれている図↓の見た目が一様分布っぽいんですよね。
本文を見てみると、
とあります。う~ん、xとyを一様分布に従って発生させて2次元にプロットしている、ってだけだよなー。
・・・(考え中)・・・
で、しばらく考えてみて、やっと分かりました。こうやって発生させたデータだと、マスの中の点の個数が正規分布になるのね。
実際に、一つずつやってみましょう。
n <- 1000 # 点の個数
m <- 10 # マスの区切りの数
# 座標は一様分布で従って発生させ、プロット
x <- runif(n, min=0, max=m)
y <- runif(n, min=0, max=m)
plot(x, y, pch="・")
# マスを書く
abline(h=0:m)
abline(v=0:m)
はい、本に載っているのと似たような絵になりました。
マスに入る個数を調べるには、引数を越えない整数を返すceilingが使えますね。
> interaction( ceiling(x), ceiling(y), sep="," )
[1] 4,1 9,3 10,1 1,5 3,1 1,6 8,1 8,3 10,6 5,7 2,6
[12] 2,5 2,7 7,6 6,10 4,9 3,3 1,1 2,4 9,6 10,10 2,3
...
マスが、(1,1), (1,2), ..., (1,10), (2,1), ..., (10,10)のように100個あって、1つ目の点は(4,1)のマスに、2つ目の点は(9.3)のマスに入っている、という感じです。
集計します。
> table( interaction( ceiling(x), ceiling(y), sep="," ) )
1,1 2,1 3,1 4,1 5,1 6,1 7,1 8,1 9,1 10,1 1,2 2,2
11 13 13 13 8 3 11 12 13 6 11 12
3,2 4,2 5,2 6,2 7,2 8,2 9,2 10,2 1,3 2,3 3,3 4,3
4 5 6 8 12 10 6 13 8 8 18 9
...
(1,1)のマスには11個の点、(2,1)のマスには13個の点が入っているようです。
ヒストグラムにしてみると、
う~ん、正規分布かぁ?
点とマスが少な過ぎたようです。
書籍に書いてあった数字でやってみましょう。
n <- 72000 # 点の個数
m <- 30 # マスの区切りの数
x <- runif(n, min=0, max=m)
y <- runif(n, min=0, max=m)
t <- table( interaction( ceiling(x), ceiling(y), sep="," ) )
hist(t)
うん、正規分布っぽいですね。
で、つまり手の動きが一様分布に従って発生するならば、単位時間あたりに動いた回数は正規分布に従うのだろうけど、実際はそうではなかった、ということみたいです。
考えている時間、キーボードを打つ時間、座っている時間、歩いている時間などがあることを考えると、手の動きが一様に発生するわけないってのは、なんだか当たり前のような気がします。
読んだかた、「U分布」ってピンときました?
どこで躓いたかというと、こんな感じでコンピュータシミュレーションの結果が紹介されていたのですが、上の「正規分布(ポアソン分布)」と書かれている図↓の見た目が一様分布っぽいんですよね。
正規分布(ポアソン分布)とU分布 (「データの見えざる手」より) |
本文を見てみると、
コンピュータシミュレーションでこれを実行するには、玉の位置をランダムに生成すればよい。横方向の位置(x)を決める1~30の乱数と縦方向の場所(y)を決める1~30の乱数を発生させ、(x,y)の位置に玉を置くのだ。
とあります。う~ん、xとyを一様分布に従って発生させて2次元にプロットしている、ってだけだよなー。
・・・(考え中)・・・
で、しばらく考えてみて、やっと分かりました。こうやって発生させたデータだと、マスの中の点の個数が正規分布になるのね。
実際に、一つずつやってみましょう。
n <- 1000 # 点の個数
m <- 10 # マスの区切りの数
# 座標は一様分布で従って発生させ、プロット
x <- runif(n, min=0, max=m)
y <- runif(n, min=0, max=m)
plot(x, y, pch="・")
# マスを書く
abline(h=0:m)
abline(v=0:m)
一様分布で発生させた点(マス内の個数は正規分布になる) |
はい、本に載っているのと似たような絵になりました。
マスに入る個数を調べるには、引数を越えない整数を返すceilingが使えますね。
> interaction( ceiling(x), ceiling(y), sep="," )
[1] 4,1 9,3 10,1 1,5 3,1 1,6 8,1 8,3 10,6 5,7 2,6
[12] 2,5 2,7 7,6 6,10 4,9 3,3 1,1 2,4 9,6 10,10 2,3
...
マスが、(1,1), (1,2), ..., (1,10), (2,1), ..., (10,10)のように100個あって、1つ目の点は(4,1)のマスに、2つ目の点は(9.3)のマスに入っている、という感じです。
集計します。
> table( interaction( ceiling(x), ceiling(y), sep="," ) )
1,1 2,1 3,1 4,1 5,1 6,1 7,1 8,1 9,1 10,1 1,2 2,2
11 13 13 13 8 3 11 12 13 6 11 12
3,2 4,2 5,2 6,2 7,2 8,2 9,2 10,2 1,3 2,3 3,3 4,3
4 5 6 8 12 10 6 13 8 8 18 9
...
(1,1)のマスには11個の点、(2,1)のマスには13個の点が入っているようです。
ヒストグラムにしてみると、
マス100個、点1000個で発生させた正規分布 |
点とマスが少な過ぎたようです。
書籍に書いてあった数字でやってみましょう。
n <- 72000 # 点の個数
m <- 30 # マスの区切りの数
x <- runif(n, min=0, max=m)
y <- runif(n, min=0, max=m)
t <- table( interaction( ceiling(x), ceiling(y), sep="," ) )
hist(t)
マス900個、点72000個で発生させた正規分布 |
で、つまり手の動きが一様分布に従って発生するならば、単位時間あたりに動いた回数は正規分布に従うのだろうけど、実際はそうではなかった、ということみたいです。
考えている時間、キーボードを打つ時間、座っている時間、歩いている時間などがあることを考えると、手の動きが一様に発生するわけないってのは、なんだか当たり前のような気がします。
コメント
コメントを投稿