私がこれまでに行ったほとんどすべての分析作業で、私は以下を使用します。
set.seed(42)
Hitchhiker's Guide to the Galaxyへのオマージュです。しかし、同じシードを繰り返し使用することでバイアスを作り出しているかどうか疑問に思っています。
私がこれまでに行ったほとんどすべての分析作業で、私は以下を使用します。
set.seed(42)
Hitchhiker's Guide to the Galaxyへのオマージュです。しかし、同じシードを繰り返し使用することでバイアスを作り出しているかどうか疑問に思っています。
回答:
RNGが適切であれば、バイアスはありません。 ただし、常に同じシードを使用することで、キャリアで実行するすべてのシミュレーション間で強力な相互依存関係を作成できます。これにより、異常な種類のリスクが発生します。
毎回同じシードを使用することにより、常に非常に良い疑似ランダムシーケンスを取得してすべての作業がうまくいくか、または非常に低いがゼロではない確率で、常にかなり悪いシーケンスを使用し、シミュレーションはそうではありません基礎となるディストリビューションの代表として、それらがそうであると思われる場合。すべての作業が非常に良いか、すべてが非常にひどいです!
これとは対照的に、毎回真にランダムな開始シードを使用します。 非常に長い間、モデリングしている分布を表していないランダムな値のシーケンスを取得する場合がありますが、ほとんどの場合は問題ありません。自分の作品を(新しいシードを使って)再現しようとしたことがない場合、キャリアの中で1〜2回は誤解を招く結果になる可能性がありますが、ほとんどの場合は大丈夫です。
簡単で明白な解決策があります。常に、常に別のシードで再起動して作業を確認してください。 2つのシードが同じ方法で誤って誤解を招く結果をもたらすことは事実上不可能です。
一方、有名な「個人の種」を持つことには並外れたメリットがあります。それは、あなたが正直である世界を示しています。シミュレーションにうそをつく、巧妙な微妙な方法は、事前に決められた結果が得られるまで繰り返すことです。R
公正なコインでさえ、半分以上の時間で頭に着地する可能性が高いことを「実証」するための実用的な例を次に示します。
n.flips <- 100
seeds <- 1:10^3
#
# Run some preliminary simulations.
#
results <- sapply(seeds, function(seed) {
set.seed(seed)
mean(runif(n.flips) > 1/2)
})
#
# Now do the "real" simulation.
#
seed <- seeds[which.max(results)]
set.seed(seed)
x <- mean(runif(n.flips) > 1/2)
z <- (x - 1/2) * 2 * sqrt(n)
cat("Mean:", x, "Z:", z, "p-value:", pnorm(z, lower.tail=FALSE), "\n")
その意味は魅力的で重要です。 たとえば、無作為化二重盲検比較試験に誰を募集するのか、そしてどの順序で(私が大学の教授として捕虜の学部生または実験用のネズミのグループをテストできるのか)事前に知っていた場合、事前に、このような一連のシミュレーションを実行して、「証明する」ことを望んでいたものを好むように、生徒をより自分の好みに合わせたグループを見つけることができました。以前に計画した順序とそのシードを実験計画に含めることができました実験を実施し、それによって批判的な評論家が弾eachすることはできなかった手順を作成しましたが、それでも私の好意でデッキを積み重ねました。(このトリックの変種を使用して信頼性を得る疑似科学のブランチはすべてあると思います。実際にコンピューターを制御するためにESPを使用したと思いますか?あなたと距離を置いて行うこともできます!)
デフォルトのシードがわかっている人は、このゲームをプレイできません。
私の投稿の大部分が証明しているように、私の個人的なシードは17です(現在、シードを設定する161の投稿のうち155がこれを使用しています)。でR
、私はそれで作成する(結局のところ)最も小さなデータセットが強い外れ値を持っているので、との仕事に難しい種です。それは悪い特性ではありません...。
R
の動作は純粋に偶然です。