3

密度{stats}を使用して、変数のベクトルのカーネル「ガウス」密度を作成しています。次のサンプルデータセットを使用する場合:

    x <- rlogis(1475, location=0, scale=1)  # x is a vector of values - taken from a rlogis just for the purpose of explanation
    d<- density(x=x, kernel="gaussian")

dn=1475点でこの密度の一次導関数を取得する方法はありますか?

4

2 に答える 2

5

編集#2:

ガウス関数の導関数に分析式を使用するというGregSnowの優れた提案と、彼の投稿に続く会話をフォローアップすると、これらの各ポイントでの正確な勾配が得られます。

s <- d$bw; 
slope2 <- sapply(x, function(X) {mean(dnorm(x - X, mean = 0, sd = s) * (x - X))})
## And then, to compare to the method below, plot the results against one another
plot(slope2 ~ slope)

編集:

OK、質問を読み直して、入力ベクトルの各ポイントに勾配が必要であることがわかりましたxこれを概算する1つの方法があります:

slope <- (diff(d$y)/diff(d$x))[findInterval(x, d$x)]

可能なさらなる改良は、その間隔内のポイントの位置を見つけ、次にその勾配を現在の間隔の勾配とその右または左の間隔の加重平均として計算することです。


各ポイントのすぐ右と左のセグメントの傾きを平均することで、これにアプローチします。(左と右にそれぞれセグメントがない最初と最後のポイントには、少し特別な注意を払う必要があります。)

dy <- diff(d$y)
dx <- diff(d$x)[1]  ## Works b/c density() returns points at equal x-intervals
((c(dy, tail(dy, 1)) + c(head(dy, 1), dy))/2)/dx
于 2012-09-24T16:15:02.597 に答える
3

密度推定器の曲線は、すべてのカーネルの合計であり、この場合はガウス関数(ポイント数で除算)です。和の導関数は導関数の合計であり、関数の定数倍の導関数はその定数に導関数を掛けたものです。したがって、特定のポイントでの密度推定の導関数は、その特定のポイントでの1475の異なるガウス曲線の傾きの平均になります。各ガウス曲線には、各データポイントに対応する平均と、帯域幅に基づく標準偏差があります。したがって、ガウス分布の勾配を計算できる場合、密度推定の勾配を見つけることは、1475の勾配の平均にすぎません。

于 2012-09-24T17:42:27.647 に答える