裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Zipf の法則

2019年07月03日 | ブログラミング

「素数の先頭桁の数字の分布」で,「拡張されたベンフォードの法則」というのが出てきた。「拡張されたジップの法則(Zipf's law)」というのは知っているが「拡張されたベンフォードの法則」というのは,この論文ではじめて知った。

「ベンフォードの法則」は「ジップの法則の」特殊例。ジップの法則は出現頻度の大きさに応じて順位を r とすると,r 番目の頻度(度数)n は,a * r ^ b にしたがうというもの。b = -1 の場合が「ジップの法則」,b ≠ -1 の場合が「拡張されたジップの法則」。b = -1 のとき,一番大きいものが 100 なら,2 番目に大きいものは 100 * 2 ^(-1) = 50,3 番目に大きいものは 100 * 3 ^(-1) =33,4 番目に大きいものは 100 * 4 ^(-1) = 25 などとなる。

n = a * r ^ b の両辺の対数をとると,log(n) = log(a) + b * log(r) となるので,n, r の対数をとって直線回帰を行うと,「回帰直線の傾き」が b である。a は一番多いものの度数(頻度)の推定値になる。

ベンフォードの法則によくあてはまっていた,フィボナッチ数列については以下の図のようになるので,「拡張されたジップの法則」にしたがっていることが分かる。

階乗についてはベンフォードの法則から若干外れていた。下図のようになるので,やはり少しずれはあるが「拡張されたジップの法則」にしたがっていることが分かる。

[1, 10^10] の範囲内の素数の先頭桁の数字の分布は「拡張されたベンフォードの法則」にしたがうとされていた。

図に示すと以下のようになり,やはり「拡張されたジップの法則」にしたがっていることが分るが,b の値は大きく違う事に注意。b が 0 のときにはこの直線は x 軸に平行になるわけで,度数は全て等しくなる(一様分布になる)。b が -0..03942 ということは,かなり一様分布に近づいていることが分かる。

ちなみに [1, 10^7] の範囲内の素数については b = -0.05835 である。

なお,[1, 10^6] の範囲だと,「拡張されたジップの法則(拡張されたベンフォードの法則)」からのズレが相当大きい。

それより狭い範囲では推して知るべし。

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

素数の先頭桁の数字の分布

2019年07月01日 | ブログラミング

素数の先頭桁の数字の分布

Bartolo Luque and Lucas Lacasa: The first-digit frequencies of prime numbers and Riemann zeta zeros,  Proc.R. Soc. A (2009) 465, 2197-2216.
について,誤解がずいぶんある。下の方に例。

論文を読めばわかることだけど,論文に書かれているのは「ベンフォードの法則」ではなく,「拡張されたベンフォードの法則」である。前者は '1' の出現比率はほぼ 30% というものだが,後者は,'1' の出現比率が一番高く,順次減少し,'9' の出現比率が最も低い。素数を探索する範囲を広くすればその違いは小さくなり,どの数字の出現比率も 1/9 に近づいていくというもの。

数式で書くと,前者は 数字 d の出現比率は P(d) =log10(1+1/d)。
後者は,P(d) = ((d+1)^(1-α) - d^(1-α)) / (10^(1-α)-1)。αは素数の探索範囲を [1,N] とすれば α(N) = 1/(log(N)-a)。α = 1 なら「ベンフォードの法則」,α = 0 なら一様分布(どの数字も等確率)。

N が大きくなるにつれ,それぞれの数字の出現比率は 1/9 に近づいていく。

[1, 10^8]     にある素数は 5761455 個
    素数の個数       比率      理論値
1     686048    0.11908    0.11891
2     664277    0.11530    0.11533
3     651085    0.11301    0.11307
4     641594    0.11136    0.11141
5     633932    0.11003    0.11011
6     628206    0.10904    0.10904
7     622882    0.10811    0.10813
8     618610    0.10737    0.10735
9     614821    0.10671    0.10665


[1, 10^9] にある素数は 50847534 個
    素数の個数       比率      理論値  
1    6003530    0.11807    0.11795
2    5837665    0.11481    0.11482
3    5735086    0.11279    0.11284
4    5661135    0.11134    0.11138
5    5602768    0.11019    0.11024
6    5556434    0.10928    0.10929
7    5516130    0.10848    0.10849
8    5481646    0.10781    0.10780
9    5453140    0.10724    0.10718


[1, 10^10] にある素数は 455052511 個
    素数の個数       比率      理論値
1   53378283    0.11730    0.11720
2   52064915    0.11442    0.11442
3   51247361    0.11262    0.11265
4   50653546    0.11131    0.11136
5   50193913    0.11030    0.11034
6   49815418    0.10947    0.10949
7   49495432    0.10877    0.10878
8   49221187    0.10817    0.10815
9   48982456    0.10764    0.10760


以下のプログラムで計算したが,N = 10^10 までで数時間かかった。

> library(gmp)
> a = 1
> mx = 11
> tbl = matrix(0, mx, 9)
> freq = integer(9)
> for (i in 1:mx) {
+   N = 10^i
+   while(TRUE) {
+     a = nextprime(a)
+     b = as.integer(strsplit(as.character(a), "")[[1]][1])
+     if (a > N) {
+       a = a-1
+       tbl[i,] = freq
+       print(freq)
+       break
+     }
+     freq[b] = freq[b]+1
+   }
+ }


====== 誤解例,理解が不十分な例 ======

https://math-jp.net/2017/05/05/prime-benford/

> nを∞にしたときの極限をもとめたら、1から始まる素数の出現率になるはずですが、ものすごく収束がわるいようで30%になりそうではありませんでした
:
> 自分なりの結論ですが、素数はやはりベンフォードの法則のような偏りがあるのではなく一様に分布(大きくなっていくにつれ密度は薄くなっていきますが)していると考えられます。

1 で始まるものが 30% 近くになるなんて,原論文では言っていない。
極限では先頭桁の数字の出現比率はどの数字も 1/9 に近づいていくというのは正しい。

https://medium.com/@catindog/%E3%83%99%E3%83%B3%E3%83%95%E3%82%A9%E3%83%BC%E3%83%89%E3%81%AE%E6%B3%95%E5%89%87-b1382b65165e

> 自然界の数字(新聞記事に登場する数字とか)を集めていくと、先頭の文字が1が多く9に行くに従って単調減少していくというものであるそうです
:
> 10^7 までの数字の中の素数に関して、先頭の文字のヒストグラムを作成します。一番きれいに成り立っていますね。

筆者は '1' が 30% とは一言も書いていない。'1' 〜 '9' まで,単調減少している,と書いているわけだが,これが「拡張されたベンフォードの法則」であるとは書いていない。

https://mzp.hatenadiary.org/entry/20090515/benford

> スペインの数学者がBartolo LuqueとLucas Lacasaは素数にもこの法則が当てはまることをこの度解明したそうだ(論文要旨)
:
> とりあえず5000までの素数で確認したけど、特にベンフォードの法則には従っていなかった。まあ、そんなに簡単に分かることだったら論文にもならないだろうし、当然な気もする。

孫引きで,当然ながら原論文を読んでいないので,ベンフォードの法則と拡張されたベンフォードの法則の違いに気づいてもいない。

https://science.srad.jp/story/09/05/13/0641229/

> 12桁の数の場合でもやっぱり、1xxxが2xxxの2倍近いくらいになるような、明確な違いは出ないですねえ。というより、比は均等に近くなっているような?
> もっと巨大な数の領域になると法則に従うのでしょうか。(なんだか、もっと均等になりそうなヨカン)
> それとも、私がなにか勘違いしているのでしょうか。数論詳しい方ツッコミお願いします。

ベンフォードの法則と拡張されたベンフォードの法則の違いに気づいていない。

> 論文では、素数の先頭桁の分布がある意味で generalized Benford's law という法則に従っていることを示しているようです。 generalized Benford's law は Benford's law の一般化であり、 Benford's law そのものではありません。 generalized Benford's law とは何かとか、「ある意味で」とはどういう意味かとかは、僕には説明できません。知りたければ論文を読んでください。

「ボクには説明できません」なら,しかたないね。

> 直感的には桁の限界までの範囲で全部数えれば、どれも1/9、つまり11%になりそうな気がした。素数は違うか。

原論文を読んでいないので,ベンフォードの法則と拡張されたベンフォードの法則の違いに気づいていない。


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村