2016-11-29 11 views
1

私はガウスカーネル密度を計算しようとしており、density()関数の知識をテストするために、ゼロから計算して2つの結果を比較することにしました。密度()カーネルエスティメータの矛盾と傷による計算との比較

ただし、同じ回答はありません。

私は既存のデータセット

xi <- mtcars$mpg 

で始まり、

これを提供
plot(density(xi, kernel = "gaussian")) 

を次のように、このデータのカーネル密度をプロットすることができます...

Automated gaussian kernel density

私はいくつかのdをつかむ私の計算が一貫しているように、この計算の結果を示します。

auto.dens <- density(xi, kernel = "gaussian") 
h <- auto.dens$bw # bandwidth for kernel 
x0 <- auto.dens$x # points for prediction 

私は、ガウスカーネル密度を自分で計算し、私はそれを読むことが明確であるだけので、ループ内でこれを行っ を持っています。

fx0 <- NULL 

for (j in 1:length(x0)){ 

    t <- abs(x0[j]-xi)/h 

    K <- (1/sqrt(2*pi))*exp(-(t^2)/2) 

    fx0 <- c(fx0,sum(K*t)/(length(t)*h)) 
} 

基本的な計算は、ダニエル・ウィルクスにより、大気科学、第3版では統計的手法でセクション3.3.6で詳細を次のように構築されています。しかしenter image description hereとして設定し、tはenter image description here

さガウシアンカーネルでEquation 3.13 from Wilks textbook 、ここでは私の問題です。私はその後、2つのプロット

...

plot(y=fx0,x=x0, type="l", ylim=c(0,0.07)) 
lines(x=auto.dens$x, y=auto.dens$y, col="red") 

密度関数(赤)、そして私の計算(黒)、私が手からの出力 enter image description here

!これらの2つの計算明らかに異なっている!

密度関数の仕組みを理解できませんでしたか?なぜ私はゼロから同じ結果を計算することができないのですか?私のカーネル見積もりが異なる結果をもたらすのはなぜですか?なぜ私の結果は滑らかではありませんか?

もっと複雑なデータセットにカーネルスムーザー(密度だけでなく)を構築して適用する必要があります。この小さな例では、私が自動化された関数と同じことをしていることを確認しました。この問題があることを期待していません。私はあらゆる種類のものを試してきましたが、私はなぜ別の結果が得られるのか分かりません。

ありがとうございました。読んでいただきありがとうございました。

編集:午前13時40分29/11/2016 ソリューション enter image description here

答えて

2

下の答えで説明するようにあなただけのsum(K)sum(K*t)する必要はありません。

xi <- mtcars$mpg 
plot(density(xi, kernel = "gaussian"), lwd = 2) 

auto.dens <- density(xi, kernel = "gaussian") 
h <- auto.dens$bw # bandwidth for kernel 
x0 <- auto.dens$x # points for prediction 

fx0 <- NULL 
for (j in 1:length(x0)) { 
    t <- abs(x0[j]-xi)/h 
    K <- (1/sqrt(2*pi))*exp(-(t^2)/2) 
    fx0 <- c(fx0, sum(K)/(length(t)*h)) 
} 

lines(x0, fx0, col = "red", lty = "dotted") 
+0

ありがとうございました!これは問題を解決し、明らかにコードに続くことのないテキストブックからの数学の私の理解です。私はとても安心しています。それはとても簡単な問題です! – Kate2808

関連する問題