Ich versuche, die lokalen Maxima für eine Wahrscheinlichkeitsdichtefunktion zu finden (gefunden mit der density
Methode von R ). Ich kann keine einfache Methode zum Umsehen von Nachbarn durchführen (bei der man sich an einem Punkt umsieht, um festzustellen, ob es sich um ein lokales Maximum in Bezug auf die Nachbarn handelt), da es eine große Datenmenge gibt. Darüber hinaus scheint es effizienter und allgemeiner zu sein, so etwas wie Spline-Interpolation zu verwenden und dann die Wurzeln der 1. Ableitung zu finden, anstatt einen "Blick um die Nachbarn" mit Fehlertoleranz und anderen Parametern zu erstellen.
Also meine Fragen:
- Ausgehend von einer Funktion von
splinefun
, welche Methoden finden die lokalen Maxima? - Gibt es eine einfache / standardmäßige Möglichkeit, Ableitungen einer mit zurückgegebenen Funktion zu finden
splinefun
? - Gibt es einen besseren / standardmäßigen Weg, um die lokalen Maxima einer Wahrscheinlichkeitsdichtefunktion zu finden?
Als Referenz ist unten eine grafische Darstellung meiner Dichtefunktion. Andere Dichtefunktionen, mit denen ich arbeite, sind in der Form ähnlich. Ich sollte sagen, dass ich neu in R bin, aber nicht neu in der Programmierung. Es kann also eine Standardbibliothek oder ein Standardpaket geben, um das zu erreichen, was ich brauche.
Danke für Ihre Hilfe!!
density()
schätzt nicht die Dichte für jedes Datum, sondern die Dichte bei n Werten, wobei n ein benutzerdefinierter Parameter mit dem Standardwert n = 512 ist.msExtrema {msProcess}
) ähnelt, und konnte nur einige der Maxima identifizieren, niemals alle, indem ich mit den Toleranzeinstellungen spielte.msExtrema
ansehen, handelt es sich um einen einfachen Wrapper fürpeaks
dassplus2R
Paket, den Sie besser direkt verwenden sollten, wenn Sie nur die lokalen Maxima und nicht die lokalen Minima möchten. Ich kann nicht erkennen, warum bei Verwendung der Standardeinstellungspan=3
nicht alle lokalen Maxima gefunden wurden. Und 2 ^ 15 = 32768 sollte nicht groß genug sein, damit die Effizienz ein großes Problem darstellt.peaks
scheint fehlerhaft zu sein: Es ruftmax.col
mit der Standardeinstellung von aufties.method = "random"
, die nicht nur willkürliche Bindungen aufbricht, sondern auch eine relative Toleranz von 1e-5 für das Deklarieren einer Bindung festlegt. Ersteres ist verwirrend, letzteres ist definitiv nicht das, was Sie hier wollen.peaks()
Außerdem wird einstrict
Parameter verwendet, der schlecht dokumentiert ist und im Code der Funktion nichts bewirkt. Ah, die Freuden benutzergestützter Softwarebibliotheken! Möglicherweise können Sie dasAntworten:
Was Sie tun möchten, heißt Peak-Detektion in der Chemometrie. Hierfür stehen verschiedene Methoden zur Verfügung. Ich zeige hier nur einen sehr einfachen Ansatz.
quelle