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!!
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ür peaks
das splus2R
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 Standardeinstellung span=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 ruft max.col
mit der Standardeinstellung von auf ties.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 ein strict
Parameter verwendet, der schlecht dokumentiert ist und im Code der Funktion nichts bewirkt. Ah, die Freuden benutzergestützter Softwarebibliotheken! Möglicherweise können Sie das
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.