该随机R中
问题描述:
采样中提取字符的概率我有定义了以下变量:该随机R中
a <- as.character(1:10)
b <- 100
c <- 10
probs <- c(0.3, 0.3, 0.3, rep(0.1/7, 7))
min <- 5
max <- 10
我试图找出如何子集在下面的代码的“probs”参数与所述字符对应被随机抽样(即随机抽样字符5:10)
sample(a[min:max], size = round(b/c), replace = TRUE, prob = probs[???])
我不认为probs [分钟:MAX]将工作,因为它应该,但我不确定如何找出肯定,如果它确实如此。更复杂的情况是,如果我想是这样
a[c(1, 3, 5)]
然后,我会需要“probs”对应的字符1,3,和5
我一直在使用probs [得到(paste0(试过。 ..))],但这不是最直接和最有效的方式。反正它不起作用。
任何意见表示赞赏。
答
您只需将子集probs
设置为与a
相同的子集,例如,
index = min:max
sample(a[index], size = round(b/c), replace = TRUE, prob = probs[index])
对于更复杂的场景,请设置index = c(1,3,5)
。
你可以看到,这个工程做一个模拟和比较真实的概率观测到的概率:
set.seed(123)
tmp = sample(a[min:max], size = 10000, replace = TRUE, prob = probs[min:max])
table(tmp)/10000 # the observed probabilities
观察到的概率大致都是平等的,这是真正的概率是所有平等一致的。
如果你看看sample
的帮助文件,你会发现prob
不需要总和为1.该函数将负责标准化概率。
难道你不能重新调整probs [min:max]/sum(probs [min:max])'总和为1吗? –
@RuiBarradas虽然这提出了一个我忽略提及的观点,但我不认为prob中的概率将与随机抽样的字符标签相对应... –
是的,我相信它会。或者至少我读了'sample'的帮助页面:'prob - 概率权重矢量,用于获取被抽样矢量的元素。“还要注意,概率自动调整为1,所以代码在我的评论中将是无用的。 –