如何解决更改值顺序时样本的 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 我想指出:
- 设置种子意味着每次您使用一行代码时,例如您的第一行
mean(sample(c(12,prob = c(.3,.3,.4),replace = T))
与地球上每台机器上的种子set.seed(59)
超出的输出应该是 > {{1} } - 另一方面,如果您对不同的数据集使用相同的种子
[1] 9.571429
,就像您的情况一样,set.seed(59)
会给您另一个输出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。