繁体   English   中英

更改值顺序时样本的 Set.seed 问题

[英]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 我想指出:

  1. 设置种子意味着每次你使用一行代码,例如你的第一行mean(sample(c(12,7,5),7,prob = c(.3,.3,.4),replace = T))在地球上的每台机器上都有一个种子set.seed(59) ,output 应该 > [1] 9.571429
  2. 另一方面,如果您将相同的种子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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM