在我完成的几乎所有分析工作中,我都使用:
set.seed(42)
这是对《旅行者指南》的致敬。但是我想知道是否通过一遍又一遍地使用相同的种子来产生偏见。
在我完成的几乎所有分析工作中,我都使用:
set.seed(42)
这是对《旅行者指南》的致敬。但是我想知道是否通过一遍又一遍地使用相同的种子来产生偏见。
Answers:
如果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")
其含义可能令人着迷且重要。 例如,如果我事先知道我将招募谁参加随机双盲对照试验,并且以什么顺序(作为大学教授测试一群圈养的大学生或实验鼠,我可能可以控制),那么事先,我可以运行这样的一组模拟来找到一个种子,该种子将学生按我的喜好分组,以偏爱我希望“证明”的内容。我可以在之前的实验计划中包含计划的订单和种子进行实验,从而创建了一个程序,没有任何严格的审阅者可以弹imp,尽管如此,我还是很赞成。(我相信伪科学的整个分支都使用此技巧的某些变体来获得信誉。您相信我实际上是使用ESP来控制计算机吗?我也可以与您距离很远!)
知道默认种子的人无法玩此游戏。
我的个人种子是17,占我职位证明的很大一部分(当前161个设置种子的职位中有155个使用此种子)。在R
这是一个困难的种子用,因为(原来)最小型数据集我用它创造有很强的异常工作。这不是一个坏特性...。
R
的行为纯属偶然。