3.3.4 節(カーネル密度推定)

実行例3.5

library(car)
library(KernSmooth)
x <- Davis[,c('weight','height')]
h <- c(dpik(x$weight), dpik(x$height))
est <- bkde2D(x,bandwidth=h, gridsize=c(10^3,10^3))
d <- list(x=est$x1,y=est$x2, z=est$fhat)
image(d,col=terrain.colors(7),xlab="weight",ylab="height",xlim=c(35,110),ylim=c(145,200))
contour(d,add=T)

カーネル行列の計算

この部分が本には書かれておりませんでした。色々編集を行っているうちに抜けてしまったものです。失礼いたしました。

# kernel matrix (missing - sorry!)
n <- nrow(x); K <- matrix(-1,n,n)
prefac <- (2*pi*h)^(-0.5)
for(nn in 1:n){
  xnn <- x[nn,]
  x_x1 <- x[,1] - as.numeric(xnn[1])
  K1 <- prefac[1]*exp(-0.5*(1/h[1])^2*(x_x1*x_x1))
  x_x2 <- x[,2] - as.numeric(xnn[2])
  K2 <- prefac[2]*exp(-0.5*(1/h[2])^2*(x_x2*x_x2))
  K[,nn] <- K1 * K2
}

実行例 3.6

# Code 3.6: anomaly scores
aa <- colSums(K)-diag(K)
lowerLim <- 10^(-20); aa[(aa<lowerLim)] <- lowerLim
a <- (-1)*log(aa/(n-1))
plot(a,xlab="sample ID",ylab="anomaly score")

LS0tDQp0aXRsZTogIuWFpemWgCDmqZ/morDlrabnv5LjgavjgojjgovnlbDluLjmpJznn6UiDQphdXRob3I6ICLkupXmiYsg5YmbIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyAzLjMuNCDnr4DvvIjjgqvjg7zjg43jg6vlr4bluqbmjqjlrprvvIkNCiMjIOWun+ihjOS+izMuNQ0KDQpgYGB7cn0NCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShLZXJuU21vb3RoKQ0KeCA8LSBEYXZpc1ssYygnd2VpZ2h0JywnaGVpZ2h0JyldDQpoIDwtIGMoZHBpayh4JHdlaWdodCksIGRwaWsoeCRoZWlnaHQpKQ0KZXN0IDwtIGJrZGUyRCh4LGJhbmR3aWR0aD1oLCBncmlkc2l6ZT1jKDEwXjMsMTBeMykpDQpkIDwtIGxpc3QoeD1lc3QkeDEseT1lc3QkeDIsIHo9ZXN0JGZoYXQpDQppbWFnZShkLGNvbD10ZXJyYWluLmNvbG9ycyg3KSx4bGFiPSJ3ZWlnaHQiLHlsYWI9ImhlaWdodCIseGxpbT1jKDM1LDExMCkseWxpbT1jKDE0NSwyMDApKQ0KY29udG91cihkLGFkZD1UKQ0KYGBgDQoNCg0KIyMg44Kr44O844ON44Or6KGM5YiX44Gu6KiI566XIA0K44GT44Gu6YOo5YiG44GM5pys44Gr44Gv5pu444GL44KM44Gm44GK44KK44G+44Gb44KT44Gn44GX44Gf44CC6Imy44CF57eo6ZuG44KS6KGM44Gj44Gm44GE44KL44GG44Gh44Gr5oqc44GR44Gm44GX44G+44Gj44Gf44KC44Gu44Gn44GZ44CC5aSx56S844GE44Gf44GX44G+44GX44Gf44CCDQoNCmBgYHtyfQ0KIyBrZXJuZWwgbWF0cml4IChtaXNzaW5nIC0gc29ycnkhKQ0KbiA8LSBucm93KHgpOyBLIDwtIG1hdHJpeCgtMSxuLG4pDQpwcmVmYWMgPC0gKDIqcGkqaCleKC0wLjUpDQpmb3Iobm4gaW4gMTpuKXsNCiAgeG5uIDwtIHhbbm4sXQ0KICB4X3gxIDwtIHhbLDFdIC0gYXMubnVtZXJpYyh4bm5bMV0pDQogIEsxIDwtIHByZWZhY1sxXSpleHAoLTAuNSooMS9oWzFdKV4yKih4X3gxKnhfeDEpKQ0KICB4X3gyIDwtIHhbLDJdIC0gYXMubnVtZXJpYyh4bm5bMl0pDQogIEsyIDwtIHByZWZhY1syXSpleHAoLTAuNSooMS9oWzJdKV4yKih4X3gyKnhfeDIpKQ0KICBLWyxubl0gPC0gSzEgKiBLMg0KfQ0KYGBgDQoNCiMjIOWun+ihjOS+iyAzLjYNCg0KYGBge3J9DQojIENvZGUgMy42OiBhbm9tYWx5IHNjb3Jlcw0KYWEgPC0gY29sU3VtcyhLKS1kaWFnKEspDQpsb3dlckxpbSA8LSAxMF4oLTIwKTsgYWFbKGFhPGxvd2VyTGltKV0gPC0gbG93ZXJMaW0NCmEgPC0gKC0xKSpsb2coYWEvKG4tMSkpDQpwbG90KGEseGxhYj0ic2FtcGxlIElEIix5bGFiPSJhbm9tYWx5IHNjb3JlIikNCmBgYA0KDQo=