【问题标题】:R: sort using probabilities calculated from vector valuesR:使用从向量值计算的概率进行排序
【发布时间】:2017-09-11 13:11:27
【问题描述】:

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

【问题讨论】:

  • prop.table(1:3)
  • 希望模拟示例有所帮助,我关注的是样本,而不是概率。

标签: r


【解决方案1】:
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 

【讨论】:

    【解决方案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))))
    

    【讨论】:

      猜你喜欢
      • 2017-09-07
      • 1970-01-01
      • 2021-06-30
      • 2022-01-13
      • 2017-05-18
      • 2019-06-26
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多