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

Vla*_*lad 1 r

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

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

在选择第一个元素之后,该过程对于向量的其余元素类似地继续,直到产生"统计上"有序的向量.

随着"统计"有序样本数量的增长,我预计3会有50%的时间,等等.模拟样本大小为6的示例:

c(3, 2, 1)
c(2, 3, 1)
c(3, 1, 2)
c(3, 2, 1)
c(1, 3, 2)
c(2, 1, 3)
Run Code Online (Sandbox Code Playgroud)

Rol*_*and 5

sample(1:3, prob = 1:3, replace = FALSE)
Run Code Online (Sandbox Code Playgroud)

测试它:

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 
Run Code Online (Sandbox Code Playgroud)