【问题标题】:how do you generate samples from the logistic CDF using the inverse-CDF method如何使用逆 CDF 方法从逻辑 CDF 生成样本
【发布时间】:2020-05-03 21:58:43
【问题描述】:

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

这是该方法的算法:

1: for t = 1 to T do
2: sample q(t) ∼ Unif(0, 1)
3: θ(t) ← F^−1(q(t))
4: end for

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

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

T<-100000
sample_q<-runif(T,0,1)

似乎plogis 会给你累积分布函数,所以我想我可以取它的倒数:

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)
}

应该生成_samples_from_logistic_CDF(sample_q) 但相反,它只会给我所有的相同价值

【问题讨论】:

    标签: r sampling cdf


    【解决方案1】:

    由于逆 CDF 已经在 R 中编码为 qlogis(),这应该可以工作:

    qlogis(runif(100000))
    

    或者如果你想“手动”而不是使用内置的qlogis(),你可以使用R &lt;- runif(100000); log(R/(1-R))

    注意rlogis(100000)应该更高效。

    您的困惑之一是上述算法描述中的“逆”并不意味着乘法逆或倒数(即 1/x),而是 函数逆(在这种情况下是log(q/(1-q)))

    【讨论】:

    • 感谢您的澄清。我之前尝试过 qlogis,它现在可以使用正确的 cdf 函数 (exp(p)/(1+exp(p))^2),但它似乎也生成了一个负数向量。它是否正确?我也可以只使用 rlogis 吗? T
    猜你喜欢
    • 2018-09-12
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多