R:使用从矢量值计算的概率进行排序

时间:2017-09-11 13:11:28

标签: r

给定一个向量,比如说c(1, 2, 3),我想生成根据从其值计算的概率排序的该向量的样本。这个过程如下所示 - 是否有一个R函数可以做到这一点?

一个简单的例子,使用计算为值的概率除以向量和:c(1/6, 2/6, 3/6)来确定排序向量中的第一个值。在这种情况下,值3的概率为3/6或50%为第一个元素,值2具有概率2/6或33.3%为第一个元素且{{1有概率1或16.6%。

在选择第一个元素之后,对于向量的其余元素,该过程类似地继续进行,直到统计为'生成有序向量。

作为统计数字'有序样本增长,我期望1/6在50%的时间内占据首位,等等。示例大小为6的模拟示例:

3

2 个答案:

答案 0 :(得分:5)

sample(1:3, prob = 1:3, replace = FALSE)

测试它:

set.seed(42)
res <- replicate(1e5, sample(1:3, prob = 1:3, replace = FALSE))

prop.table(table(res[1,]))
#      1       2       3 
#0.16620 0.33324 0.50056
prop.table(table(res[2,]))
#      1       2       3 
#0.25026 0.39827 0.35147
prop.table(table(res[3,]))
#      1       2       3 
#0.58354 0.26849 0.14797 

答案 1 :(得分:2)

尝试

N <- 100
X <- 3
replicate(N, sample(X, prob=prop.table(1:X)))

输出

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,]    3    3    3    3    3    1    3    3    3     3     2     3     2     2
[2,]    2    1    2    2    1    3    1    1    1     1     3     2     1     3
[3,]    1    2    1    1    2    2    2    2    2     2     1     1     3     1
# etc

如果您愿意,可以transpose输出

t(replicate(N, sample(X, prob=prop.table(1:X))))