1

密度と値のシミュレーションに関係する理論的およびコーディング上の質問があります。

density(x)コマンドを使用してカスタム密度を構築しています。ただし、この密度から 1000 ~ 10000 のシミュレーション値を生成したいと考えています。全体的な目標は、密度 (x$y) 形式で構築された 2 つの密度を取得し、シミュレーションを実行して、この密度 A が密度 B x% の時間よりも大きいと言うことです。シミュレートされた各値を取得して、どちらが高いかを確認し、A が B よりも高い回数をカウントするコードを作成します。

これを達成する方法はありますか?または、これらの密度で同様のことを達成する方法はありますか? ありがとう!

4

2 に答える 2

1

を反転する@DWinのヒントに従ってecdf、スプラインを使用して反転したステップ関数に適合するこのようなアプローチを実装する方法を次に示します。

与えられた

z <- c(rnorm(40), runif(40))
plot(density(z))

ここに画像の説明を入力

定義

spl <- with(environment(ecdf(z)), splinefun(y, x))

sampler <- function(n)spl(runif(n))

sampler()これで、必要なサイズで呼び出すことができます:

plot(density(sampler(1000)))

ここに画像の説明を入力

最後の注意: これにより、元のデータの範囲外の値が生成されることはありませんが、重複は非常にまれです。

> anyDuplicated(sampler(1e4))
[1] 0
于 2013-09-18T23:09:58.393 に答える