便利な数を100億個の乱数から算出
DESCRIPTION
A consideration about picking up the `best' values from N times experiences. Mathematically, the author considered "how the maximum value of N values that are distributed normally distributes?". The median values are 0.998, 1.498, 1.998 for N=4,10,30, respectively. This proposition would be useful because everybody quite often is in need of choosing something best from multiple candidates in their daily or social life. The figures shown above are easy to remember so you can utilize them with ease.TRANSCRIPT
いくつかの物や話の中から「ベスト」を取り出すとは
どういうことなのか乱数 ( ガウス分布 ) を約 100 億個取り出し
便利そうな数を算出してみた
2013-12-03 作成 下野寿之 (JAPAN.R 2013 @Yahoo! LT 発表用 )
" "経験数N
最大値の中央値
最大値の期待値
4 0.998 1.0210 1.498 1.5330 1.998 2.04
( )端数処理は切り捨てによる
Statement :
「乱数 N 個の最大値」はどんな分布だろうか ?N 個の乱数 ( ~標準ガウス分布 ) から最大値を取り出す。この値はどんな分布だろうか ? 特に中央値はいくらであろうか ? ← これに答えます。
10 個の乱数を標準ガウス分布から取り出して最大値を取り出すことを 10万回反復。 1 万回ごとにヒストグラムを描いて 10 コマの動画にした。中央値はほぼ 1.5 。
― その正確な値はいくらであろうか ?― N=10 個という数を変えたらどうなる ?
何を考えようとしたか
上記の変数 l ( エル ) を 1 万から 1 億程度に増やしてできるだけ中央値を正確に計算する。計算上の工夫として、 1000 万個ずつ乱数を発生して、中央値を計算して、 csvファイルとして出力して、推定誤差も見積もれるようにする。
4 回 : +1.0σ; 10 回 : +1.5σ ; 30回 : +2.0σ
意味が分かれば、記憶しやすく、便利な数。 ― 近似するとキリの良い数である。 ― どの 3 個の値も、その近似値マイナス 0.002 の操作で、さらに精度が高まる。応用例 : 「 30 回の経験を知っている人の話は、 +2σ 盛られた話だから、 2σ 差し引いて話を聞いた方が良い。」
やや日常的な解釈 : ガウス分布 (μ,σ は所与 ) から、30 個の乱数を取り出す。「その最大値はぴったり 50%の確率で、 μ + 1.998.. σ 」以上になる。同様に 「~」以下になる。
各 N について、 M 個の乱数を N 個ずつに分けて、それぞれの最大値を算出する。それら (M÷N) 個の数の中央値と平均値が、それぞれ第 3 列と第 4列である。この 2 個の数は、 0.03 程度の差がある。
結論" "経験数
N算出に用いた
乱数の個数 M最大値の中央値
[ 2 (SD)]下 桁の標準誤差最大値の期待値
1 ― 0 0
4 41億 0.998 147 [22] 1.02 93
10 41億 1.498 802 [29] 1.53 67
30 51億 1.998 224 [40] 2.04 27
■
ここからは補足事項予備知識、背景、計算や結果の考察など
予備知識 : ガウス分布とは
[0,1] 区間から取り出した一様乱数を 2 回、 3回、 4 回と足し合わせたものをヒストグラムにすると、その形は次第に、一定の形になる( ベルカーブ , 左の図 ) 。 その究極の形の分布を、「ガウス分布」と呼ぶ。正規分布とも呼ぶ。
平均値 μ を 0 、散らばりの尺度である標準偏差 σ を 1 になるように調整したものを特に、「標準ガウス分布」と呼ぶ。標準正規分布とも呼ぶ。
ガウス分布は、多くの分布をよく近似する。たとえば、身長の分布、体重の分布、測定誤差を伴う観測の結果の分布などを、ガウス分布で近似できる。
Histogram of runif(1e+06)
runif(1e+06)
Fre
quen
cy
0.0 0.2 0.4 0.6 0.8 1.0
010
000
3000
050
000
Histogram of runif(1e+06) + runif(1e+06)
runif(1e+06) + runif(1e+06)
Fre
quen
cy
0.0 0.5 1.0 1.5 2.0
020
000
6000
0
Histogram of runif(1e+06) + runif(1e+06) + runif(1e+06)
runif(1e+06) + runif(1e+06) + runif(1e+06)
Fre
quen
cy
0.0 0.5 1.0 1.5 2.0 2.5 3.0
050
000
1000
0015
0000
Histogram of runif(1e+06) + runif(1e+06) + runif(1e+06) + runif(1e+06)
runif(1e+06) + runif(1e+06) + runif(1e+06) + runif(1e+06)
Fre
quen
cy
0 1 2 3 4
040
000
8000
012
0000
Histogram of rnorm(1e+06)
rnorm(1e+06)
Fre
qu
en
cy
-4 -2 0 2 4
02
00
00
40
00
06
00
00
80
00
0
予備知識 : 標準偏差 σ とは○ 標準偏差 σ は、データの各値と平均値の差を 2 乗したものの平均値に平方根の操作を加えたものである。
• ( 平均値- 2σ) は、偏差値 30 に相当する。• ( 平均値- σ) は、偏差値 40 に相当する。• 平均値は、偏差値 50 に相当する。• ( 平均値+ σ) は、偏差値 60 に相当する。• ( 平均値+ 2σ) は、偏差値 70 に相当する。
Histogram of rnorm(1e+06, 50, 10)
rnorm(1e+06, 50, 10)
Fre
qu
en
cy
0 20 40 60 80 100
02
00
00
40
00
06
00
00
80
00
0
ガウス分布から乱数 X を取り出した場合、μ – σ < X < μ + σ となる確率は、 68.27%
μ + σ < X となる確率は 15.87%
μ + 2 σ < X となる確率は、 2.275%
μ + 3 σ < X となる確率は、 0.135%
μ + 4.5 σ < X となる確率は、 100 万分の 3.4
μ + 6 σ < X となる確率は、 10 億分の 0.99
― 上記の値は R 言語の pnorm 関数で求まる。
知らないことは数回反復して経験して分かる• 1 回だけの経験では分からないから。• せいぜい 3 回も経験したら分かってしまった気になることもあ
る。 ( 例 : 引越し、旅行、就職活動や結婚など )• いくつかの物品から欲しいものを探すときも、その行為に、数理的にどういう意
味があるのだろうか ?
• しかし、 N=1,2,3 程度は統計学的な意味を成しているのだろうか ?
• そして、 N=1 の人と、 N=30 の経験を知っている人とは、どれだけ有利 / 不利の差があると言えるだろうか ?
• etc.
― 以上が本発表の問題意識 ( 上記の問いに、全て答える訳では無いです。 )
背景
考察 1 :
• R 言語が生成する乱数は、メルセンヌツイスターを使っているので、 ( おそらく ) 精度が良い ( はず ) 。
• 今回は 100 億個超の乱数を発生させた。• R 言語による計算は、 30 分程度以下の作業の繰り返し。• 中央値を求める median 関数に時間がかかったようだ。
• 今回見つけた数は、たまたまキリが良かった。ひょっとしたら、何か法則性があるかもしれない。
• [要考察 ] コルモゴロフ = スミルノフの検定を用いると、大抵の分布は、数十個の点をサンプリングしても、ガウス分布となかなか区別がつかない。考えようによっては、何か考えたいことをガウス分布に近似させることは、十分に意味がある。
考察 2 : • 日常生活や社会生活の上で、反復経験のご利益
がなぜあるか、ひとつの視点を与える、と考えられる。 ( 例 : 4 回くらい経験のありそうな人の話は 1σ 話を差し引いて聞いた方が良い )
• 「便利」な訳 : 記憶しやすい。知ってしまうと、 1週間に 1 回程度は、日常生活などで出会う ( と思われる ) ため。
― 半分冗談で、半分本気です !! • 標準偏差 σ を推定する問題、そもそも何を尺度にする
かという問題については説明していないが、妥当で適切な理屈はおそらく存在する。そして、未解決予想を生み出す可能性を秘めている。
参考 1 : 本資料に用いた元の数表
• “最大値の中央値” を 0.5刻みで変化させたときの N がどうなるかを考えようとして、たまたま発見した。• ちょうど 0.5 の整数倍にはならないので、それに最も近い数を追求していたら、上記のような数表となった。• 意味が解釈可能であって、たまたま、 N が 2桁以下のときは全て、 N が記憶のしやすい数であった (4,10,30) 。• そのときの中央値も小数点以下第 3位で切り捨てると、 0.5 の整数倍から 0.002 少ない数であった (0.998, 1.498, 1.998) 。• N=111, 511 の場合は、小数点以下第 3位で切り捨てると、 0.5 の整数倍から 0.001 少ない数であった。
• 上記の表の誤差の可能性について• メモリの制約があったため、上記の数は、各 N について、 M 個の乱数を、約 1000 万個ずつに分けて、さらに N 個ずつに分けて最大値を求めて
中央値と平均値を求めて、さらにそれぞれ平均を求める、という複雑な操作を加えた。これに伴う誤差については、まだ正確に評価はしていない。
" "経験数N
算出に用いた 乱数の個数 M最大値の中央値
[ 2 (SD)]下 桁の標準誤差最大値の期待値
1 ― 0 0
4 41億 0.998 147 [27] 1.02 93
10 41億 1.498 802 [35] 1.53 67
30 51億 1.998 224 [46] 2.04 27
110 44億 2.495 892 [79] 2.54 15
111 44.4億 2.499 135 [84] 2.54 47
510 122.4億 2.998 102 [86] 3.04 27
511 174.5億 2.998 797 [63] 3.04 27
512 102.4億 2.999 237 [96] 3.04 27
513 513億 2.999 884 [43] 3.04 44
514 102.8億 3.000 461 [97] 3.04 50
515 103億 3.001 152 [99] 3.04 56
参考 2: 本資料に現れた N= 4, 10, 30, 111, 513 の数をそもそも、どうやって思いつくかについては、下記の R 言語による計算がひとつのヒントになる。
> log(2)/(1-pnorm( seq(1,4,0.5)) ) [1] 4.368889 10.375336 30.467831 111.623919 513.481140 2979.623972 21885.696311> -qnorm(log(2)/c(4,10,30,111,513))[1] 0.9412562 1.4809142 1.9934718 2.4980137 2.9997144