微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决更改值顺序时样本的 Set.seed 问题

set.seed(59)
mean(sample(c(12,7,5),prob = c(.3,.3,.4),replace = T))
[1] 9.571429}

set.seed(59)
mean(sample(c(5,12),prob = c(.4,.3),replace = T))
[1] 8.142857

两个代码不应该返回相同的样本均值,为什么不同?

解决方法

好吧,首先考虑您省略 prob=

的更简单的情况
set.seed(59) 
sample(c(12,7,5),replace = T)
# [1]  5 12 12  5  5 12  5
set.seed(59) 
sample(c(5,12),replace = T)
# [1] 12  5  5 12 12  5 12

因为你有不同的输入,你会得到不同的结果。但也要注意 sample 函数实际上是从向量索引中采样,而不是向量的实际值。看看在第二个结果中,您基本上只是交换了 5s 和 12s。唯一重要的是输入向量的长度。如果您尝试使用

set.seed(59) 
sample(1:3,replace = T)
# [1] 3 1 1 3 3 1 3

看看你如何仍然得到相同的“accaaca”模式(中间值永远不会被选中)。这就是设置种子将为您做的事情。你真的只会得到所有其他参数完全相同的结果。

如果您更改向量中值的顺序,并交换概率,您将不会像 R 使用的那样从伪随机数生成器中获得相同的观察结果。看到它们是相同的统计分布根本不够“聪明”。但是,如果你一遍又一遍地抽取一堆样本,从长远来看,由于大数定律,它们的平均值会相似。

,

除了 MrFlick 我想指出:

  1. 设置种子意味着每次您使用一行代码时,例如您的第一行 mean(sample(c(12,prob = c(.3,.3,.4),replace = T)) 与地球上每台机器上的种子 set.seed(59) 超出的输出应该是 > {{1} }
  2. 另一方面,如果您对不同的数据集使用相同的种子 [1] 9.571429,就像您的情况一样,set.seed(59) 会给您另一个输出。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。