大量のデータ (一連の測定値ごとに 10,000 ~ 50,000 の値) があり、これらの値の分布の密度推定から局所的な最大値/最小値を自動的に識別することに関心があります。実際、私は通常、ピットで区切られた 2 つのピークが存在するはずであると想定しています。さらに処理するためにデータを 2 つの部分に分割するために、2 つのピークを互いに分離するピットを見つけたいと考えています。可能であれば、ピークがどこにあるかも知りたいです。
密度推定には非常に小さな局所的な変化が含まれている可能性があるため、「感度」を調整できるようにしたいと考えています。これまでに見つけた最高のものは、@Tommy のこのソリューションでした: https://stackoverflow.com/a/6836924/1003358ここに例があります:
library(ggplot2)
d <- density(faithful$eruptions, bw = "sj")
loc.max <- d$x[localMaxima(d$y)]
ggplot(faithful, aes(eruptions)) + geom_density(adjust=1/2) +
geom_vline(x=loc.max, col="red") +
xlab("Measured values")
今、私のデータはもっとうるさいです:
d <- density(my.df$Values, bw = "sj")
loc.max <- d$x[localMaxima(d$y)]
ggplot(my.df, aes(Values)) + geom_density(adjust=1/2) +
geom_vline(x=loc.max, col="red") +
xlab("Measured values")
パラメータを調整しようとしています (テールに 2 つの「不要な」ピークが見つかったことに注意してください):
d <- density(my.df$Values, bw="nrd", adjust=1.2)
loc.max <- d$x[localMaxima(d$y)]
ggplot(my.df, aes(Values)) + geom_density(adjust=1/2) +
geom_vline(x=loc.max, col="red") +
xlab("Measured values")
質問は次のとおりです。
1) そのようなノイズの多いデータセット内で実際のピークを自動的に識別する方法は? 2) これらのピークを分離するピットを確実に見つける方法は?