9

大量のデータ (一連の測定値ごとに 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")

データセットのピークを検出する 2 回目の試行

質問は次のとおりです。

1) そのようなノイズの多いデータセット内で実際のピークを自動的に識別する方法は? 2) これらのピークを分離するピットを確実に見つける方法は?

4

1 に答える 1

1

私のお気に入りはpastecs::turnpoints。しかし、とがったノイズと真のピークを区別するために主観的なフィルタリングを行う必要があることは間違いありません。これを行う 1 つの方法は、生データまたはスプライン データのいずれかが、N 個の連続する値に対して何らかのしきい値を超えていることを要求することです。

于 2013-01-14T14:18:25.550 に答える