主要な統計解析ソフトの擬似乱数生成アルゴリズム

概要
SAS, SPSS, STATA, R といった現在の主要な統計解析ソフトでは、擬似乱数を生成するときに、メルセンヌ・ツイスターをアルゴリズムとして採用している。

はじめに

統計解析の際には、乱数 (random number) が必要になることが多い。例えば、無作為抽出をしたり、モンテカルロ法を実行したりするときには、乱数が必要になる。しかし、計算機を使って分析する際に真の乱数を作り出すことは容易でないことから、何らかのアルゴリズムによって擬似乱数 (pseudo-random number) を作り出すことが必要になる。

2017年2月現在、主要な統計解析ソフトでは、Matsumoto and Nishimura (1998) が提唱したメルセンヌ・ツイスター (Mersenne twister) というアルゴリズムで擬似乱数を生成できるようになっている。このアルゴリズムは、すこぶる優秀なので、特に理由がなければこれを使うのが良いだろう。

SAS

Wicklin (2013) によれば、SAS には、擬似乱数生成のための関数として、(1) RANUNI, RANNOR などの RANXXX という名前の関数群と、(2) RAND 関数がある。前者が古くからあるもので、後者はメルセンヌ・ツイスターに基づく新しいものである。昔の SAS で作ったものを再現したいといった互換上の理由などがなければ、後者を使うべきであろう。

なお、SAS Institute (2016, p.908) によれば、RANUNI は、Fishman and Moore (1981) に基づく乗法合同法で擬似乱数を生成している。

SPSS

IBM (2016, p.1041) によれば、SPSS には、2通りの擬似乱数生成アルゴリズムが用意されている。すなわち、(1) Fishman and Moore (1981) に基づく乗法合同法と、(2) に基づくメルセンヌ・ツイスターである。

SPSS 12 までは前者しか使えなかった。後者が導入されたのは、SPSS 13 以降である。なお、前者は SPSS 13 以降も、互換性のために残されている。メルセンヌ・ツイスターの方が優秀なので、SPSS 12 以前に作ったものを使いたいといった理由がなければ、メルセンヌ・ツイスターを使うのが良いだろう。

Stata

StataCorp (2015, pp. 73–76) によれば、Stata には、2通りの擬似乱数生成アルゴリズムが用意されている。すなわち、(1) フロリダ州立大学の George Marsaglia が1994年に用意した KISS32 というアルゴリズムと、(2) メルセンヌ・ツイスターである。

メルセンヌ・ツイスターは、STATA 14 で初めて導入された (Gopal, 2016)。KISS32 はそれ以前から搭載されているもので、STATA 14 でも互換性のために残されている。メルセンヌ・ツイスターの方が優秀なので、STATA 13 以前に作ったものを使いたいといった理由がなければ、メルセンヌ・ツイスターを使うのが良いだろう。

R

R Core Team (2016) によれば、R はメルセンヌ・ツイスターをデフォルトの擬似乱数生成アルゴリズムとしている。ただし、他の擬似乱数生成アルゴリズムも搭載されているので、その中から選んで使うこともできる。

補:Excel

Excel の擬似乱数生成は昔はあまりよろしくなかったらしい。McCullough (2008) によれば、Microsoft は Excel 2003 と Excel 2007 において Wichmann and Hill (1982) のアルゴリズムによる擬似乱数生成を実装しようとして、うまく実装できなかったそうだ。

Mélard (2014) によれば、その後の Excel 2010 では、RAND() 関数による擬似乱数生成が改善したそうである。ただし、Excel VBA の中で使われている擬似乱数生成アルゴリズムは改善されていないそうである。

ちなみに、NtRand というメルセンヌ・ツイスターによる乱数生成を可能とする Excel アドインがあるそうである。

参考文献