提取在R中随机抽样的特征概率
我定义了以下变量:提取在R中随机抽样的特征概率,r,subset,sample,R,Subset,Sample,我定义了以下变量: 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[min:max]会像它应该的那样工作,但我不确定如何确定它是否工作。更复杂的情况是如果我想要 a[c(1, 3, 5)] 然后我需要“probs”来对应字符1、3和5 我尝试过使用probs[get(paste0(…)
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[min:max]会像它应该的那样工作,但我不确定如何确定它是否工作。更复杂的情况是如果我想要
a[c(1, 3, 5)]
然后我需要“probs”来对应字符1、3和5
我尝试过使用probs[get(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,因此我评论中的代码将是无用的。好的,谢谢!试试看!
set.seed(123)
tmp = sample(a[min:max], size = 10000, replace = TRUE, prob = probs[min:max])
table(tmp)/10000 # the observed probabilities