Random-Generation

我是否一遍又一遍地使用相同的隨機種子來製造偏見?

  • December 23, 2013

在我做過的幾乎所有分析工作中,我都使用:

set.seed(42) 

*這是對《銀河系漫遊指南》*的致敬。但我想知道我是否通過一遍又一遍地使用相同的種子來製造偏見。

如果 RNG 好的話,就沒有偏見。 但是,通過始終使用相同的種子,您在職業生涯中執行的所有模擬之間建立了強烈的相互依賴關係。這會產生一種不尋常的風險。

  • 通過每次使用相同的種子,要么你總是得到一個非常好的偽隨機序列並且你的所有工作都進行得很好,要么——以非常低但非零的概率——你總是使用一個非常糟糕的序列並且你的模擬不是作為您認為的潛在分佈的代表。要么你所有的工作都很好,要么所有的工作都很糟糕!
  • 將此與每次使用真正隨機的起始種子進行對比。 在很長一段時間內,您可能會獲得一系列不代表您正在建模的分佈的隨機值,但大多數時候您會很好。如果您從未嘗試複製自己的作品(使用新種子),那麼在您的職業生涯中有一兩次可能會得到誤導性的結果,但絕大多數情況下您會沒事的。

有一個簡單而明顯的解決方法:總是,總是通過重新開始另一個種子來檢查你的工作。 兩顆種子意外地以同樣的方式給出誤導性結果幾乎是不可能的。

另一方面,**擁有一個眾所周知的“個人種子”也有非凡的價值:**它向世界表明你是誠實的。一種狡猾而巧妙的模擬謊言的方法是重複它們,直到它們給你一個預定的結果。這是一個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")

通過查看更廣泛的種子(從通過),我找到了一個合適的:218134。當你以這個作為種子開始時,結果模擬硬幣翻轉展覽頭!這與預期值有很大不同()。

其影響可能是迷人而重要的。 例如,如果我事先知道我將招募誰參加一項隨機雙盲對照試驗,以及以什麼順序(作為一名大學教授,我可能能夠控制這些試驗一群被俘虜的本科生或實驗室老鼠),然後事先我可以運行這樣一組模擬來找到一個種子,使學生更符合我的喜好,以支持我希望“證明”的任何東西。我之前可以在我的實驗計劃中包含計劃的訂單和那個種子進行實驗,從而創建了一個任何批判性評論者都無法彈劾的程序——但儘管如此,我還是把甲板堆放在了對我有利的位置上。(我相信整個偽科學分支都使用這種技巧的一些變體來獲得可信度。你相信我真的使用 ESP 來控制計算機嗎?我也可以和你的相距甚遠!)

知道默認種子的人不能玩這個遊戲。

我的個人種子是 17,我的大部分帖子都證明了這一點(目前 161 個設置種子的帖子中有 155 個使用這個)。這R是一個難以處理的種子,因為(事實證明)我用它創建的大多數小數據集都有一個很強的異常值。這不是一個壞特性……

引用自:https://stats.stackexchange.com/questions/80407

comments powered by Disqus

相關問答