Hilfe bei der Verwendung von JSL zum Extrahieren von Anpassungsparametern aus der Fit Curve-PlattformIch bin noch relativ neu in der JSL-Programmierung und habe Schwierigkeiten, einen Workflow mit der Fit Curve-Plattform zu automatisieren. Folgendes möchte ich automatisieren:
Schritt 1: Passen Sie das exponentielle 2P-Kurvenmodell an die Daten an, indem Sie die X-, Y- und BY-Daten angeben. Der unten stehende Skriptcode funktioniert einwandfrei.
Schritt 2: Sammeln Sie die Anpassungsparameter: Skalierung und Wachstumsrate ( ich wünschte, es wären nur "a" und "b" ) für jede Proben-ID und erstellen Sie eine neue Tabelle mit folgenden Spalten: "Proben-ID", "Skalierung" oder "a", "Wachstumsrate" oder "b", "Anzahl der Datenpunkte" (wird für die Anpassung verwendet).
- Hier liegt mein Problem: Ich kann zwar eine neue Tabelle mit den entsprechenden Überschriften erstellen (siehe Skript unten), aber ich schaffe es nicht, mit dem Fit-Curve-Bericht zu kommunizieren, um die Werte für die Anpassungen jeder Proben-ID zu extrahieren und diese dann für jede Proben-ID in eine eigene Zeile einzufügen. Ich habe bereits versucht, den JMP-Assistenten und Claude zur Unterstützung zu verwenden, aber beide hatten Schwierigkeiten, diese Informationen aus dem Bericht zu extrahieren.
Schritt 3: Fügen Sie in dieser neuen Tabelle zwei weitere Spalten hinzu: „Vorhersage bei TOS = 60“ und „Unsicherheit der Vorhersage“. Verwenden Sie die Exponential 2P-Formel (y = a*exp(b*x)) für die Vorhersage und verwenden Sie den Anpassungsfehler der Parameter, um die Unsicherheit des Wertes bei TOS = 60 abzuschätzen.
Vielen Dank für jede Hilfe.
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 ),
Automatisierung und SkripterstellungBetreff: Hilfe bei der Verwendung von JSL zum Extrahieren von Anpassungsparametern aus der Fit Curve-PlattformKlicken Sie mit der rechten Maustaste auf eine der Ergebnistabellen und wählen Sie „In kombinierte Datentabelle umwandeln“.

Aus der resultierenden Tabelle können Sie das Tabellenskript „Kombinierte Datentabelle erstellen“ verwenden. Dies vermittelt einen guten Überblick über die Möglichkeiten.
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;

Aus der Tabelle können Sie dann verschiedene Tabellenplattformen (wie Zusammenfassung, Aufteilung und Aktualisierung) verwenden, um Ihre endgültige Tabelle zu erstellen.


Betreff: Hilfe bei der Verwendung von JSL zum Extrahieren von Anpassungsparametern aus der Fit Curve-PlattformVielen Dank für die Antwort. Ich hatte diesen Weg bereits in Erwägung gezogen, ging aber davon aus, dass es eine Möglichkeit gäbe, die Variablen direkt aus den einzelnen Tabellen zu extrahieren, anstatt die gesamte Tabelle abzurufen und sie dann für meine Zwecke neu zu formatieren. Die klare Beschreibung hat mir sehr geholfen.
Betreff: Hilfe bei der Verwendung von JSL zum Extrahieren von Anpassungsparametern aus der Fit Curve-PlattformDas ist möglich, aber normalerweise ist es einfacher, die Daten zuerst in eine Tabelle umzuwandeln und dann von dort aus weiterzuarbeiten.
Betreff: Hilfe bei der Verwendung von JSL zum Extrahieren von Anpassungsparametern aus der Fit Curve-PlattformHier ist ein weiterer Ansatz, der XPath zur Suche in der Berichtsstruktur verwendet. Ich behaupte nicht, dass dieser Ansatz einfacher ist, aber er hat sich als robuster erwiesen und gibt bei unerwarteten Ereignissen – beispielsweise wenn die dritte Tabelle nicht mehr die dritte ist – eine deutliche Fehlermeldung aus, anstatt einfach nur einen falschen Wert zurückzugeben. Dies ist besonders wichtig, wenn man Prüfungen einbaut und bei unerwarteten Werten Fehler ausgibt. Ich bin der Meinung, dass dieser Ansatz einfacher sein sollte, und möchte daher meinen Wunsch äußern, zumindest Wrapper dafür zu entwickeln: Die Abfrage von Berichtsergebnissen über JSL vereinfachen.
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"] );