Actualmente estoy realizando una prueba de longevidad con cuatro unidades que responden a una aplicación de gas periódica (¡aunque los intervalos entre las aplicaciones de gas no son constantes!). He representado los datos en el gráfico siguiente:

¿Alguien sabe de alguna manera en la que pueda filtrar las lecturas máximas para poder mostrar una línea de tendencia y continuar con el análisis? La mayoría de los puntos de datos se acercan a las lecturas mínimas de cada unidad, por lo tanto, cualquier línea de ajuste para el conjunto de datos aparece justo en la parte inferior del gráfico:

Puedo hacerlo manualmente, pero como es necesario repetirlo durante toda la prueba, puede resultar bastante tedioso. ¡Gracias de antemano!
¿Qué líneas de tendencia esperas detectar? Obviamente, hay mucho ruido en los datos, pero puedo ver algunas áreas "en el ruido" que se asemejan a una línea de tendencia. Si solo quieres extraer el valor máximo (es decir, la línea superior), ¿podrías extraer el valor máximo por vez? Otra opción podría ser observar un promedio móvil ( https://community.jmp.com/t5/Discussions/Moving-Average/td-p/87647 )
Hola Ben, los puntos que busco son los que se encuentran cerca de la parte superior de cada gráfico. Busco obtener la respuesta máxima de cada unidad a medida que se aplica el gas para poder modelar la degradación a lo largo del tiempo. Lo ideal sería que se viera así:

¡Eso podría funcionar! ¿Existe una manera sencilla de " extraer el valor máximo por tiempo" en una columna de fórmula?
Hola @AvgLlama27 ,
¿Podrías proporcionarnos un ejemplo de tu conjunto de datos para analizarlo?
Gracias,
Ben
Hola @Ben_BarrIngh
He adjuntado el conjunto de datos a la publicación original.
Gracias,
Cameron
Hola @AvgLlama27 ,
Obtuve buenos resultados con el script adjunto. No creo que puedas hacer esto fácilmente con una columna de fórmula. El script que se muestra a continuación funciona de la siguiente manera:
1) Tomar 'porciones' de un ancho determinado (número de filas) por número de serie: en el ejemplo siguiente, se toman muestras de 600 filas.
2) Encuentra el valor máximo para esa 'porción'
3) Almacene el valor máximo junto con el primer y el último valor de 'tiempo transcurrido' y 'sello de tiempo' para la primera y la última fila.
Tendrás que adaptar la variable 'windowsize' y hacer pruebas hasta encontrar un buen ajuste, pero un intento rápido con 600 filas funcionó bien.
Antes

Después

Salud,
Ben
// 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;
Eso funciona perfectamente,
Gracias por tu ayuda @Ben_BarrIngh