私は、同じ分布から来たと思われる一連の数値を持っているとしましょう。密度オブジェクトから乱数を生成する(またはより広範に番号の集合から)
set.seed(20130613)
x <- rcauchy(10)
同じ不明な分布からランダムに数値を生成する関数が必要です。私が考えている1つのアプローチは、density
オブジェクトを作成し、そこからCDFを取得し、ランダム一様変数(see Wikipedia)の逆CDFを取ることです。
den <- density(x)
#' Generate n random numbers from density() object
#'
#' @param n The total random numbers to generate
#' @param den The density object from which to generate random numbers
rden <- function(n, den)
{
diffs <- diff(den$x)
# Making sure we have equal increments
stopifnot(all(abs(diff(den$x) - mean(diff(den$x))) < 1e-9))
total <- sum(den$y)
den$y <- den$y/total
ydistr <- cumsum(den$y)
yunif <- runif(n)
indices <- sapply(yunif, function(y) min(which(ydistr > y)))
x <- den$x[indices]
return(x)
}
rden(1, den)
## [1] -0.1854121
私の質問は次のとおりです。
- は密度オブジェクトから乱数を生成するためのより良い(またはRに組み込まれた)方法はありますか?
- 数字のセットから乱数を生成する方法については他にもありますか(
sample
以外)?
この背後にある理論ははるかに微妙です。密度はどのように推定されますか?どのカーネルが使用されていますか?この見積もりの周りに信頼帯がありますか?それは混合モデルですか?等 –