web-dev-qa-db-ja.com

同じシード、異なるOS、異なるRの乱数

シードを修正すると効果が異なることに気づくまで、2台のマシンとLinuxサーバー間で一貫性のない結果が発生していました。私はそれらすべてでRバージョンを実行していますが、すべて3.3.0の上にあります。次に例を示します。

Linux 1

> set.seed(10); rnorm(1)
[1] -0.4463588
> version
               _
platform       x86_64-pc-linux-gnu
Arch           x86_64
os             linux-gnu
system         x86_64, linux-gnu
status
major          3
minor          3.0
year           2016
month          05
day            03
svn rev        70573
language       R
version.string R version 3.3.0 (2016-05-03)
nickname       Supposedly Educational

Linux 2

> set.seed(10); rnorm(1)
[1] 0.01874617
> version
               _
platform       x86_64-pc-linux-gnu
Arch           x86_64
os             linux-gnu
system         x86_64, linux-gnu
status
major          3
minor          4.2
year           2017
month          09
day            28
svn rev        73368
language       R
version.string R version 3.4.2 (2017-09-28)
nickname       Short Summer

Mac OS

> set.seed(10); rnorm(1)
[1] 0.01874617
> version
               _                           
platform       x86_64-Apple-darwin15.6.0   
Arch           x86_64                      
os             darwin15.6.0                
system         x86_64, darwin15.6.0        
status                                     
major          3                           
minor          4.3                         
year           2017                        
month          11                          
day            30                          
svn rev        73796                       
language       R                           
version.string R version 3.4.3 (2017-11-30)
nickname       Kite-Eating Tree        

Windows

> set.seed(10); rnorm(1)
[1] 0.01874617
> version
               _                           
platform       x86_64-w64-mingw32          
Arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          4.1                         
year           2017                        
month          06                          
day            30                          
svn rev        72865                       
language       R                           
version.string R version 3.4.1 (2017-06-30)
nickname       Single Candle               

Linuxは同じシードから別の乱数を生成するため、スクリプトを実行した結果は完全に再現可能ではありません(再実行されるOSによっては、結果が一致するかどうか)。これは迷惑です。

ここで何が起こっているのかわかりません。特に:

  • (1)Rのバージョンの問題か、それとももっと複雑な問題ですか?
  • (2)この一貫性のない動作をどのようにして回避できますか?どんな助けでもありがたいです。

[〜#〜] edit [〜#〜] @Jesse Tweedleの回答に由来(新しいセッションでLinux 1に出力):

> set.seed(10); rnorm(1)
[1] -0.4463588
> set.seed(10); rnorm(1)
[1] -0.4463588
> set.seed(102); rnorm(1)
[1] 0.05752965
> set.seed(10, kind = "Mersenne-Twister"); rnorm(1)
[1] 0.01874617
> set.seed(10); rnorm(1)
[1] 0.01874617
> set.seed(102); rnorm(1)
[1] 0.1805229
16
epsilone

ドキュメントから:

ランダムドキュメント

RNGversion can be used to set the random generators as they were in an earlier R version (for reproducibility).

すべてのシステムでこれを試してください:

set.seed(10, kind = "Mersenne-Twister", normal.kind = "Inversion"); rnorm(1)
[1] 0.01874617
11
Jesse Tweedle