現在、定期的にガスを注入すると反応する 4 つのユニットで寿命テストを実行しています (ただし、ガス注入の間隔は一定ではありません)。データを以下のグラフにプロットしました。

ピークの読み取り値をフィルタリングしてトレンド ラインを表示し、さらに分析を進める方法をご存知の方はいらっしゃいますか? ほとんどのデータ ポイントは各ユニットの最小読み取り値に近づいているため、データ セットの適合ラインはグラフの一番下に表示されます。

これを手動で行うことは可能ですが、テスト全体を通じてこれを繰り返す必要があるため、かなり面倒になる可能性があります。よろしくお願いします。
どのようなトレンド ラインを抽出したいですか? データには明らかに多くのノイズがありますが、そのノイズの中にトレンド ラインに似た領域がいくつかある可能性があります。最大値 (つまり、一番上の線) だけを抽出したい場合は、時間ごとの最大値を抽出できますか? 別の方法として、移動平均 ( https://community.jmp.com/t5/Discussions/Moving-Average/td-p/87647 ) を調べることもできます。
こんにちは、ベン。私が求めているのは、各グラフの上部に近いポイントです。ガスが適用されたときに各ユニットからの最大応答を取得して、時間の経過に伴う劣化をモデル化したいと考えています。理想的には、次のようになります。

それはうまくいくかもしれません!数式列で「時間ごとの最大値を抽出する」簡単な方法はありますか?
こんにちは@AvgLlama27 さん
参照できるデータセットの例を提供していただけますか?
ありがとう、
ベン
こんにちは@AvgLlama27 さん
添付のスクリプトでうまくいきました。数式列では簡単にはできないと思います。以下のスクリプトは次のように動作します。
1) シリアル番号ごとに設定された幅(行数)の「スライス」を取得します。以下の例では、600行をサンプリングします。
2) その「スライス」の最大値を見つける
3) 最初と最後の行の最初と最後の「経過時間」と「タイムスタンプ」の値と一緒に最大値を保存します。
'windowsize' 変数を調整して、適切なサイズを見つけるためにいろいろ試してみる必要がありますが、600 行で簡単に試してみるとうまくいきました。
前に

後

乾杯、
ベン
// Get the current data table
dt = Current Data Table();
Windowsize = 600; //Set this to the 'width' you want to evaluate
// Initialize an empty table to store the results
dt_summary = New Table( "Summary Table",
New Column( "Serial No", Character ),
New Column( "Batch No", Numeric ),
New Column( "Max Value", Numeric ),
New Column( "Min Elapsed Time", Numeric ),
New Column( "Max Elapsed Time", Numeric ),
New Column( "Start Timestamp", "Numeric", "Nominal", Format("m/d/y h:m:s", 23, 0) ),
New Column( "End Timestamp", "Numeric", "Nominal", Format("m/d/y h:m:s", 23, 0) )
);
// Iterate over unique "Serial No"/identifier column
serials = Associative Array( dt:SerialNo ) << Get Keys();//removes duplicate values
//Run a loop to pull out the max row values for each 'window'
For( i = 1, i <= N Items( serials ), i++,
serial = serials[i];
// Get rows for the current Serial No
rows = dt << Get Rows Where( dt:SerialNo == serial );
// Loop through every [windowsize] rows
For( j = 1, j <= N Items( rows ), j += windowsize,
// Determine the range of rows for the current batch
batch_rows = rows[j :: Min( j + (windowsize-1), N Items( rows ) )];
// Get the max value for this batch
max_val = Max( dt:VOCVoltage[batch_rows] );
// Get the range of 'Elapsed Time'
min_elapsed_time = Min( dt:"Elapsed Time,hours"n[batch_rows] );
max_elapsed_time = Max( dt:"Elapsed Time,hours"n[batch_rows] );
// Get the start and end 'Timestamp'
start_timestamp = dt:Timestamp[batch_rows[1]];
end_timestamp = dt:Timestamp[batch_rows[N Items( batch_rows )]];
// Add a row to the summary table
dt_summary << Add Rows( 1 );
dt_summary:Serial No[N Row( dt_summary )] = serial;
dt_summary:Batch No[N Row( dt_summary )] = Ceiling( j / windowsize );
dt_summary:Max Value[N Row( dt_summary )] = max_val;
dt_summary:Min Elapsed Time[N Row( dt_summary )] = min_elapsed_time;
dt_summary:Max Elapsed Time[N Row( dt_summary )] = max_elapsed_time;
dt_summary:Start Timestamp[N Row( dt_summary )] = start_timestamp ;
dt_summary:End Timestamp[N Row( dt_summary )] = end_timestamp ;
);
);
// Show the summary table
dt_summary << Show Window;
それは完璧に機能します。
ご協力ありがとうございます@Ben_BarrIngh