カーネル密度推定器を2Dに統合する


12

誰かがトレイルをたどりたい場合に備えて、私はこの質問から来ています。

基本的に、N個のオブジェクトで構成されたデータセットがあり、各オブジェクトには特定の数の測定値(この場合は2つ)が付加されています。ΩN

Ω=o1[バツ1y1]o2[バツ2y2]oN[バツNyN]

Iは、確率を決定する方法が必要新しいオブジェクトに属するΩを私はその質問に助言されたように、確率密度得るためにFをp[バツpyp]Ωf^私は私が既に持っていると信じてカーネル密度推定スルーを、 。

私の目標は、この新しいオブジェクトの確率(得ることであるので、設定されたこの2次元データへの帰属)Ωを、私はPDFファイルに統合するように言われたFを "上のサポートの値はその密度のためにあなたが観察したものよりも少ない」。"観察"密度は、fは、新しいオブジェクトで評価P、すなわちFXはPY P。だから私は方程式を解く必要があります:p[バツpyp]Ωf^f^pf^バツpyp

バツyf^バツy<f^バツpypf^バツydバツdy

2DデータセットのPDF(pythonのstats.gaussian_kdeから取得)モジュール)は次のようになります。

ここに画像の説明を入力してください

ここで、赤い点は新しいオブジェクトp [ x py p ]を表しますp[バツpyp]は、データセットのPDF上にプロットされた。

質問がされるように:どのように私は限界のために上記の積分が計算することができますそのようなPDFのルックスを?バツyf^バツy<f^バツpyp


追加

コメントの1つで言及したモンテカルロ法がどれだけうまく機能しているかを確認するために、いくつかのテストを行いました。これは私が得たものです:

テーブル

両方の帯域幅がほぼ同じ変動を示しているため、低密度の領域では値が少し変動しているように見えます。差を与えるシルバーの2500年対1000年サンプル値を比較した表で最大変化点で発生し、(X、Y)=(2.4,1.5)0.0126又は~1.3%ます。私の場合、これは大体受け入れられるでしょう。

編集:私はちょうどここで与えられた定義によると、2次元でスコットのルールはシルバーマンのルールと同等であることに気づきました


2
推定量がユニモーダルではなく、フォローしている推奨事項が明示的に「ユニモーダル」分布にのみ適用されることに気づきましたか?それは、あなたが何か間違ったことをしているという意味ではありませんが、答えが何を意味するのかについていくつかの厳しい考えを生み出すはずです。
whuber

こんにちは、@ whuber、実際、その質問の答えは、それが単峰分布に対して「うまく動作している」と言っているので、何らかの変更を加えることで問題を解決できると思いました。「行儀が良い」とは、統計的な専門用語の「作品のみ」を意味しますか(正直な質問)。乾杯。
ガブリエル

私の主な懸念は、KDEが帯域幅の選択に敏感である可能性があることであり、特に図に示されているような周辺の場所では、積分が選択に非常に敏感になることを期待しています。(ちなみに、このようなラスターイメージを作成すると、計算自体は簡単です。値が「プローブ」ポイントの値より小さいポイント間のイメージの平均値に比例します。)これは、合理的な帯域幅の全範囲に対する答えを計算し、その範囲内で実質的な方法で変化するかどうかを確認することによって行われます。そうでない場合は、大丈夫です。
whuber

f^

データセットにはいくつの観測がありますか?
香港大井

回答:


11

簡単な方法は、積分のドメインをラスタライズし、積分の離散近似を計算することです。

次の点に注意してください。

  1. ポイントの範囲を超えてカバーするようにしてください。カーネル密度の推定値にかなりの値があるすべての場所を含める必要があります。つまり、ポイントの範囲をカーネル帯域幅の3〜4倍に拡張する必要があります(ガウスカーネルの場合)。

  2. 結果は、ラスターの解像度によって多少異なります。 解像度は帯域幅のごく一部である必要があります。計算時間はラスター内のセルの数に比例するため、意図したものよりも粗い解像度を使用して一連の計算を実行するのに余分な時間はほとんどかかりません:粗いものの結果が最高の解像度。そうでない場合は、より細かい解像度が必要になる場合があります。

256ポイントのデータセットの図を次に示します。

図1

ポイントは、2つのカーネル密度推定値に重ねられた黒い点として示されています。6つの大きな赤い点は、アルゴリズムが評価される「プローブ」です。これは、1000 x 1000セルの解像度で、4つの帯域幅(デフォルトは1.8(垂直)〜3(水平)、1 / 2、1、および5ユニット)で行われました。次の散布図マトリックスは、広範囲の密度をカバーするこれらの6つのプローブポイントの帯域幅に結果がどれほど強く依存するかを示しています。

図2

変動は2つの理由で発生します。明らかに密度の推定値は異なり、1つの形式の変動が生じます。さらに重要なことは、密度推定値の違いにより、任意の単一(「プローブ」)ポイントで大きな違いが生じる可能性があることです。後者の変動は、ポイントのクラスターの中密度の「フリンジ」周辺で最も大きくなります。正確には、この計算が最も頻繁に使用される場所です。

これは、これらの計算結果が比較的arbitrary意的な決定(使用する帯域幅)に非常に敏感になる可能性があるため、これらの計算結果を使用および解釈する際に十分な注意が必要であることを示しています。


