0

我正在使用 R 并且我有一个向量,让我们说 vec <- c(1:10)。我需要从这个向量中采样大约 1000 次,但是我需要使用的样本大小是一个非整数,例如 3.66666。显然,当我输入这个时,它会向下舍入到 3。我想做的是在非整数数之外的两个整数的大小(例如 3 和 4)处进行多个样本。希望输出会给出一系列样本,大小在 3 和 4 之间变化,但 1000 个样本的平均样本大小为 3.666666。如果这些可以存储在一个理想的矩阵中。

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

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

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

4

1 回答 1

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功能解决这些差距。

现在,从一组sw具有样本大小的权重生成加权样本非常简单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
于 2015-05-01T05:36:50.163 回答