我正在进行失败分析,我喜欢尝试一些不同的场景和一些随机试验。到目前为止,我已经使用马赛克包完成了这项工作并且工作得很好。 在一个特定场景中,我想生成具有来自不同分布的(半)随机数的向量。到目前为止没问题。
现在我想在此向量中定义负数的数量。
例如,我希望在25个数字的向量中有0-5个负数。
我以为我可以使用类似rbinom(n=25,prob=5/25,size=1)
之类的东西来获得5个随机的,但当然是5/25,25次可以超过5个。这似乎是死路一条。
我可以通过一些for循环完成它,但可能更容易存在。
我已经尝试过各种样本,seq,shuffle组合,但到目前为止我无法使用它。
有没有人有任何想法或建议?
答案 0 :(得分:3)
如果你有一个向量x,其中所有元素都是> = 0,那么让我们说从泊松中得出:
x = rpois(25, lambda=3)
你可以通过
随机做出5个负数x * sample(rep(c(1, -1), c(length(x) - 5, 5)))
这是因为
rep(c(1, -1), c(length(x) - 5, 5))
将是
# [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1
和sample(rep(c(1, -1), c(length(x) - 5, 5)))
只需随机播放它们:
sample(rep(c(1, -1), c(length(x) - 5, 5)))
# [1] 1 1 -1 1 1 1 1 1 1 1 1 -1 1 1 1 -1 -1 1 1 1 -1 1 1 1 1
答案 1 :(得分:0)
我可以提出一个非常直接的解决方案,保证5个负值并适用于任何连续分配。这个想法只是对矢量进行排序,并将第6个最大值减去每个值:
x <- rnorm(25)
res <- sort(x, T)[6] - x
#### [1] 0.4956991 1.5799885 2.4207497 1.1639569 0.2161187 0.2443917 -0.4942884 -0.2627706 1.5188197
#### [10] 0.0000000 1.6081025 1.4922573 1.4828059 0.3320079 0.3552913 -0.6435770 -0.3106201 1.5074491
#### [19] 0.6042724 0.3707655 -0.2624150 1.1671077 2.4679686 1.0024573 0.2453597
sum(res<0)
#### [1] 5
它也适用于离散分布,但只有在没有联系的情况下......