首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用不均匀概率从0到1抽样

用不均匀概率从0到1抽样
EN

Stack Overflow用户
提问于 2018-04-06 09:50:32
回答 3查看 562关注 0票数 1

我想抽样一个0到1之间的随机数,从0到0.3和10%到0.3-1之间的样本的概率为90%。

我尝试了以下几点:

代码语言:javascript
复制
0.9*runif(1, 0, 0.3) + 0.1*runif(1, 0.3, 1)

但还不完全是这样的:例如,我永远不会得到0.8这个数字。

在R基地有简单的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-06 09:57:15

代码语言:javascript
复制
sample(c(runif(1,0,0.3),runif(1,0.3,1)),1,prob=c(0.9,0.1))
票数 4
EN

Stack Overflow用户

发布于 2018-04-06 09:58:18

通常在R中,你想用矢量化的方式来做事情。所以,不要在那个时候画一个数字,而是在一次调用中把所有的数字都画出来(快得多)。在这里,您可以使用sample绘制上极大值和绘图。如下所示:

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2018-04-06 10:00:48

您可以在需要时编写一个小函数来完成这项工作。

代码语言:javascript
复制
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 62
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49690008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档