Ho una serie di dati (10.000 - 50.000 valori per ciascuna serie di misurazioni) e sono interessato a identificare automaticamente i massimi/minimi locali al di fuori della stima della densità della distribuzione di questi valori. In realtà, presumo che di solito ci dovrebbero essere due picchi, separati da un pozzo, e mi piacerebbe trovare quella fossa che separa i due picchi l'uno dall'altro al fine di dividere i dati in due parti per un'ulteriore elaborazione. Se possibile, mi piacerebbe anche sapere dove si trovano i picchi.Ricerca di massimi/minimi locali in R
Poiché la stima della densità può contenere modifiche locali molto piccole, mi piacerebbe avere la possibilità di regolare la "sensibilità". Il migliore che ho trovato finora è stato questa soluzione di @Tommy: https://stackoverflow.com/a/6836924/1003358 Ecco un esempio:
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")
Ora, i miei dati sono molto più rumoroso:
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")
Cercando di regolare i parametri (notare che sono stati rilevati due "indesiderati" picchi nella coda):
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")
Quindi le domande sono:
1) Come identificare automaticamente i picchi reali all'interno di un set di dati come ad rumoroso? 2) Come trovare in modo affidabile i box che separano tali picchi?
Come definite "vette reali"? –
@SvenHohenstein Questa è una buona domanda. Sto avendo difficoltà a cogliere matematicamente questo concetto. Ci dovrebbe essere una finestra particolare intorno al picco all'interno del quale questo picco è il più grande valore. Inoltre, potrebbe essere utile un cut-off per la dimensione minima del picco (forse in relazione alla mediana). Se so che i miei dati sono bimodali, i due picchi più alti con una ragionevole finestra (lo ammetto, è ancora una volta vaga) dovrebbero risultare grandi. Se non conosco il numero di picchi in anticipo, forse un cut-off per il massimo. valore di una fossa che separa i picchi insieme ad un cut-off per il min. il valore di un picco aiuterebbe? – AnjaM
L'analisi dei dati spettrali (cromatografici o fotometrici) presenta spesso questo problema, pertanto è possibile vedere se includere "spettrale *" nelle ricerche per l'identificazione del picco. @cbeleites è sia un partecipante SO che è coinvolto nello sviluppo di pacchetti R attivi lungo queste linee. –