首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用逆向CDF方法从逻辑CDF生成样本

如何使用逆向CDF方法从逻辑CDF生成样本
EN

Stack Overflow用户
提问于 2020-05-04 05:58:43
回答 1查看 90关注 0票数 0

我的问题是如何使用逆向CDF方法从逻辑CDF中生成R中的样本。逻辑密度为p(θ) = exp(θ)/(1 + exp(θ))^2

下面是该方法的算法:

代码语言:javascript
复制
1: for t = 1 to T do
2: sample q(t) ∼ Unif(0, 1)
3: θ(t) ← F^−1(q(t))
4: end for

这是我的代码,但它只是生成一个相同数字的向量。结果应该是对数凹的,但显然不会是,如果我把它放在直方图中,那么问题是什么呢?

首先将T定义为从均匀分布中抽取的数量

代码语言:javascript
复制
T<-100000
sample_q<-runif(T,0,1)

看起来plogis会给出累积分布函数,所以我想我可以取它的反函数:

代码语言:javascript
复制
generate_samples_from_logistic_CDF <- function(p) {
   for(t in length(T)) 
       cdf<-plogis((1+exp(p)/(exp(p))))
   inverse_cdf<-(1/cdf)
   return(inverse_cdf)
}

应该使用generate_samples_from_logistic_CDF(sample_q),但它只为所有内容提供相同的值

EN

回答 1

Stack Overflow用户

发布于 2020-05-04 06:06:57

由于反向CDF已经在R中编码为qlogis(),因此应该可以这样做:

代码语言:javascript
复制
qlogis(runif(100000))

或者,如果您想“手动”完成此操作,而不是使用内置的qlogis(),则可以使用R <- runif(100000); log(R/(1-R))

请注意,rlogis(100000)应该更有效率。

你的一个困惑是,上面描述的算法中的“逆”并不意味着乘法逆或倒数(即1/x),而是指函数逆(在本例中是log(q/(1-q)))。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61582190

复制
相关文章

相似问题

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