hopping around

~ヘタレ研究者は今日も逝く~

random number generator

昨晩は,Ann Arbor時代の友人(台湾人(でもnationalityはCanada)x1人,日本人x3人)と飲み会。お刺身の説明をするのに,鯖は英語でなんて言うかは知ってたけど,鰤とカンパチが分からなくて困った。ついでに,ある日本人の女の子が「Ann Arborにいるときより日本でいる方がかわいいじゃん」と評されていて,

When Japanese girls go to the US, especially to university campuses, they look too racy. So they usually change their clothes and makeups. But when they come back to Japan, they return to their original style.

と説明したら,「いらんこと言うな!」としばかれそうになったのはさておき。

コンピュータで使っている乱数は,本物の乱数ではなくて,疑似乱数だということはよく知られている。

で,疑似乱数の発生の仕方――random number generator――にいろいろあって,昔のソフト(今でもExcelなんかはそうらしい)2^31-1というのを使った乗算型合同法だったそうだけど,これでは,MCMCとかでぐりぐりシミュレーションする場合には,乱数の周期がつきてしまいかねない。

ってことで,最近は,Matsumoto and Nishimura (1998)っていうので提唱された(日本人!)Mersenne Twisterというので,2^19937-1でやるのが増えて来ているらしい。

気になってRはどうなってるの?と調べてみたら,RはデフォルトでこのMersenne Twisterを使ってた。よしゃ。Stata 10/SEは明確に書いてないけれど,runiformのhelpを見ると,rangeが"0 to nearly 1 (0 to 1 - 2^(-32))"となっているので,旧式のrandom number generatorを使ってるのかもしれない。