R言語

【R言語】シード値が同じなのに乱数が異なるときの対処法

  1. HOME >
  2. R言語 >

【R言語】シード値が同じなのに乱数が異なるときの対処法

スポンサーリンク

R言語でシード値が同じでも乱数が異なるときの対処法を紹介します。

R言語で乱数を固定したいときに以下のように乱数が同じにならないことがよくあると思います。

こんな方におすすめ

  • ダブルチェックの際に乱数が異なり同じ結果が出ない。
  • RのバージョンやOSも全て同じなのに他の人と違う乱数が発生する。

この記事では、乱数が異なるときのよくある原因とその対処法について見ていきます。

乱数を使った具体例付きで分かりやすく解説していきます。

この記事で扱うRスクリプトは以下からダウンロードできます。

Rのバージョンが異なるのが原因

シード値が同じでも乱数が異なる原因としてRのバージョンがあります。

Rのバージョンが3.6を境にsample.kindが次のように変更されています。

  • R ≧ 3.6 smaple.kind: "Rejection"
  • R < 3.6 sample.kind: "Rounding"

バージョンが3.6以上のときと3.6未満のときに、シード値を0に固定し関数sampleで乱数を発生させた結果は次の通りです。

R version ≧ 3.6

R version < 3.6

3.6以上のバージョンで3.6未満のときと同じ乱数を得たいときは、次のように関数RNGkindsample.kind="Rejection"とします。

設定を変えたことで3.6未満のときと同じ乱数が発生しているのが分かります。

桁数の設定が原因

次に桁数が原因のときの対処法を解説します。シード値に小数を用いた時に起こる現象について見ていきます。

ここから先は小数を用いたときの実行例を紹介しますが、関数set.seedのRDocumentationに書いてあるように、set.seedのシード値の引数seedには整数を渡すように書いてあるので、小数ではなく整数を用いたほうがよいです。

これは桁数の多い、特に小数点以下の桁数が多いシード値を扱っているときによく起こります。

Rではoptionsで桁数digitsがありますがデフォルトだとこの値が7であるため、7桁以上のシード値を扱う場合、結果が異なってしまいます。

例えば、他の人のRの桁数の設定がdigitsが8以上で自分のdigitsが7のときに、シード値1234.5678の乱数を発生させると、たとえシード値が同じでも自分と他の人で結果が異なってしまいます。

例を次に示します。

シード値1234.56789を、optionsdigitsを9に設定したときとそうでないときの結果は次の通りです。

digitsの設定で結果が異なるのが確認できます。

まとめ

乱数が異なる原因として主にRのバージョンの違いとRのオプションの桁数の設定の違いがあります。

他の人とと解析をしていてシード値が同じでも乱数が異なるときは、Rのバージョンとoptionsのdigitsの値が一致しているか確かめてみましょう!

スポンサーリンク

  • この記事を書いた人
  • 最新記事

usagi-san

統計学とゲームとかをメインに解説していくよ。 数式とかプログラミングコードにミスがあったり質問があったりする場合はコメントで受け付けます。すぐに対応します。

-R言語
-,