ラプラス分布に従う乱数の生成
Rでは様々な確率分布の乱数を使えます.しかし,ラプラス分布はありません.
個人的に必要に駆られたので,作りました.
逆関数法を使っています.
基本的には,既存のRの関数の書き方に沿っているつもりです.
以下はコード. nは乱数の個数,aは平均,bはスケール,pは確率,qは確率点
rlaplace = function(n, a, b) { u = log(runif(n)) v = ifelse(runif(n)>1/2, 1, -1) return(a + b*v*u) } dlaplace = function(q, a, b){ pdf = 1/(2*b^2)*exp(-abs(q-a)/b) return(pdf) } plaplace = function(q, a, b){ cdf = ifelse(q<a, exp((q-a)/b)/2, 1-exp(-(q-a)/b)/2) return(cdf) } qlaplace = function(p, a, b){ if(0<p&&p<=1/2){ quantile = a + b*log(2*p) }else if(1/2<p&&p<=1){ quantile = a - b*log(2*(1-p)) } return(quantile) }