Suche nach einer Formel um den "Kniepunkt" in meinen Daten zu findenHallo JMP-Freunde,
(Auf regulärem JMP 18.0.1, Beispieldaten angehängt)
Ich analysiere einige Daten, wobei ich den Zeitpunkt (x-Punkt) ermitteln muss, an dem meine Daten einen „Knick“ oder eine Biegung aufweisen. Ich habe einen anfänglichen Mini-Peak in meinen Daten und habe diese Arbeit manuell durchgeführt. Dies ist jedoch langsam und ich möchte es automatisieren, da ich dies für Hunderte von Tests tun werde, die Diagramme ähnlich dem folgenden zurückgeben, mit unterschiedlichen Spitzenzeiten/-mengen und unterschiedlichen „flachen“ Zeiten. Die „flachen“ Zeiten sind im Allgemeinen nicht sehr flach, sondern nehmen sehr allmählich ab. Sie können im beigefügten Bild des Diagramms (Beispiel/Dummy-Daten) sehen, welchen Punkt/Bereich ich finden möchte.
Jede Hilfe, die ich tun könnte, wäre wirklich hilfreich. Ich denke, das Einrichten einer Flaggenspalte wäre eine gute Möglichkeit, dies herauszufinden, bin mir aber nicht sicher, welche JSL oder Formel ich verwenden kann, damit die Flagge funktioniert.
Jede Hilfe, um das herauszufinden, wäre großartig, danke!

Automatisierung und SkriptingGrundlegende Datenanalyse und ModellierungDatenexploration und -visualisierungWindowsBetreff: Suche nach einer Formel, um den „Kniepunkt“ in meinen Daten zu findenIch habe versucht, den Ellbogen als Datenpunkt zu finden, bei dem die nächsten 10 Datenpunkte alle größer sind als der vorherige Datenpunkt. Das ist absolut ein erfundener Algorithmus. Aber es sieht so aus, als ob es eine mögliche Methode wäre, den Ellbogen zu identifizieren.


Hier ist die Formel, die ich für die Spalte mit dem Namen „Elbow“ erstellt habe.
As Constant(
flag = 0;
lookAhead = 10;
);
val = .;
If( flag == 0 & Row() < N Rows( Current Data Table() ) - lookAhead,
If(
Min(
:Counts[Index( Row() + 1, Row() + lookAhead + 1 )] - :Counts[
Index( Row(), Row() + lookAhead )]
) > 0,
val = (flag = 1)
)
);
val;
Betreff: Suche nach einer Formel, um den „Kniepunkt“ in meinen Daten zu findenOk, diese Lösung ist also viel, VIEL komplizierter.
Stellen Sie sich vor, Sie würden eine Funktion an die Spitzenkurve anpassen und dann die zweite Ableitung berechnen?

Grafisch ist es einfacher zu erkennen. In der Abbildung sind die ersten Kurven die Originaldaten, ein Modell für eine Anpassung sowie die erste und zweite Ableitung der Anpassung. Es ist vielleicht nicht leicht zu erkennen, aber das Maximum der zweiten Ableitung (blaue Linie) ist die Mitte des Winkels auf der ersten Linie (Dreiecksmarkierung).
So bin ich mit JSL dorthin gekommen. (Hinweis: Ich habe den Namen der ersten Spalte geändert)
In diesem Skript überlasse ich JMP die gesamte Berechnung sowie die Kurvenanpassung.
Names Default To Here( 1 );
dt=Open( "$Examples/Example for Elbow.jmp" );
obj=dt <<FIT curve=""></FIT>
<P>Der letzte Schritt verwandelt die „Ellbogen“-Zeile in eine rote Dreiecksmarkierung. Sie können die ausgewählte Zeile aber genauso gut in eine Tabelle unterteilen und sie einer Tabelle mit all Ihren anderen Anpassungen hinzufügen. Ich habe dies nicht mit Hunderten von Tabellen ausprobiert, aber ich denke, es würde ziemlich schnell ausgeführt werden, wenn Sie es in eine Schleife einfügen, um viele Datentabellen zu durchlaufen.</P>Betreff: Suche nach einer Formel, um den „Kniepunkt“ in meinen Daten zu findenSie können sich das Spectris-Add-In ansehen. Damit können Sie sowohl den primären als auch den sekundären Peak anpassen (wahrscheinlich der Grund für die Schulter).
https://community.jmp.com/t5/JMP-Add-Ins/Spectris-Graphical-spectral-data-processing/ta-p/650521
M
Betreff: Suche nach einer Formel, um den „Kniepunkt“ in meinen Daten zu findenHallo Byron,
Danke dafür! Ich habe die 2. Ableitung einer geglätteten Funktion ausprobiert, aber es schien nicht zu funktionieren. Aber ich habe die schiefnormale Funktion noch nicht ausprobiert. Ich werde es mal versuchen und sehen, was dabei herauskommt! Ich versuche auch, einen Weg zu finden, jetzt den „Kneedle“-Algorithmus in ein Skript einzubinden, mit dem ich den „Ellbogen“-Punkt in Graphen sehr gut finden kann.
Danke!
Rochelle