2017-11-20 6 views
1

私は、カーネル密度を推定することによって経験的確率分布を作成するために使用しているデータセットを持っています。今は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と非常に高い数値に設定すればいいです。ああ、これはメモリの制約のために可能ではありません。

だからこそ、私は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は、指定された位置でのカーネル密度推定を返します。非常にうまく動作します。私は

kde2d_2

今持っていると仮定の問題は、私はもはや、x軸に沿ってスライスからサンプリングするsampleを使用することができ、ではありません。分布の左側の部分ははるかに細かいので、sampleによってサンプリングされる確率が高くなります。

私はそれが必要なところで細かいグリッドを持っていますが、適切な密度に応じてディストリビューションからサンプルできますか?大いに感謝する。

答えて

0

conditional_probabilty_densityapproxを新しいnとしてください。

関連する問題