Rコード

このアルゴリズムは、最初の関数の6行に含まれていfます。その使用法を説明するために、残りのコードは前の図を生成します。

library(MASS)     # kde2d
library(spatstat) # im class
f <- function(xy, n, x, y, ...) {
  #
  # Estimate the total where the density does not exceed that at (x,y).
  #
  # `xy` is a 2 by ... array of points.
  # `n`  specifies the numbers of rows and columns to use.
  # `x` and `y` are coordinates of "probe" points.
  # `...` is passed on to `kde2d`.
  #
  # Returns a list:
  #   image:    a raster of the kernel density
  #   integral: the estimates at the probe points.
  #   density:  the estimated densities at the probe points.
  #
  xy.kde <- kde2d(xy[1,], xy[2,], n=n, ...)
  xy.im <- im(t(xy.kde$z), xcol=xy.kde$x, yrow=xy.kde$y) # Allows interpolation $
  z <- interp.im(xy.im, x, y)                            # Densities at the probe points
  c.0 <- sum(xy.kde$z)                                   # Normalization factor $
  i <- sapply(z, function(a) sum(xy.kde$z[xy.kde$z < a])) / c.0
  return(list(image=xy.im, integral=i, density=z))
}
#
# Generate data.
#
n <- 256
set.seed(17)
xy <- matrix(c(rnorm(k <- ceiling(2*n * 0.8), mean=c(6,3), sd=c(3/2, 1)), 
               rnorm(2*n-k, mean=c(2,6), sd=1/2)), nrow=2)
#
# Example of using `f`.
#
y.probe <- 1:6
x.probe <- rep(6, length(y.probe))
lims <- c(min(xy[1,])-15, max(xy[1,])+15, min(xy[2,])-15, max(xy[2,]+15))
ex <- f(xy, 200, x.probe, y.probe, lim=lims)
ex$density; ex$integral
#
# Compare the effects of raster resolution and bandwidth.
#
res <- c(8, 40, 200, 1000)
system.time(
  est.0 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, lims=lims)$integral))
est.0
system.time(
  est.1 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, h=1, lims=lims)$integral))
est.1
system.time(
  est.2 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, h=1/2, lims=lims)$integral))
est.2
system.time(
  est.3 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, h=5, lims=lims)$integral))
est.3
results <- data.frame(Default=est.0[,4], Hp5=est.2[,4], 
                      H1=est.1[,4], H5=est.3[,4])
#
# Compare the integrals at the highest resolution.
#
par(mfrow=c(1,1))
panel <- function(x, y, ...) {
  points(x, y)
  abline(c(0,1), col="Red")
}
pairs(results, lower.panel=panel)
#
# Display two of the density estimates, the data, and the probe points.
#
par(mfrow=c(1,2))
xy.im <- f(xy, 200, x.probe, y.probe, h=0.5)$image
plot(xy.im, main="Bandwidth=1/2", col=terrain.colors(256))
points(t(xy), pch=".", col="Black")
points(x.probe, y.probe, pch=19, col="Red", cex=.5)

xy.im <- f(xy, 200, x.probe, y.probe, h=5)$image
plot(xy.im, main="Bandwidth=5", col=terrain.colors(256))
points(t(xy), pch=".", col="Black")
points(x.probe, y.probe, pch=19, col="Red", cex=.5)

驚くべき答えはDefaultHp5帯域幅の意味を理解しているかどうかはわかりませんが、帯域幅(と仮定しH1H5意味h=1しますh=5Hp5値はありますh=1/2か?もしそうなら何Defaultですか?
ガブリエル

1
kde2dbandwidth.nrd31.8515

したがって、使用する帯域幅を増やすと、結果の範囲kdeも増加すると言うと正しく理解できますか?<10%積分の結果の値に誤差が生じる可能性があることを考えると、スコットのルールの使用についてどう思いますか?
ガブリエル

これらのルールはまったく異なる目的のために開発されたため、特にstats.stackexchange.com/questions/63263で提案されたものを実装する場合は、目的に合ったパフォーマンスが得られない可能性があると考えるべきです。KDEに誰が使用するかについて心配するのは時期尚早です。この段階では、アプローチ全体が確実に機能するかどうかを真剣に検討する必要があります。
whuber

1
上記をスクラッチします。私、実装が機能しているかどうかを知る方法を持っています。それは少し複雑で時間がかかりますが、私はそれを行うことができます(できるはずです)。
ガブリエル

1

適切な数の観測がある場合は、統合をまったく行う必要はありません。新しいポイントがとしましょうバツ0。密度推定器があるとしますf^; 観測数を合計するバツ そのために f^バツ<f^バツ0サンプルサイズで割ります。これにより、必要な確率の近似値が得られます。

これは、 f^バツ0は「小さすぎる」わけではなく、サンプルサイズは低密度領域で適切な推定値を提供するのに十分な大きさ(および十分な広がり)です。しかし、2変量の場合、20000ケースは十分に大きいように見えますバツ


この推奨事項のいくつかの定量分析、または実際のアプリケーションの少なくとも1つの例は歓迎されます。あなたの提案の正確さは、カーネルの形状に大きく依存していると思われます。これは、その特性を十分に研究することなく、そのような計算に依存することに消極的になります。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.