Comment créer un script de courbe d'étalonnageSalut, mon niveau de script est vraiment basique et j'espère que vous pourrez m'aider.
Comment puis-je écrire un script pour réaliser ce qui suit ?
J'ai un tableau avec les concentrations connues des calibrateurs. Dans chaque dosage (un tableau par dosage) j'ai le signal de plusieurs inconnues ainsi que le signal pour les calibrateurs, c'est essentiellement une courbe de calibration interne pour chaque dosage.
Est-il possible de créer un script qui prend les valeurs du tableau des concentrations connues, les trace par rapport à leurs signaux pour ce dosage spécifique (tableau de dosage), puis utilise la régression linéaire pour calculer la concentration des inconnues ?
Merci d'avance pour l'aide!
Re : Comment créer un script de courbe d'étalonnageC'est parfait! Je ne peux pas te remercier assez Marc.
Re : Comment créer un script de courbe d'étalonnage
Names Default to Here( 1 );
// check for sufficient tables
n tables = N Table();
If( n tables < 2,
Throw( "Two data tables are required for this analysis" )
);
tables = List();
For( t = 1, t <= n tables, t++,
Insert Into( tables, Eval( Data Table( t ) << Get Name ) );
);
// identify the calibration and unknown data tables
dlg = New Window( "Assay Unknown Samples", << Modal,
H List Box(
lb = List Box( tables ),
Line Up Box( N Col( 2 ),
Button Box( "Calibrator Table",
sel = lb << Get Selected;
cal lb << Append( sel );
),
cal lb = List Box( {},
N Lines( 1 )
),
Button Box( "Unknown Table",
sel = lb << Get Selected;
unk lb << Append( sel );
),
unk lb = List Box( {},
N Lines( 1 )
)
)
),
H List Box(
Button Box( "OK",
cal table = cal lb << Get Items;
Show( cal table );
unk table = unk lb << Get Items;
Show( unk table );
),
Button Box( "Cancel" )
)
);
If( dlg["Button"] == -1,
Throw( "User cancelled" )
);
// unload the dialog
cal table = Data Table( cal table[1] );
unk table = Data Table( unk table[1] );
// include AU 2 values for calibrators from calibration table
combined = cal table << Join( With( unk table ),
Copy formula( 0 ),
Select With( :Sample, :Peps, :AU 1 ),
Select( :AU 2 ),
By Matching Columns( :Peps = :Peps ),
Drop Multiples( 0, 0 ),
Include Nonmatches( 0, 1 ),
Preserve Main Table Order( 0 )
);
Close( cal table, No Save );
Close( unk table, No Save );
// distinquish peps
Current Data Table( combined );
combined << New Column( "Status", "Character", "Nominal" );
For Each Row(
:Status = If( 1 <= Num( Regex( :Peps, "\w{3}(\d+)", "\1" ) ) <= 29, "Calibrator", "Unknown" );
);
// placeholders for matching information
combined
<< New Column( "Predicted AU 2", "Numeric", "Continuous" )
<< New Column( "Lower 95%", "Numeric", "Continuous" )
<< New Column( "Upper 95%", "Numeric", "Continuous" );
// handle each sample set separatelySummarize( sample = By( combined:Sample ) );
Summarize( sample list = By( combined:Sample ) );
For( s = 1, s <= N Items( sample list ), s++,
// isolate sample
combined
<< Select Where( :Sample == sample list[s] )
<< Invert Row Selection
<< Exclude;
// fit the calibration curve for this sample
dlg = combined << Fit Model(
Y( :AU 1 ),
Effects( :AU 2 ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Where( :Status == "Calibrator" )
);
fit = dlg << Run;
// access report layer
fit rep = fit << Report;
title = fit rep[OutlineBox(1)] << Get Title;
fit rep[OutlineBox(1)] << Set Title( title || ", Sample = " || sample list[s] );
// determine the assay for the unknown samples from the calibration curve
For Each Row(
If( Not( Excluded( Row State( Row() ) ) ),
fit << Inverse Prediction( Response( :AU 1[] ) );
);
);
// remove extraneous string column box that interferes with making combined data table
(fit rep << XPath( "//StringColBox[StringColBoxHeader=\!"Type of CI\!"]")) << Delete;
// extract the assays into a new data table
assays = fit rep["Inverse Prediction"][TableBox(1)] << Make Combined Data Table;
// fit << Close Window;
// prepare predicted values for join
assays
<< Delete Columns( Column( assays, 1 ) )
<< New Column( "Sample", "Character", "NominaL" )
<< New Column( "Peps", "Character", "NominaL" );
Current Data Table( combined );
r = 1;
For Each Row(
If( Not( Excluded( Row State( Row() ) ) ),
assays:Sample[r] = combined:Sample;
assays:Peps[r] = combined:Peps;
r++;
);
);
combined << Clear Row States;
combined << Update(
With( assays ),
Match Columns(
:Sample = :Sample,
:Peps = :Peps
)
);
Close( assays, No Save );
);
Re : Comment créer un script de courbe d'étalonnageC'est la dernière demande, promis !
Comment dois-je réécrire cette partie pour que le script soit un peu plus générique et puisse être appliqué à n'importe quel ensemble d'échantillons, quels que soient leurs noms ? Par exemple, au lieu d'écrire :
échantillon = Liste( "001-AAA", "002-AAA", "003-AAA", "004-AAA");
pouvons-nous coder pour faire un résumé de la colonne Sample et récupérer ces entrées pour créer la liste ?
Ce serait également formidable s'il était possible de tracer les courbes d'étalonnage avec la fonction bivariée et de les faire apparaître à la fin afin que nous puissions avoir un visuel de l'ajustement qui a été effectué.
Re : Comment créer un script de courbe d'étalonnageParfait!
Merci pour tout Marc !
Re : Comment créer un script de courbe d'étalonnageL'index n'est désormais utilisé que pour le nombre d'itérations. Les étiquettes d'échantillon spécifiques seraient capturées dans une liste avant l'itération.
// handle each sample set separately
sample = List( "001-AAA", "002-AAA", "003-AAA" );
For( s = 1, s <= 3, s++,
// isolate sample
combined
<< Select Where( :Sample == sample[s] )
<< Invert Row Selection
<< Exclude;
Re : Comment créer un script de courbe d'étalonnageJe pense que vous m'avez mal compris. Par doutes, je voulais dire que je ne comprenais pas la fonction du code. Je m'y connais très peu en codage et je n'oserais pas douter de votre code !J'essaie juste de comprendre et d'apprendre de vous.
Je pense avoir compris le premier exemple.
Dans le deuxième exemple, si au lieu de chiffres, les échantillons ont également une désignation textuelle, comment le code serait-il modifié ? Par exemple, au lieu des échantillons 1, 2 et 3, nous avons les échantillons 001-AAA, 002-AAA et 003-AAA ?
Re : Comment créer un script de courbe d'étalonnageVous doutez de mon code ? Eh bien, c'est votre prérogative.
Le premier exemple remplit une nouvelle colonne sans utiliser de propriété de formule de colonne.
For Each Row(
:Status = If( 1 <= Num( Regex( :Peps, "\w{3}(\d+)", "\1" ) ) <= 29, "Calibrator", "Unknown" );
);
Le Pour chaque ligne() La fonction itère sur les lignes de la table de données actuelle. Il gère automatiquement l'indexation des lignes. Ainsi, l'affectation se produit ligne par ligne. Le côté droit du devoir est le Si() fonction. Le premier argument est interprété comme une expression booléenne. Si cette expression a la valeur true, le deuxième argument ("Calibrator") est évalué et renvoyé. Sinon, le troisième argument ("Unknown") est évalué et renvoyé. Le premier argument détermine si le nombre de Peps est compris entre 1 et 29. La chaîne numérique est extraite avec une expression régulière et convertie en nombre. L'expression régulière correspond à un modèle de trois caractères de mot suivis d'un ou plusieurs caractères numériques. La référence arrière renvoie le seul groupe de capture.
Le deuxième exemple itère sur les trois échantillons de l'ensemble de données.
For( s = 1, s <= 3, s++,
// isolate sample
ss = Char( s );
combined
<< Select Where( :Sample == ss )
<< Invert Row Selection
<< Exclude;
Il utilise un index entier qui est converti en une chaîne de caractères pour correspondre à l'attribut de la colonne de données. Il envoie une cascade de messages à la table de données combinées pour (1) sélectionner toutes les lignes de l'échantillon actuel, (2) modifier la sélection pour toutes les lignes qui ne sont pas pour l'échantillon actuel et (3) exclure ces lignes. Cette approche est généralement plus simple et plus rapide que de créer des sous-ensembles de tables de données et de joindre et concaténer ultérieurement les tables de données avec les résultats.
Re : Comment créer un script de courbe d'étalonnageCela fonctionne parfaitement ! Merci.
Je pense comprendre ce que fait chaque ligne de code. J'ai quelques doutes sur ceux-ci :
<SPAN class="token function">For Each Row</SPAN><SPAN class="token punctuation">(</SPAN>
<SPAN class="token punctuation">:</SPAN>Status <SPAN class="token operator">=</SPAN> <SPAN class="token function">If</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token number">1</SPAN> <SPAN class="token operator"><=</SPAN> <SPAN class="token function">Num</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token function">Regex</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Peps<SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"\w{3}(\d+)"</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"\1"</SPAN> <SPAN class="token punctuation">)</SPAN> <SPAN class="token punctuation">)</SPAN> <SPAN class="token operator"><=</SPAN> <SPAN class="token number">29</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"Calibrator"</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"Unknown"</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN><SPAN class="token function">For</SPAN><SPAN class="token punctuation">(</SPAN> s <SPAN class="token operator">=</SPAN> <SPAN class="token number">1</SPAN><SPAN class="token punctuation">,</SPAN> s <SPAN class="token operator"><=</SPAN> <SPAN class="token number">3</SPAN><SPAN class="token punctuation">,</SPAN> s<SPAN class="token operator">++</SPAN><SPAN class="token punctuation">,</SPAN>
<SPAN class="token comment">// isolate sample</SPAN>
ss <SPAN class="token operator">=</SPAN> <SPAN class="token function">Char</SPAN><SPAN class="token punctuation">(</SPAN> s <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
combined
<SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Select Where</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Sample <SPAN class="token operator">==</SPAN> ss <SPAN class="token punctuation">)</SPAN>
<SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Invert Row Selection
</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Exclude</SPAN><SPAN class="token punctuation">;</SPAN>
Pourriez-vous me les expliquer, s'il vous plaît ?
Re : Comment créer un script de courbe d'étalonnageNames Default to Here( 1 );
// check for sufficient tables
n tables = N Table();
If( n tables < 2,
Throw( "Two data tables are required for this analysis" )
);
tables = List();
For( t = 1, t <= n tables, t++,
Insert Into( tables, Eval( Data Table( t ) << Get Name ) );
);
// identify the calibration and unknown data tables
dlg = New Window( "Assay Unknown Samples", << Modal,
H List Box(
lb = List Box( tables ),
Line Up Box( N Col( 2 ),
Button Box( "Calibrator Table",
sel = lb << Get Selected;
cal lb << Append( sel );
),
cal lb = List Box( {},
N Lines( 1 )
),
Button Box( "Unknown Table",
sel = lb << Get Selected;
unk lb << Append( sel );
),
unk lb = List Box( {},
N Lines( 1 )
)
)
),
H List Box(
Button Box( "OK",
cal table = cal lb << Get Items;
Show( cal table );
unk table = unk lb << Get Items;
Show( unk table );
),
Button Box( "Cancel" )
)
);
If( dlg["Button"] == -1,
Throw( "User cancelled" )
);
// unload the dialog
cal table = Data Table( cal table[1] );
unk table = Data Table( unk table[1] );
// include AU 2 values for calibrators from calibration table
combined = cal table << Join( With( unk table ),
Copy formula( 0 ),
Select With( :Sample, :Peps, :AU 1 ),
Select( :AU 2 ),
By Matching Columns( :Peps = :Peps ),
Drop Multiples( 0, 0 ),
Include Nonmatches( 0, 1 ),
Preserve Main Table Order( 0 )
);
Close( cal table, No Save );
Close( unk table, No Save );
// distinquish peps
Current Data Table( combined );
combined << New Column( "Status", "Character", "Nominal" );
For Each Row(
:Status = If( 1 <= Num( Regex( :Peps, "\w{3}(\d+)", "\1" ) ) <= 29, "Calibrator", "Unknown" );
);
// placeholders for matching information
combined
<< New Column( "Predicted AU 2", "Numeric", "Continuous" )
<< New Column( "Lower 95%", "Numeric", "Continuous" )
<< New Column( "Upper 95%", "Numeric", "Continuous" );
// handle each sample set separately
For( s = 1, s <= 3, s++,
// isolate sample
ss = Char( s );
combined
<< Select Where( :Sample == ss )
<< Invert Row Selection
<< Exclude;
// fit the calibration curve for this sample
dlg = combined << Fit Model(
Y( :AU 1 ),
Effects( :AU 2 ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Where( :Status == "Calibrator" )
);
fit = dlg << Run;
// determine the assay for the unknown samples from the calibration curve
For Each Row(
If( Not( Excluded( Row State( Row() ) ) ),
fit << Inverse Prediction( Response( :AU 1[] ) );
);
);
// access report layer
fit rep = fit << Report;
// remove extraneous string column box that interferes with making combined data table
(fit rep << XPath( "//StringColBox[StringColBoxHeader=\!"Type of CI\!"]")) << Delete;
// extract the assays into a new data table
assays = fit rep["Inverse Prediction"][TableBox(1)] << Make Combined Data Table;
fit << Close Window;
// prepare predicted values for join
assays
<< Delete Columns( Column( assays, 1 ) )
<< New Column( "Sample", "Character", "NominaL" )
<< New Column( "Peps", "Character", "NominaL" );
Current Data Table( combined );
r = 1;
For Each Row(
If( Not( Excluded( Row State( Row() ) ) ),
assays:Sample[r] = combined:Sample;
assays:Peps[r] = combined:Peps;
r++;
);
);
combined << Clear Row States;
combined << Update(
With( assays ),
Match Columns(
:Sample = :Sample,
:Peps = :Peps
)
);
Close( assays, No Save );
);Re : Comment créer un script de courbe d'étalonnageOui, ils ont les 29 peps comme calibrateurs internes. Ces 29 peps spécifiques doivent récupérer les valeurs AU 2 de la table d'étalonnage, puis chaque ensemble calibre les peps restants associés au numéro d'échantillon.
Je pense que j'ai rendu cela plus déroutant en demandant deux choses différentes dans le même message. Je suis désolé pour ça.
Re : Comment créer un script de courbe d'étalonnageLes trois ensembles d'échantillons doivent donc être traités séparément ?
Re : Comment créer un script de courbe d'étalonnageJe pense que j'ai parlé trop tôt. Il y a un problème, Mark. À l'heure actuelle, le script extrait toutes les valeurs AU 2 de la table calib vers la table unk pour les calibrateurs et c'est très bien. Mais ensuite, le nouveau tableau utilise tout ce qui a été attribué avec la désignation du calibrateur à utiliser dans le modèle d'ajustement et les inconnues sont prédites à partir de ce modèle (qui a les calibrateurs des échantillons 1, 2 et 3 regroupés), n'est-ce pas ?
Ce dont j'ai besoin, c'est d'un modèle d'ajustement par échantillon et que les inconnues de cet échantillon soient déterminées avec le modèle d'ajustement associé à cet échantillon uniquement.
Re : Comment créer un script de courbe d'étalonnageC'est parfait! Merci beaucoup Marc !
Re : Comment créer un script de courbe d'étalonnageD'accord, merci d'avoir précisé.
Names Default to Here( 1 );
// check for sufficient tables
n tables = N Table();
If( n tables < 2,
Throw( "Two data tables are required for this analysis" )
);
tables = List();
For( t = 1, t <= n tables, t++,
Insert Into( tables, Eval( Data Table( t ) << Get Name ) );
);
// identify the calibration and unknown data tables
dlg = New Window( "Assay Unknown Samples", << Modal,
H List Box(
lb = List Box( tables ),
Line Up Box( N Col( 2 ),
Button Box( "Calibrator Table",
sel = lb << Get Selected;
cal lb << Append( sel );
),
cal lb = List Box( {},
N Lines( 1 )
),
Button Box( "Unknown Table",
sel = lb << Get Selected;
unk lb << Append( sel );
),
unk lb = List Box( {},
N Lines( 1 )
)
)
),
H List Box(
Button Box( "OK",
cal table = cal lb << Get Items;
Show( cal table );
unk table = unk lb << Get Items;
Show( unk table );
),
Button Box( "Cancel" )
)
);
If( dlg["Button"] == -1,
Throw( "User cancelled" )
);
// unload the dialog
cal table = Data Table( cal table[1] );
unk table = Data Table( unk table[1] );
// include AU 2 values for calibrators from calibration table
combined = cal table << Join(
With( unk table ),
Copy formula( 0 ),
Select With( :Sample, :Peps, :AU 1 ),
Select( :AU 2 ),
By Matching Columns( :Peps = :Peps ),
Drop Multiples( 0, 0 ),
Include Nonmatches( 0, 1 ),
Preserve Main Table Order( 0 )
);
Close( cal table, No Save );
Close( unk table, No Save );
// distinquish peps
Current Data Table( combined );
combined << New Column( "Status", "Character", "Nominal" );
For Each Row(
:Status = If( 1 <= Num( Regex( :Peps, "\w{3}(\d+)", "\1" ) ) <= 29, "Calibrator", "Unknown" );
);
// fit the calibration curve
dlg = combined << Fit Model(
Y( :AU 1 ),
Effects( :AU 2 ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Where( :Status == "Calibrator" )
);
fit = dlg << Run;
// determine the assay for the unknown samples from the calibration curve
For Each Row(
fit << Inverse Prediction( Response( :AU 1[] ) );
);
// extract the assays into a new data table
assays = Report( fit )["Inverse Prediction"][TableBox(1)] << Make Combined Data Table;
fit << Close Window;
assays << Delete Columns( Column( assays, 1 ) );
// add the assays to the unknown table
final = combined << Join(
With( assays ),
Copy formula( 0 ),
By Matching Columns( :AU 1 = :Specified AU 1 ),
Drop Multiples( 0, 0 ),
Include Nonmatches( 1, 0 ),
Preserve Main Table Order( 1 )
);
Close( combined, No Save );
Close( assays, No Save );
final << Sort(
By( :Peps, :Sample ),
Order( Ascending, Ascending ),
Replace Table
);
Certaines des valeurs AU 2 prédites sont manquantes en raison des mesures aléatoires de AU 1.
Re : Comment créer un script de courbe d'étalonnageCela a parfaitement fonctionné. Et il fait ce pour quoi j'ai demandé de l'aide. Mais il y avait deux parties dans mon message initial. La première était de savoir comment scénariser le calibrage comme vous me l'avez montré.
Le second, qui n'est pas lié au premier, donc ce serait un script complètement différent, consiste à faire ce qui suit :
Le tableau inconnu a 3 échantillons, chaque échantillon a été analysé pour 74 Peps. 29 de ces Peps, je veux les utiliser pour l'étalonnage des 45 autres. Et je veux le faire en récupérant les valeurs AU 2 de la table d'étalonnage. Ainsi, le script doit récupérer les valeurs AU 2 de la table d'étalonnage et les joindre aux 1-29 Peps pour chaque échantillon dans la table inconnue, après quoi doit créer une courbe d'étalonnage (régression linéaire) pour chacun des échantillons et attribuer AU 2 valeurs au reste 45 Peps.
Je vous remercie de m'avoir accompagné!
Je sais que les valeurs ne sont pas corrélées, il s'agissait de valeurs générées aléatoirement dans le but d'apprendre à écrire des scripts.
Re : Comment créer un script de courbe d'étalonnageJe suis confus.
Tout d'abord, ça a marché ou pas ? Cela a-t-il fonctionné jusqu'à un certain point ?
Deuxièmement, oui, l'étalonnage est entièrement effectué avec les valeurs AU 1 et AU 2 du tableau d'étalonnage. N'est-ce pas exact?
Troisièmement, vous n'avez pas de valeurs AU 2 dans la table inconnue. Voulez-vous dire utiliser les valeurs AU 2 inconnues prédites ?
Quatrièmement, s'agit-il d'une modification de la définition de l'étalonnage ou s'agit-il d'une nouvelle exigence (étape de suivi) après la prédiction de l'UA 2 dans le tableau inconnu?
Cinquièmement, qu'est-ce que Sample ? Quel rapport avec Peps ?
Sixièmement, l'AU 1 dans le tableau des calibrateurs pour Pep1 à Pep29 ne devrait-il pas être corrélé ? Ils ne sont pas:

Il me manque probablement quelque chose de très important et de très basique.
Re : Comment créer un script de courbe d'étalonnageMerci Mark, cela a fonctionné maintenant.
D'après ce que j'ai compris, en regardant le script, c'est pour l'étalonnage simple utilisant les valeurs AU 1 et AU 2 de la table des calibrateurs, oui ?
Comment pouvons-nous le réorganiser pour que le calibrateur corresponde aux valeurs AU 1 spécifiées dans le tableau des calibrateurs par rapport aux AU 2 du tableau inconnu (ce qui en fait un calibrateur différent pour chaque échantillon), puis prédire les valeurs AU 2 pour le reste des composants dans l'échantillon ?
Re : Comment créer un script de courbe d'étalonnageC'est un problème de version. J'ai ouvert JMP 13 et (1) la fonction n'était plus mise en surbrillance en tant que telle et (2) elle ne se trouve pas dans l'index de script.
Je déteste quand cela arrive!
Essayez cette solution :
Names Default to Here( 1 );
// find all open data tables
/* for JMP 14 and later:
tables = Get Data Table List();
*/
n tables = N Table();
If( n tables < 2,
Throw( "Two data tables are required for this analysis" )
);
tables = List();
For( t = 1, t <= n tables, t++,
Insert Into( tables, Eval( Data Table( t ) << Get Name ) );
);
// present open tables for assignment as calibration or unknown.
dlg = New Window( "Assay Unknown Samples", << Modal,
H List Box(
lb = List Box( tables ),
Line Up Box( N Col( 2 ),
Button Box( "Calibrator Table",
sel = lb << Get Selected;
cal lb << Append( sel );
),
cal lb = List Box( {},
N Lines( 1 )
),
Button Box( "Unknown Table",
sel = lb << Get Selected;
unk lb << Append( sel );
),
unk lb = List Box( {},
N Lines( 1 )
)
)
),
H List Box(
Button Box( "OK",
cal table = cal lb << Get Items;
Show( cal table );
unk table = unk lb << Get Items;
Show( unk table );
),
Button Box( "Cancel" )
)
);
If( dlg["Button"] == -1,
Throw( "User cancelled" )
);
// unload dialog
cal table = Data Table( cal table[1] );
unk table = Data Table( unk table[1] );
// perform the linear calibration
dlg = cal table << Fit Model(
Y( :AU 1 ),
Effects( :AU 2 ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
fit = dlg << Run;
// perform inverse prediction on unknown
Current Data Table( unk table );
For Each Row(
fit << Inverse Prediction( Response( :AU 1[] ) );
);
// unload unknown assays
assays = Report( fit )["Inverse Prediction"][TableBox(1)] << Make Combined Data Table;
fit << Close Window;
assays << Delete Columns( Column( assays, 1 ) );
// join with unknown table
unk table << Join(
With( assays ),
By Row Number
);
Close( assays, No Save );
// plot predictions with 95% confidence intervals versus actual
unk table << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :AU 1 ),
Y( :Lower 95% ),
Y( :Upper 95%, Position( 1 ) ),
Y( :Predicted AU 2, Position( 1 ) )
),
Elements(
Bar( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 8 ), Bar Style( "Interval" ) )
),
SendToReport(
Dispatch( {}, "AU 1", ScaleBox, {Format( "Best", 12 )} ),
Dispatch( {}, "Lower 95%", ScaleBox, {Format( "Fixed Dec", 12, 0 )} )
)
);Re : Comment créer un script de courbe d'étalonnageC'est peut-être un problème de version JMP (j'ai JMP 13.1) mais le script ne fonctionne pas. J'ai utilisé le débogueur JSL et j'obtiens une erreur dès le début : Name Unresolved: Get Data Table List in access or evaluation of 'Get Data Table List' , Get Data Table List() /*###*/
Re : Comment créer un script de courbe d'étalonnageJe pense avoir compris le problème de base mais j'ai peut-être raté un détail. Essayez ce script avec les deux tables de données ouvertes (table d'étalonnage et table inconnue) :
Names Default to Here( 1 );
// find all open data tables
tables = Get Data Table List();
If( N Items( tables ) < 2,
Throw( "Two data tables are required for this analysis" )
);
dlg = New Window( "Assay Unknown Samples", << Modal,
H List Box(
lb = List Box( tables ),
Line Up Box( N Col( 2 ),
Button Box( "Calibrator Table",
sel = lb << Get Selected;
cal lb << Append( sel );
),
cal lb = List Box( {},
N Lines( 1 )
),
Button Box( "Unknown Table",
sel = lb << Get Selected;
unk lb << Append( sel );
),
unk lb = List Box( {},
N Lines( 1 )
)
)
),
H List Box(
Button Box( "OK",
cal table = cal lb << Get Items;
Show( cal table );
unk table = unk lb << Get Items;
Show( unk table );
),
Button Box( "Cancel" )
)
);
If( dlg["Button"] == -1,
Throw( "User cancelled" )
);
// unload dialog
cal table = Data Table( cal table[1] );
unk table = Data Table( unk table[1] );
// perform the linear calibration
dlg = cal table << Fit Model(
Y( :AU 1 ),
Effects( :AU 2 ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
fit = dlg << Run;
// perform inverse prediction on unknown
Current Data Table( unk table );
For Each Row(
fit << Inverse Prediction( Response( :AU 1[] ) );
);
// unload unknown assays
assays = Report( fit )["Inverse Prediction"][TableBox(1)] << Make Combined Data Table;
fit << Close Window;
assays << Delete Columns( Column( assays, 1 ) );
// join with unknown table
unk table << Join(
With( assays ),
By Row Number
);
Close( assays, No Save );
// plot predictions with 95% confidence intervals versus actual
unk table << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :AU 1 ),
Y( :Lower 95% ),
Y( :Upper 95%, Position( 1 ) ),
Y( :Predicted AU 2, Position( 1 ) )
),
Elements(
Bar( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 8 ), Bar Style( "Interval" ) )
),
SendToReport(
Dispatch( {}, "AU 1", ScaleBox, {Format( "Best", 12 )} ),
Dispatch( {}, "Lower 95%", ScaleBox, {Format( "Fixed Dec", 12, 0 )} )
)
);
Le script n'est pas flexible mais c'est un début.
Re : Comment créer un script de courbe d'étalonnageVoici deux exemples de tableaux. L'un est la table d'étalonnage. L'autre table est celle qui contient les valeurs mesurées (AU 1) et nécessite un étalonnage pour obtenir les valeurs inconnues (AU 2). Pour compliquer un peu les choses, ce tableau contient les mesures pour 3 échantillons différents et chacun de ces 3 échantillons contenait également les composants qui ont été utilisés pour fabriquer le calibrateur. Donc, dans chaque échantillon, nous avons un calibrateur interne, en quelque sorte.
Ce serait formidable de savoir comment scénariser un étalonnage qui omet complètement le fait que nous ayons un calibrateur interne (régression linéaire simple de ce qui se trouve sur le tableau du calibrateur et utilisation de l'expression pour obtenir les inconnues du tableau des échantillons). Et il serait encore mieux de savoir comment scénariser un étalonnage qui utilise les valeurs mesurées (AU 1) des composants de l'étalon dans chaque échantillon (tableau des échantillons), les trace par rapport aux valeurs connues (AU 2) dans le tableau de l'étalon et calcule les inconnues pour cet échantillon spécifique, et fait de même pour chaque échantillon présent dans le tableau des échantillons.
L'anglais n'est pas ma langue maternelle, alors faites-le moi savoir si vous avez besoin que je sois un peu plus clair.
J'espère que vous pouvez m'aider.
Acclamations.
Re : Comment créer un script de courbe d'étalonnageMerci d'avoir vérifié la méthode et le processus d'analyse. En avant pour le scénario !
Pouvez-vous fournir un échantillon de données ? Vous pouvez utiliser des noms génériques (données anonymes). De cette façon, je comprendrai ce que le script doit attendre de la table de données.
Re : Comment créer un script de courbe d'étalonnageMerci Marc.
J'ai suivi les étapes que vous mentionnez pour obtenir la prédiction inverse personnalisée. Oui, c'est une régression linéaire.
Mon problème avec cela est le nombre limité d'inconnus que je peux saisir. La question de script a été posée en gardant à l'esprit que j'ai des milliers d'inconnues et j'ai supposé que le script de la procédure me permettrait de définir des valeurs pour toutes ces inconnues.
Re : Comment créer un script de courbe d'étalonnageJe vous suggère d'abord d'apprendre à effectuer cette analyse de manière interactive à l'aide de JMP. Voir Aider > Livres > Modélisation prédictive et spécialisée > chapitre sur Ajuster la courbe . Il vous expliquera comment utiliser cette plateforme pour votre objectif. Il comprend des exemples pour vous guider et vous aider à vous exercer avant de tenter d'analyser vos propres données.
Quel modèle utilisez-vous actuellement pour votre courbe d'étalonnage ? Vous parlez de régression linéaire. Si tel est le cas, cliquez sur le triangle rouge à côté de Ajuster la courbe et sélectionnez Polynômes > Ajustement linéaire . Cliquez maintenant sur le triangle rouge à côté de Linéaire et sélectionnez Prédiction inverse personnalisée . Une boîte de dialogue apparaît dans laquelle vous pouvez saisir les réponses inconnues.
Utilisez d'abord la plate-forme Fit Curve de manière interactive pour vous assurer que cette analyse est appropriée et donne les résultats que vous recherchez. Ensuite, nous pouvons vous aider avec un script.