从拉普拉斯分布生成随机数

时间:2014-05-27 09:21:09

标签: r statistics

我一直试图从双指数(拉普拉斯)分布中生成随机数。我在某一点上我可以再写代码了。任何帮助,将不胜感激。下面的代码就是我写的。

rlaplace = function(u,a,b){
    u = c(runif(ns))
    for(i in 1:ns){
        if(u[i] <= 0.5){
            X = a+b*log(2*u)
        } else{
            X = a-b*log(2*(1-u))
        }
    }
    X
}
z1 = rlaplace(u,a,b)

2 个答案:

答案 0 :(得分:4)

Probability distributions CRAN Task View开始,有几个软件包已经实现了拉普拉斯分布,特别是distrRunuran

因此,您应该可以安装distr,例如,执行以下操作:

library(distr)
D <- DExp(rate = 1) 
r(D)(1)

代码取自DExp-class帮助页面的示例。

答案 1 :(得分:2)

试试这个?

#Using pdf for a laplace RV:
#F(y) = 1/sqrt(2*sigma^2)*exp(sqrt(2)*abs(y-mu)/sigma)
rlaplace = function(n,mu,sigma){
  U = runif(n,0,1)
  #This will give negative value half of the time
  sign = ifelse(rbinom(n,1,.5)>.5,1,-1)     
  y = mu + sign*sigma/sqrt(2)*log(1-U)  
  y
}