私は、カーネル密度を推定することによって経験的確率分布を作成するために使用しているデータセットを持っています。今はMASSパッケージのRのkde2d
を使用しています。確率分布を推定した後、私はsample
を使用して、x軸に沿った2次元分布のスライスからサンプリングします。私はhereとよく似たsample
を使用します。サンプルコードは、この可変基底グリッドを持つカーネル密度推定器からシミュレート
library(MASS)
set.seed(123)
x = rnorm(100, 1, 0.1)
set.seed(456)
y = rnorm(100, 1, 0.5)
den <- kde2d(x, y, n = 50, lims = c(-2, 2, -2, 2))
#to plot this 2d kde:
#library(lattice)
#persp(den)
conditional_probabilty_density = list(x = den$y, y = den$z[40, ])
#to plot the slice:
#plot(conditional_probabilty_density)
simulated_sample = sample(conditional_probabilty_density$x, size = 10, replace = TRUE, prob = conditional_probabilty_density$y)
den
ようになりますと、私のデータは、細かいグリッドの細かさを必要とする変動の多くは、そこにある知ら領域があり、この
のように見えます。他の領域には基本的にデータポイントはなく、何も起こっていません。どこでも私のデータの良好な分解能を得るためにのパラメータをkde2d
と非常に高い数値に設定すればいいです。ああ、これはメモリの制約のために可能ではありません。
だからこそ、私はkde2d
関数を一定でない粒度に変更できると思ったのです。
Hereは、kde2d関数のソースコードです。 一つはライン
gy <- seq.int(lims[3L], lims[4L], length.out = n[2L])
を変更し、y軸上のために望まれるものは何でも細か置くことができます。例えば
a <- seq(-1, 0, 0.5)
gy <- c(a, seq.int(0.1, 2, length.out = n[2L]-length(a)))
変性kde2d
は、指定された位置でのカーネル密度推定を返します。非常にうまく動作します。私は
今持っていると仮定の問題は、私はもはや、x軸に沿ってスライスからサンプリングするsample
を使用することができ、ではありません。分布の左側の部分ははるかに細かいので、sample
によってサンプリングされる確率が高くなります。
私はそれが必要なところで細かいグリッドを持っていますが、適切な密度に応じてディストリビューションからサンプルできますか?大いに感謝する。