【问题标题】:R creating multiple samples with non integer sample sizeR创建具有非整数样本大小的多个样本
【发布时间】:2015-05-01 05:10:47
【问题描述】:

我正在使用 R 并且我有一个向量,让我们说 vec

这更加复杂,因为我有一系列不同的非整数值需要用作样本量,每个值也被采样 1000 次。这些当前存储在一个向量中,sample.size

最后,向量中的每个样本都具有唯一的抽样权重/概率。只取 1 个样本,我知道您可以创建一个向量来表示原始值中每个值的权重/概率,但是在这种更复杂的情况下,我什至不知道从哪里开始。

我不完全确定这整个过程是否可以完成,我也不知道从哪里开始,但我们将不胜感激。

【问题讨论】:

  • 有很多很多分布的平均值为 3.666。您需要决定如何为每个样本选择数量。这是一个建模决策;不是编程决定。
  • @MrFlick,我认为问题不在于平均值为 3.666 的分布。更多的是关于样本的长度。如果我们希望样本量的平均值为 3.666,并且我们只考虑样本量 3 和 4,我们可以使用 3 次重复,其中一次的样本量为 3,两次的样本量为 4。至少我是这么读这个问题的......
  • @AnandaMahto 好点

标签: r sample sampling random-sample multisampling


【解决方案1】:

处理“非整数样本大小”的一种方法是创建一个序列,在该序列中,您每次循环都会按样本大小递增值。例如,样本大小为 2.5,您将:

round(seq(0, by=2.5, length.out=10))
# [1]  0  2  5  8 10 12 15 18 20 22

现在您可以看到,这个序列中的间隙是 2,然后是 3,然后是 3,然后是 2,然后是 2,然后...,平均为 2.5。您可以使用 diff 函数来弥补这些差距。

现在从一组s 和权重w 和样本大小ss 生成加权样本非常简单:

get.samples <- function(ss, s, w) {
  sizes <- diff(round(seq(0, by=ss, length.out=1001)))
  lapply(sizes, function(x) sample(s, x, prob=w))
}

这会返回一个存储样本的列表:

set.seed(144)
head(get.samples(3.666, 1:10, 1:10))
# [[1]]
# [1] 10  5  6  7
# 
# [[2]]
# [1]  9  6 10
# 
# [[3]]
# [1]  5 10  4  7
# 
# [[4]]
# [1] 10  6  9  8
# 
# [[5]]
# [1] 10  6  7
# 
# [[6]]
# [1]  4  8  9 10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多