台形の法則?
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];
また、あなたがしていることは多角形ではありません(これを他の場所で同様の目的で使用している場合)。多角形の面積が負になることはありません。さもなければ存在しません。
スクリプト インデックスの例は、その実行内容を示しています。
Names Default To Here( 1 );
area = Polygon Area( {0, 0}, {0, 10}, {10, 10}, {10, 0} );
{10, 0} と {0, 0} の間のループ (この場合は正方形) を閉じます。したがって、ポリゴンの面積は 100 です。x/y 平面のどこに配置しても問題ありません。10x10 の正方形の面積は 100 になるはずです。
Names Default To Here( 1 );
area = Polygon Area( {-100, -100}, {-100, -90}, {-90, -90}, {-90, -100} );
show(area); //100こんにちは、JMP コミュニティです。
単純な時系列データの曲線下の符号付き面積を計算する必要があります (以下の模擬データを参照)。

具体的には、(上のグラフに示すように) ゼロより上の領域を正として計算し、ゼロより下の領域を負として計算する必要があります。これには、正から負への局所的なシフトや相互のシフトも含まれます。
例:
- 曲線 A の AUC = 正の領域 1 + 負の領域 2 + 正の領域 3
- 曲線 C の AUC = 正の領域 1 + 負の領域 2
- 曲線 E の AUC = 正の領域 1
Polygon Area () 関数は、セグメントが交差しているため、より複雑な時系列を正しく処理していないようです。 また、この関数は領域の符号付き値を返しません。 私の目標を達成するために使用できるアドインまたは関数をご存知ですか?
ありがとう。
一番、
TS