特定のアルファ(0,1)の逆カーネル(私は通常を考慮しています)CDFを計算するRに関数はありますか?変位値を見つけましたが、それがどのように機能するかわかりません。
ありがとう
統合して累積分布関数を取得し、根探索アルゴリズムを使用して累積分布関数を逆にすることができます。まず、 からの出力を補間しますdensity
。
set.seed(10000)
x <- rnorm(1000, 10, 13)
pdf <- density(x)
# Interpolate the density
f <- approxfun(pdf$x, pdf$y, yleft=0, yright=0)
# Get the cdf by numeric integration
cdf <- function(x){
integrate(f, -Inf, x)$value
}
# Use a root finding function to invert the cdf
invcdf <- function(q){
uniroot(function(x){cdf(x) - q}, range(x))$root
}
を与える
med <- invcdf(.5)
cdf(med)
#[1] 0.5000007
これは間違いなく改善される可能性があります。1 つの問題は、cdf が常に 1 以下であることを保証しないことです (また、max(x) より大きい値の cdf をチェックすると、1.00097 のような結果が得られる可能性があります。しかし、私は疲れすぎて修正できません。これでまともなスタートが切れるはずです。
別のアプローチは、カーネル密度推定ではなく対数スプライン密度推定を使用することです。「logspline」パッケージを見てください。ログスプライン密度推定を使用すると、CDF ( plogspline
) および逆 CDF ( qlogspline
) 関数が得られます。