R创建具有非整数样本大小的多个样本

时间:2015-05-01 05:10:47

标签: r sample sampling random-sample multisampling

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

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

最后,载体中的每个样品具有其采样的唯一权重/概率。在只取一个样本时,我知道你可以创建一个向量来表示原始值中每个值的权重/概率,但是对于这个更复杂的场景,我甚至不知道从哪里开始。

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

1 个答案:

答案 0 :(得分: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