Sto cercando di trovare i massimi locali per una funzione di densità di probabilità (trovata usando il density
metodo di R ). Non posso fare un semplice metodo di "guardarsi intorno" (in cui uno si guarda attorno ad un punto per vedere se è un massimo locale rispetto ai suoi vicini) in quanto vi è un grande volume di dati. Inoltre, sembra più efficiente e generico usare qualcosa come l'interpolazione Spline e quindi trovare le radici del primo derivato, invece di costruire uno "sguardo intorno ai vicini" con tolleranza agli errori e altri parametri.
Quindi, le mie domande:
- Data una funzione da
splinefun
, quali metodi troveranno i massimi locali? - Esiste un modo semplice / standard per trovare le derivate di una funzione restituita usando
splinefun
? - Esiste un modo migliore / standard per trovare i massimi locali di una funzione di densità di probabilità?
Per riferimento, di seguito è riportato un diagramma della mia funzione di densità. Altre funzioni di densità con cui sto lavorando hanno una forma simile. Dovrei dire che sono nuovo di R, ma non nuovo di programmazione, quindi potrebbe esserci una libreria o un pacchetto standard per ottenere ciò di cui ho bisogno.
Grazie per l'aiuto!!
msExtrema {msProcess}
) e sono stato in grado di identificare solo alcuni dei massimi, mai tutti, giocando con le impostazioni di tolleranza.
msExtrema
, è un semplice wrapper per peaks
il splus2R
pacchetto, che sarebbe meglio usare direttamente se si desidera solo i massimi locali e non i minimi locali. Non riesco a capire perché l'utilizzo del valore predefinito span=3
non trovi tutti i massimi locali. E 2 ^ 15 = 32768 non dovrebbe essere abbastanza grande perché l'efficienza sia una grande preoccupazione.
peaks
sembra essere difettoso: chiama max.col
con l'impostazione predefinita di ties.method = "random"
, che non solo rompe i legami a caso, ma imposta anche una tolleranza relativa di 1e-5 per dichiarare un pareggio. Il primo è confuso, il secondo non è sicuramente quello che vuoi qui. peaks()
accetta anche un strict
parametro che è scarsamente documentato e, guardando il codice della funzione, non fa nulla. Ah, le gioie delle librerie software fornite dagli utenti! Potresti essere in grado di risolverlo però, poiché dici che non sei nuovo nella programmazione,
density()
non stima la densità per ogni dato, stima la densità a n valori, dove n è un parametro specificato dall'utente con valore predefinito n = 512.