Rのカーネル密度推定の「pdf」の下の領域


15

Rの「密度」関数を使用してカーネル密度の推定を試みています。結果を解釈してさまざまなデータセットを比較するのは、曲線下の面積が必ずしも1であるとは限らないため、多少困難です。確率密度関数(pdf) には、面積。カーネル密度の推定値がpdfを報告すると仮定しています。私が使用していますintegrate.xyからsfsmisc曲線下面積を推定します。ϕ(x)ϕ(x)dx=1

> # generate some data
> xx<-rnorm(10000)
> # get density
> xy <- density(xx)
> # plot it
> plot(xy)

密度のプロット

> # load the library
> library(sfsmisc)
> integrate.xy(xy$x,xy$y)
[1] 1.000978
> # fair enough, area close to 1
> # use another bw
> xy <- density(xx,bw=.001)
> plot(xy)

bw = .001の密度

> integrate.xy(xy$x,xy$y)
[1] 6.518703
> xy <- density(xx,bw=1)
> integrate.xy(xy$x,xy$y)
[1] 1.000977
> plot(xy)

bw = 1の密度

> xy <- density(xx,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 6507.451
> plot(xy)

bw = 1e-6の密度

曲線の下の領域は常に1であるべきではありませんか?狭い帯域幅が問題のようですが、テールに詳細などを表示したい場合があり、狭い帯域幅が必要です。

更新/回答:

220

> xy <- density(xx,n=2^15,bw=.001)
> plot(xy)

サンプリングするポイント数が多い密度

> integrate.xy(xy$x,xy$y)
[1] 1.000015
> xy <- density(xx,n=2^20,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 2.812398


3
これはdensity()の浮動小数点の制限のように見えます:1e-6の帯域幅を使用すると、10,000個のスパイクのコレクションを作成します。それらのスパイクは、ギャップを適切に特徴付けることなく、主にピークによって表されます。あなたは単にその限界を超えてdensity()を押しているだけです。
whuber

@whuberは、浮動小数点の制限により、精度の制限を意味します。浮動小数点を使用すると、倍精度を使用する場合に比べてエラーが大きく過大評価されることになります。私はそれがどのように起こるかはわかりませんが、いくつかの証拠を見たいと思います。
highBandWidth

n

1

@ Anony-Mousse、はい、それがこの質問が求めていることです。なぜ1に評価されないのですか?
highBandWidth

回答:


9

台形ルールのintegrate.xy()使用について考えてください。正規分布では、密度が凹である区間(-1,1)の曲線下の面積を過小評価し(したがって、線形補間は真の密度を下回ります)、他の場所では過大評価します(線形補間が進むにつれて)真の密度の上に)。後者の領域の方が大きいため(必要に応じて、レスベグ測定で)、台形規則は積分を過大評価する傾向があります。さて、より小さな帯域幅に移行すると、推定値のほとんどすべてが区分的に凸になり、データポイントに対応する多くの狭いスパイクとそれらの間の谷が生じます。それは台形の規則が特にひどく壊れるところです。


つまり、手で波打つ意味で、山を「オーバーサンプリング」し、谷を「アンダーサンプリング」しているということです。視覚化も台形の規則(サンプル全体の線形補間)に従うため、カーネル帯域幅が小さすぎるため視覚化には不適切と思われます。また、密度を計算するポイントをより多く取得できれば、問題は少なくなります。
highBandWidth

1
この説明は水を保持しません。問題は、台形規則がひどく壊れないということではなく、密度が不適切に離散化されることです。density()は正しい表現を生成しないため、integrate()は正しい答えを得るのに無力です。これを確認するには、xy $ xを調べてください。10,000個の狭いスパイクを表すための値は512個しかありません。
whuber

@whuber、それが答えです。要点は、有限数のサンプルに対して台形規則を使用する必要があり、カーネルに従って連続軸上の真の密度と比較して面積を過大評価することです。質問の最後にある私の更新は、それを拡張しています。
-highBandWidth

1
@highいいえ。台形規則はうまく機能しています。問題は、被積分関数の誤った離散化で動作していることです。10,000個のデータポイントがあり、密度配列に512個の値しかない場合、「データポイントに対応する多くの狭いスパイク」はあり得ません。
whuber

1
これらのグラフを見て、問題はにあるのでdensityはなくにあると考えていますintegrate.xy。N = 10000とBW = 1E6と、あなたはなる有する 1E6についての各歯の高さと櫛を表示すること、及び歯が0ではなく周りに密である、あなたはまだ認識釣鐘型曲線を参照してください。だからdensity、あなたをだましている、または少なくとも小さな帯域幅で異なる方法で使用する必要があります:nデフォルトではなく約(データの範囲)/(bw)である必要がありますn=512。統合者はdensity、不幸な偶然によって返されるこれらの巨大な価値の1つを拾い上げなければなりません。
StasK

-1

大丈夫です、あなたはそれをシフトとスケーリングを修正することができます; 密度が非負になるように最小数を追加し、面積全体が一致するように定数を全体に掛けます。これは簡単な方法です。

L2c[ϕ(x)c]+


2
問題は、関数が1に統合される「適切な」密度を生成しない理由でありdensity修正方法ではないことに注意してください。
ティム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.