给定一个向量,比如说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
答案 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))))