Trapezregel?
Names default to here(1);
dt = current data table();
x_col = Column(dt, "Time (Week)");
y_col = Column(dt, "Y");
by_col = Column(dt, "Curve");
auc = function({x_col, y_col, by_col},
{DEFAULT LOCAL},
Summarize(dt, by_values=By(by_col));
areas = [=>];
for(i=1, i<=nitems(by_values), i++,
by_value = by_values[i];
rows = dt << Get Rows Where(by_col[]==by_value); // get he rows for the curve
x_values = x_col[rows];
r = rank(x_values); // make sure it's ordered right
x_values = x_values[r];
y_values = y_col[rows][r];
n = nitems(x_values);
//trapezoid rule
x_1 = x_values[1::n-1];
x_2 = x_values[2::n];
y_1 = y_values[1::n-1];
y_2 = y_values[2::n];
x_intervals = abs(x_2 - x_1);
y_avg = (y_2 + y_1)/2;
area = sum(x_intervals :*</img> y_avg);
areas[by_value] = area
);
return(areas);
);
areas = auc(x_col, y_col, by_col);
show(areas); // areas = ["A" => 10.5, "B" => -7.5, "C" => -16.5, "D" => 6, "E" => 24];
Außerdem ist das, was Sie tun, kein Polygon (falls Sie dies an anderer Stelle für ähnliche Dinge verwenden).Die Fläche eines Polygons kann niemals negativ sein, sonst würde sie nicht existieren.
Das Beispiel im Scripting-Index zeigt Ihnen, was es tut.
Names Default To Here( 1 );
area = Polygon Area( {0, 0}, {0, 10}, {10, 10}, {10, 0} );
Es schließt die Schleife (in diesem Fall ein Quadrat) zwischen {10, 0} und {0, 0}.Die Polygonfläche ist also 100.Es spielt keine Rolle, wo Sie das in der x/y-Ebene platzieren.Die Fläche eines 10x10 Quadrats sollte 100 sein.
Names Default To Here( 1 );
area = Polygon Area( {-100, -100}, {-100, -90}, {-90, -90}, {-90, -100} );
show(area); //100Hallo JMP-Community,
Ich muss die vorzeichenbehaftete Fläche unter der Kurve für einfache Zeitreihendaten berechnen (siehe Scheindaten unten).

Konkret muss ich die Fläche (wie in den Grafiken oben gezeigt) über Null als positiv und unter Null als negativ berechnen, einschließlich der lokalen Verschiebung von positiv nach negativ und umgekehrt.
Beispiele:
- AUC für Kurve A = Positiver Bereich 1 + Negativer Bereich 2 + Positiver Bereich 3
- AUC für Kurve C = Positiver Bereich 1 + Negativer Bereich 2
- AUC für Kurve E = Positiver Bereich 1
Die Funktion Polygon Area() scheint die komplexeren Zeitreihen möglicherweise aufgrund der sich kreuzenden Segmente nicht korrekt zu verarbeiten. Außerdem gibt diese Funktion nicht den vorzeichenbehafteten Wert für den Bereich zurück. Kennen Sie ein Add-In oder eine Funktion, mit der ich mein Ziel erreichen könnte?
Danke schön.
Am besten,
TS