我正在使用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 ......)
最后,载体中的每个样品具有其采样的唯一权重/概率。在只取一个样本时,我知道你可以创建一个向量来表示原始值中每个值的权重/概率,但是对于这个更复杂的场景,我甚至不知道从哪里开始。
我不完全确定是否可以完成整个过程,我也不知道从哪里开始,但是我们将不胜感激。
答案 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