Aide à l'utilisation de JSL pour extraire les paramètres d'ajustement de la plateforme Fit CurveJe suis relativement novice en programmation JSL et j'ai des difficultés à automatiser un flux de travail utilisant la plateforme Fit Curve. Voici ce que j'essaie d'automatiser :
Étape 1 : Ajuster le modèle exponentiel 2P aux données en fournissant les données X, Y et BY. Le code du script ci-dessous fonctionne correctement.
Étape 2 : Collecter les paramètres d’ajustement : échelle et taux de croissance ( idéalement « a » et « b » ) pour chaque identifiant d’échantillon et créer un nouveau tableau comportant les colonnes suivantes : « Identifiant de l’échantillon », « Échelle » ou « a », « Taux de croissance » ou « b », « Nombre de points de données » (utilisés pour l’ajustement).
- C'est là que je rencontre des difficultés : je peux créer un nouveau tableau avec les en-têtes appropriés (voir le script ci-dessous), mais je n'arrive pas à interagir avec le rapport « Courbe d'ajustement » pour extraire les valeurs d'ajustement de chaque identifiant d'échantillon et les utiliser ensuite pour remplir une ligne par identifiant. J'ai essayé l'assistant JMP et Claude pour m'aider à coder cela, mais ils ont tous deux eu du mal à extraire ces informations du rapport.
Étape 3 : Dans ce nouveau tableau, ajoutez deux colonnes supplémentaires : « Prédiction à TOS = 60 » et « Incertitude de la prédiction » et utilisez la formule exponentielle 2P (y = a * exp(b * x)) pour la prédiction et utilisez l'erreur d'ajustement des paramètres pour estimer l'incertitude de la valeur à TOS = 60.
Merci d'avance pour votre aide.
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 ),
Automatisation et scriptageRe: Aide pour extraire les paramètres d'ajustement de la plateforme Fit Curve à l'aide de JSLFaites un clic droit sur l'un des tableaux de résultats et transformez-le en tableau de données combiné.

À partir du tableau obtenu, vous pouvez utiliser le script « Créer un tableau de données combinées ». Cela vous donnera une bonne idée des possibilités offertes.
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;

À partir du tableau, vous pouvez ensuite utiliser différentes fonctions (telles que le résumé, la division et la mise à jour) pour créer votre tableau final.


Re: Aide pour extraire les paramètres d'ajustement de la plateforme Fit Curve à l'aide de JSLMerci pour votre réponse. J'avais envisagé cette solution, mais je supposais qu'il était possible d'extraire directement les variables de chaque table plutôt que de devoir importer la table entière et la reformater ensuite. J'apprécie beaucoup votre explication claire.
Re: Aide pour extraire les paramètres d'ajustement de la plateforme Fit Curve à l'aide de JSLVous pouvez le faire, mais il est généralement plus facile de commencer par le convertir en tableau et de continuer à partir de là.
Re: Aide pour extraire les paramètres d'ajustement de la plateforme Fit Curve à l'aide de JSLVoici une autre approche utilisant XPath pour parcourir la structure du rapport. Je ne prétends pas qu'elle soit plus simple, mais je la trouve plus robuste et elle signale clairement les erreurs inattendues, comme le fait que la troisième table ne soit plus la troisième, plutôt que de simplement renvoyer une valeur incorrecte. C'est particulièrement vrai si l'on ajoute des vérifications et que l'on génère des erreurs en cas de valeurs inattendues. Je pense que cette méthode devrait être plus simple, et je me permets donc de suggérer qu'il serait utile de créer des wrappers pour faciliter l'obtention des résultats des rapports via 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"] );