Ayuda para usar JSL para extraer parámetros de ajuste de la plataforma Fit Curve.Soy bastante nuevo en la programación JSL y he tenido dificultades para automatizar un flujo de trabajo que involucra la plataforma Fit Curve. Esto es lo que estoy intentando automatizar:
Paso 1: Ajuste el modelo exponencial 2P de curva a los datos proporcionando los datos X, Y y BY. El código del script que se muestra a continuación funciona correctamente.
Paso 2: Recopile los parámetros de ajuste: Escala y Tasa de crecimiento ( ojalá fueran solo "a" y "b" ) para cada ID de muestra y cree una nueva tabla que tenga las columnas: "ID de muestra", "Escala" o "a", "Tasa de crecimiento" o "b", "Número de puntos de datos" (utilizado en el ajuste).
- Aquí es donde tengo dificultades. Puedo crear una tabla nueva con los encabezados adecuados (ver el script a continuación), pero no logro encontrar la manera de comunicarme con el informe de la curva de ajuste para extraer los valores de los ajustes para cada ID de muestra y luego usarlos para completar una fila para cada ID de muestra. He intentado usar el asistente de JMP y a Claude para que me ayuden a programar esto, pero ambos tuvieron problemas para extraer esta información del informe.
Paso 3: En esta nueva tabla, agregue dos columnas más: "Predicción en TOS = 60" e "Incertidumbre de la predicción" y utilice la fórmula exponencial 2P (y = a * exp(b * x)) para la predicción y utilice el error de ajuste en los parámetros para estimar la incertidumbre del valor en TOS = 60.
Gracias por cualquier ayuda,
Dave
New Column( "Conversion at 60 hr", Numeric, Continuous ),
New Column( "Error of Estimate", Numeric, Continuous )
);Fit Curve(
Y( :Conversion ),
X( :TOS ),
Fit Exponential 2P,
By( :Sample ID )
);<BR />results_dt = New Table( "Exponential Fit Results",<BR />Add Rows( 0 ),<BR />New Column( "Sample ID" ),<BR />New Column( "a", Numeric, Continuous ),<BR />New Column( "b", Numeric, Continuous ),<BR /><CODE class="language-jsl">New Column( "Number of Points", Numeric, Continuous ),
Automatización y secuencias de comandosRe: Ayuda para usar JSL para extraer parámetros de ajuste de la plataforma Fit CurveHaz clic con el botón derecho en una de las tablas de resultados y conviértela en una tabla de datos combinada.

Y a partir de la tabla resultante, puede tomar el script de tabla "Crear tabla de datos combinada". Esto da una idea bastante buena de lo que puede hacer.
Names Default To Here(1);
rpt = New Window("Bioassay - Fit Curve of Toxicity by log Conc",
Data Table("Bioassay") << Fit Curve(
Y(:Toxicity),
X(:log Conc),
Fit Exponential 2P,
By(:Formulation)
)
);
Wait(0);
rpt["Fit Curve", "Formulation=standard", "Exponential 2P", "Parameter Estimates",
Table Box(1)] << Make Combined Data Table;
rpt << Close Window;

A partir de la tabla, puede utilizar diferentes plataformas de tablas (como resumen, división y actualización) para crear su tabla final.


Re: Ayuda para usar JSL para extraer parámetros de ajuste de la plataforma Fit CurveGracias por la respuesta. Estaba considerando esta opción, pero supuse que existía una manera de extraer directamente las variables de cada tabla en lugar de obtener la tabla completa y luego reformatearla según mis necesidades. Agradezco mucho la descripción tan clara.
Re: Ayuda para usar JSL para extraer parámetros de ajuste de la plataforma Fit CurvePuedes hacerlo, pero normalmente es más fácil convertirlo primero en una tabla y partir de ahí.
Re: Ayuda para usar JSL para extraer parámetros de ajuste de la plataforma Fit CurveAquí hay otro enfoque que utiliza XPath para buscar en la estructura del informe. No diré que es más fácil, pero he descubierto que es más robusto y falla estrepitosamente si ocurre algo inesperado, como que la tercera tabla ya no sea la tercera tabla, en lugar de simplemente devolver un valor incorrecto, especialmente si se implementan algunas comprobaciones y se generan errores si aparecen valores inesperados. Creo que esto debería ser más fácil, así que sin pudor alguna, promoveré mi propio deseo de crear al menos adaptadores para esto: Facilitar la obtención de resultados de informes a través de JSL.
Names Default To Here( 1 );
// Example fit
dt = Open( "$SAMPLE_DATA/Nonlinear Examples/Bioassay.jmp" );
curves = dt << Fit Curve(
Y( :Toxicity ),
X( :log Conc ),
Fit Exponential 2P,
By( :Formulation )
);
// Run this to inspect the report's XML structure — it's the key to
// writing the XPath expressions below. Combine with web searches on
// XPath syntax (//, ancestor::, parent::, text(), etc.) as needed.
curves << Get XML;
// Find the right fit by matching the outline box heading — return the first match
curve = filter each( {c}, curves, length( c << XPath( "/OutlineBox[text()='Formulation=standard']" ) ) > 0 )[1];
// Find columns labeled 'Parameter' inside an outline box called 'Parameter Estimates'
// inside a box called 'Exponential 2P', then find the grandparent TableBox and return
// the first one (there should only be one — you can verify with
// if( N Items( ... ) > 1, throw( ... ) )
// Single XPath split across lines for readability; the || concatenates the fragments.
paramTableRef = (curve << XPath(
"//OutlineBox[text()='Exponential 2P']"
|| "//OutlineBox[text()='Parameter Estimates']"
|| "//StringColBoxHeader[text()='Parameter']"
|| "//ancestor::TableBox"
))[1];
// Alternative approach: you could grab the whole table as a list and parse it directly:
paramTableList = paramTableRef << Get;
Show( paramTableList );
// Sticking with XPath for now: find that StringColBoxHeader again, find its parent, and get
// the parameter names (again, assumes there is only one matching column).
paramNames = (paramTableRef << XPath( "//StringColBoxHeader[text()='Parameter']//parent::StringColBox" ))[1] << Get;
// Now get the estimates
paramEstimates = (paramTableRef << XPath( "//NumberColBoxHeader[text()='Estimate']//parent::NumberColBox" ))[1] << Get;
// Put them in an associative array
arrParamEstimates = Associative Array( paramNames, paramEstimates );
// And now you have the values keyed by parameter name
Show( arrParamEstimates["Growth Rate"], arrParamEstimates["Scale"] );