カーネル密度推定のピーク (連続確率変数のモーダル値) をできるだけ正確に見つける必要があります。おおよその値を見つけることができます:
x<-rlnorm(100)
d<-density(x)
plot(d)
i<-which.max(d$y)
d$y[i]
d$x[i]
しかし、d$y
正確な関数を計算するときはわかっています。モードの正確な値を見つけるにはどうすればよいですか?
カーネル密度推定のピーク (連続確率変数のモーダル値) をできるだけ正確に見つける必要があります。おおよその値を見つけることができます:
x<-rlnorm(100)
d<-density(x)
plot(d)
i<-which.max(d$y)
d$y[i]
d$x[i]
しかし、d$y
正確な関数を計算するときはわかっています。モードの正確な値を見つけるにはどうすればよいですか?
モードを扱うための 2 つの関数を次に示します。dmode 関数は最高のピーク (ドミネート モード) を持つモードを見つけ、n.modes はモードの数を識別します。
dmode <- function(x) {
den <- density(x, kernel=c("gaussian"))
( den$x[den$y==max(den$y)] )
}
n.modes <- function(x) {
den <- density(x, kernel=c("gaussian"))
den.s <- smooth.spline(den$x, den$y, all.knots=TRUE, spar=0.8)
s.0 <- predict(den.s, den.s$x, deriv=0)
s.1 <- predict(den.s, den.s$x, deriv=1)
s.derv <- data.frame(s0=s.0$y, s1=s.1$y)
nmodes <- length(rle(den.sign <- sign(s.derv$s1))$values)/2
if ((nmodes > 10) == TRUE) { nmodes <- 10 }
if (is.na(nmodes) == TRUE) { nmodes <- 0 }
( nmodes )
}
# Example
x <- runif(1000,0,100)
plot(density(x))
abline(v=dmode(x))
必要なものをアーカイブするには、次の 2 つの手順が必要だと思います。
1) KDE ピークの x 軸の値を見つける
2) ピークの密度値を取得する
したがって (パッケージを使用してもかまわない場合)、パッケージを使用したソリューションは次のhdrcde
ようになります。
require(hdrcde)
x<-rlnorm(100)
d<-density(x)
# calcualte KDE with help of the hdrcde package
hdrResult<-hdr(den=d,prob=0)
# define the linear interpolation function for the density estimation
dd<-approxfun(d$x,d$y)
# get the density value of the KDE peak
vDens<-dd(hdrResult[['mode']])
編集:また、
hdrResult[['falpha']]
それがあなたにとって十分に正確であれば!