[英]Set.seed issue with sample when changing order of values
set.seed(59)
mean(sample(c(12,7,5),7,prob = c(.3,.3,.4),replace = T))
[1] 9.571429}
set.seed(59)
mean(sample(c(5,7,12),7,prob = c(.4,.3,.3),replace = T))
[1] 8.142857
两个代码不应该返回相同的样本均值,为什么不同?
好吧,首先考虑一个更简单的情况,即你放弃prob=
set.seed(59)
sample(c(12,7,5),7,replace = T)
# [1] 5 12 12 5 5 12 5
set.seed(59)
sample(c(5,7,12),7,replace = T)
# [1] 12 5 5 12 12 5 12
因为你有不同的输入,你会得到不同的结果。 但还要注意, sample
function 实际上是从向量索引中采样的,而不是向量的实际值。 看看在第二个结果中,你基本上只是交换了 5s 和 12s。 唯一重要的是输入向量的长度。 如果您尝试使用
set.seed(59)
sample(1:3,7,replace = T)
# [1] 3 1 1 3 3 1 3
看看你如何仍然得到相同的“accaaca”模式(中间值从未被选中)。 这就是播种将为您做的事情。 你真的只得到完全相同的结果,所有其他参数都是相同的。
如果您更改向量中值的顺序并交换概率,您将不会从 R 使用的伪随机数生成器中获得相同的观察结果。 仅仅看到这些是相同的统计分布还不够“聪明”。 但是,如果您一遍又一遍地抽取一堆样本,从长远来看,由于大数定律,它们将具有相似的方法。
除了 MrFlick 我想指出:
mean(sample(c(12,7,5),7,prob = c(.3,.3,.4),replace = T))
在地球上的每台机器上都有一个种子set.seed(59)
,output 应该 > [1] 9.571429
set.seed(59)
用于不同的数据集,则在您的情况下mean(sample(c(5,7,12),7,prob = c(.4,.3,.3),replace = T))
会给你另一个 output。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.