我想抽样一个0到1之间的随机数,从0到0.3和10%到0.3-1之间的样本的概率为90%。
我尝试了以下几点:
0.9*runif(1, 0, 0.3) + 0.1*runif(1, 0.3, 1)但还不完全是这样的:例如,我永远不会得到0.8这个数字。
在R基地有简单的方法吗?
发布于 2018-04-06 09:57:15
sample(c(runif(1,0,0.3),runif(1,0.3,1)),1,prob=c(0.9,0.1))发布于 2018-04-06 09:58:18
通常在R中,你想用矢量化的方式来做事情。所以,不要在那个时候画一个数字,而是在一次调用中把所有的数字都画出来(快得多)。在这里,您可以使用sample绘制上极大值和绘图。如下所示:
nsamples<-100000
res<-runif(nsamples,0,sample(c(0.03,1),nsamples,TRUE,prob=c(10,90)))
#just to check the result
hist(res)
#this should be around 0.127(=0.9*0.03+0.1*1) if correct
mean(res<0.03)发布于 2018-04-06 10:00:48
您可以在需要时编写一个小函数来完成这项工作。
runif_probs <- function(n, p = 0.9, cutpoint = 0.3){
ifelse(runif(n) <= p, runif(n, 0, cutpoint), runif(n, cutpoint, 1))
}
set.seed(8862)
which(runif_probs(100) > 0.8)
#[1] 38 62https://stackoverflow.com/questions/49690008
复制相似问题