Question de script pour les formules de réexécutionJ'ai posé cette question sur un post précédent, mais c'était il y a quelques semaines, donc elle ne sera peut-être pas remarquée.Je soupçonne que c'est une question de script facile pour ce groupe.Vous trouverez ci-dessous un script (donné par frank) qui exécute avec succès une simulation de Monte Carlo pour une régression pas à pas.La seule chose qu'il n'a pas fait était de recalculer un certain nombre de colonnes où j'ai des nombres aléatoires dans les formules avant de procéder à la régression pas à pas.La commande <
Ma tentative infructueuse est la ligne 19 du script.Merci.
Clear Globals();
Clear Log();
Names Default To Here( 1 );
//Define path in and out
Path_in = Pick File( "Select file" );
If( Directory Exists( "$Desktop\Fit_Stepwise" ),
,
Create Directory( "$Desktop\Fit_Stepwise" )
);
Path_out = "$Desktop\Fit_Stepwise\";
//Run Fit model and stepwise after open datatable
dt = Open( Path_in );
For( i = 1, i <= 1000, i++,
dt << Rerun Formulas;
ow = dt << Fit Model(
Y( :Y ),
Effects(
:Column 2 001,
:Column 2 002,
:Column 2 003,
:Column 2 004,
:Column 2 005,
:Column 2 006,
:Column 2 007,
:Column 2 008,
:Column 2 009,
:Column 2 010
),
Personality( "Stepwise" ),
Run,
SendToReport( Dispatch( {}, "Step History", OutlineBox, {Close( 1 )} ) )
);
dt_result = Report( ow )[Outline Box( "Stepwise Fit for Y" )][Outline Box( "Current Estimates" )][Table Box( 1 )] << Make Into Data Table;
dt_result << save( Path_out || Char( i ) || ".csv", "csv" );
ow << close window;
dt_result << Close Window;
);
dt << Close Window;
dt_result = Multiple File Import(
<<SET folder="">F\!"" ) > 0.05 ) ) << Delete Rows;
dt_result << Distribution( Stack( 1 ), Nominal Distribution( Column( :Parameter ), Horizontal Layout( 1 ), Vertical( 0 ) ) );</SET>Modélisation statistique avancéeRe : Question de script pour les formules de réexécutionMerci, c'est parfait.Et merci d'avoir été patient avec moi.De plus, l'aide sur Wait () est dans l'aide mais pas l'index de script, comme vous le dites.
Re : Question de script pour les formules de réexécutionJe ne sais pas pourquoi le script d'origine que vous aviez ne mettrait pas à jour les valeurs dans les colonnes de formules. Vous pouvez peut-être tester cela davantage en réduisant le nombre de boucles (à utiliser par exemple comme valeur maximale) et en ajoutant Wait(1); par exemple après les formules <
Voici un script légèrement modifié utilisant la table de sous-ensemble que vous avez fournie précédemment. Comme vous ne voulez pas être plus compétent avec les scripts, je n'irai pas très loin dans l'explication du fonctionnement des fonctions ici, mais voir l'explication ci-dessous et les commentaires dans le script, je peux également expliquer plus si nécessaire. Le script fourni ici devrait :
- Bouclez sur toutes les colonnes trouvées dans dt et activez leur évaluation pour permettre le recalcul sur les colonnes de formule
- Exécutez Fit Model 100 fois et recalculez les valeurs dans les colonnes de formules à chaque fois avec <
- Utilisera également Show() pour imprimer Col Median() pour une colonne à enregistrer. Cela ralentira l'exécution du script, mais devrait montrer que les valeurs de la colonne changent
- Créez un tableau de résultats avec les résultats et fermez tous les tableaux et fenêtres inutiles
- Une fois la boucle en cours d'exécution terminée : masquez et excluez les lignes avec ProbF > 0,05, puis créez une distribution
Names Default To Here(1);
dt = Current Data Table();
//dt = Open("Subset of Test data.jmp");
dt << Show Window(0); // should provide slight speed improvement
For Each({col_name}, dt << get column names(String), Column(dt, col_name) << suppress eval(False));
get_stepwise = Expr(
dt << Rerun Formulas;
Show(Col Mean(As Column(dt, :Column 2 001))); //will slow down script execution, but shows that values in Column 2 001 should change
Show(Col Mean(As Column(dt, :Column 2 010)));
fm = dt << Fit Model(
Y(:Y),
Effects(
:Column 2 001, :Column 2 002, :Column 2 003, :Column 2 004, :Column 2 005, :Column 2 006, :Column 2 007, :Column 2 008, :Column 2 009,
:Column 2 010
),
Personality("Stepwise"),
Run,
SendToReport(Dispatch({}, "Step History", OutlineBox, {Close(1)})),
Invisible // should provide slight speed improvement
);
dt_result = Report(fm)[Outline Box("Stepwise Fit for Y")][Outline Box("Current Estimates")][Table Box(1)] << Make Into Data Table(invisible);
dt_result << New Column("Loop", Numeric, Continuous, <<SET each="" value="">F\!""n > 0.05) << Hide And Exclude(1) << Clear Select;
// plot distribution
dt_collector << Distribution(Stack(1), Nominal Distribution(Column(:Parameter), Horizontal Layout(1), Vertical(0)));</SET>
Ce script ne semblait pas avoir besoin de Wait(0) du moins sur ma configuration (PC rapide, Windows 10 et JMP16.2). Pour moi, il semble que les valeurs de la formule aient été réévaluées
Résultats:

Index de script pour Wait (), cliquer sur l'aide de la rubrique fournit parfois plus d'informations (dans le cas de Wait (), c'est le cas)

Aide JMP - Attendre(n) "En précisant Attendez(0) permet un cycle de traitement des messages."
Re : Question de script pour les formules de réexécutionLes formules de mon tableau ne sont pas supprimées.Pouvez-vous expliquer un peu plus les commandes que vous suggérez que j'ajoute ?Je suis presque complètement ignorant des scripts (et je ne veux pas vraiment passer mon temps à devenir plus compétent - ne dépensez pas votre énergie à me dire pourquoi je devrais - je suis un cas particulier à bien des égards).Dois-je mettre un nom de colonne à l'intérieur du { } ou mettre les 6 colonnes (séparées par , ou ;?) ?Dois-je remplacer String par quoi que ce soit ?Et est-ce que je liste la colonne séparément pour la commande suppress eval (false) ?
En ce qui concerne wait(), j'ai essayé sans succès, mais je ne trouve aucune documentation dans l'index de script sur la commande wait().
Re : Question de script pour les formules de réexécutionJuste pour vous assurer que cette colonne sera évaluée, ajoutez ceci avant la boucle For (si vous utilisez une version antérieure à JMP16, changez For Each en For):
For Each({col_name}, dt << get column names(String),
Column(dt, col_name) << suppress eval(False)
);
Dans le tableau, j'ai ouvert les colonnes de formule dont l'évaluation avait été supprimée, mais il s'agissait peut-être simplement d'une fonction de sécurité avec les fichiers téléchargés.
Si vous devez ajouter wait(0), vous pouvez aller un peu trop loin avec pour commencer et presque l'ajouter après chaque ligne à l'intérieur de la boucle for. En général, il n'est pas nécessaire dans JMP, mais dans certains cas, il est nécessaire.
Re : Question de script pour les formules de réexécutionJ'ai joint le fichier.Il semble que j'ai inséré Rerun Formulas au bon endroit, mais cela ne fonctionne pas.Comment et où va Wait ?
Re : Question de script pour les formules de réexécutionLes formules de réexécution devraient fonctionner, peut-être avez-vous besoin d'ajouter wait(0) quelque part ? Sans voir le tableau de données, il est un peu difficile de tester où le problème pourrait se trouver (nombre de lignes, nombre de colonnes, formules compliquées, graine aléatoire ne changeant pas pour une raison quelconque).
Avec cet exemple simple, les valeurs semblent bien se mettre à jour :
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(5),
New Column("Column1", Numeric, "Continuous", Format("Best", 12), Formula(Random Normal(1, 1))),
New Column("Column2", Numeric, "Continuous", Format("Best", 12), Formula(Random Normal(2, 1)))
);
For(i = 1, i <= 3, i++,
dt << Rerun Formulas;
Show(dt:Column1 << get as matrix);
Show(dt:Column2 << get as matrix);
fm = dt << Fit Model(
Y(:Column1),
Effects(:Column2),
Personality("Stepwise"),
Run,
SendToReport(Dispatch({}, "Step History", OutlineBox, {Close(1)}))
);
dt_result = Report(fm)[Outline Box("Stepwise Fit for Column1")][Outline Box("Current Estimates")][Table Box(1)] << Make Into Data Table;
fm << close window;
//dt_result << Close Window;
);