Skriptfrage für Formeln erneut ausführenIch habe diese Frage in einem früheren Beitrag gestellt, aber das ist schon ein paar Wochen her, daher wird sie möglicherweise nicht bemerkt.Ich vermute, dass dies eine einfache Skriptfrage für diese Gruppe ist.Unten finden Sie ein Skript (gespendet von Frank), das erfolgreich eine Monte-Carlo-Simulation für eine schrittweise Regression durchführt.Das Einzige, was nicht funktionierte, war die Neuberechnung einer Reihe von Spalten, in denen ich Zufallszahlen in Formeln hatte, bevor ich die schrittweise Regression durchführte.Der Befehl <
Mein erfolgloser Versuch ist Zeile 19 im Skript.Danke.
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>Erweiterte statistische ModellierungBetreff: Skriptfrage für Formeln erneut ausführenDanke, das ist perfekt.Und vielen Dank, dass Sie Geduld mit mir haben.Außerdem befindet sich die Hilfe zu Wait() in der Hilfe, aber nicht im Skriptindex, wie Sie sagen.
Betreff: Skriptfrage für Formeln erneut ausführenIch bin mir nicht sicher, warum das ursprüngliche Skript, das Sie hatten, die Werte in den Formelspalten nicht aktualisieren würde. Sie können dies möglicherweise weiter testen, indem Sie die Schleifenanzahl verringern (z. B. als Maximalwert verwenden) und Wait(1); Beispielsweise sollten Sie nach dem erneuten Ausführen von Formeln die Änderungen in Ihrer Datentabelle sehen können.
Hier ist ein leicht modifiziertes Skript, das die Teilmengentabelle verwendet, die Sie zuvor bereitgestellt haben. Da Sie sich mit der Skripterstellung nicht besser auskennen möchten, werde ich hier nicht näher auf die Funktionsweise der Funktionen eingehen. Sehen Sie sich aber die Erläuterungen unten und die Kommentare im Skript an. Bei Bedarf kann ich Ihnen auch weitere Erläuterungen geben. Das hier bereitgestellte Skript sollte:
- Durchlaufen Sie alle in dt gefundenen Spalten und aktivieren Sie die Auswertung für sie, um eine Neuberechnung für Formelspalten zu ermöglichen
- Führen Sie Fit Model 100 Mal aus und berechnen Sie die Werte in den Formelspalten jedes Mal mit <
- Wird auch Show() verwenden, um Col Median() für eine zu protokollierende Spalte auszugeben. Dadurch wird die Skriptausführung verlangsamt, es sollte jedoch angezeigt werden, dass sich die Werte in der Spalte ändern
- Erstellen Sie eine Ergebnistabelle mit den Ergebnissen und schließen Sie alle nicht benötigten Tabellen und Fenster
- Nachdem die laufende Schleife beendet ist: Zeilen mit ProbF > 0,05 ausblenden und ausschließen und dann eine Verteilung erstellen
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>
Dieses Skript schien Wait(0) zumindest auf meinem Setup (schneller PC, Windows 10 und JMP16.2) nicht zu benötigen. Für mich sieht es so aus, als ob die Formelwerte neu bewertet wurden
Ergebnisse:

Skriptindex für Wait(). Wenn Sie auf „Themenhilfe“ klicken, erhalten Sie manchmal weitere Informationen (im Fall von Wait() ist dies der Fall).

JMP-Hilfe – Warten(n) „Angeben Warten(0) ermöglicht einen Zyklus der Nachrichtenverarbeitung.“
Betreff: Skriptfrage für Formeln erneut ausführenDie Formeln in meiner Tabelle werden nicht unterdrückt.Können Sie mir die Befehle, die ich hinzufügen möchte, etwas näher erläutern?Ich kenne mich mit dem Schreiben von Skripten fast überhaupt nicht aus (und möchte meine Zeit nicht damit verschwenden, meine Fähigkeiten zu verbessern – verschwende deine Energie nicht darauf, mir zu sagen, warum ich das tun sollte – ich bin in vielerlei Hinsicht ein Sonderfall).Soll ich einen Spaltennamen in { } einfügen oder alle 6 Spalten (getrennt durch , oder ;?)?Muss ich String durch irgendetwas ersetzen?Und liste ich „Spalte“ separat für den Befehl „suppress eval (false)“ auf?
Bezüglich wait() habe ich das erfolglos versucht, aber ich kann im Skriptindex keine Dokumentation zum Befehl wait() finden.
Betreff: Skriptfrage für Formeln erneut ausführenUm sicherzustellen, dass die Spalte ausgewertet wird, fügen Sie Folgendes vor der For-Schleife ein (wenn Sie eine frühere Version als JMP16 verwenden, ändern Sie „For Each“ in „For“):
For Each({col_name}, dt << get column names(String),
Column(dt, col_name) << suppress eval(False)
);
In der Tabelle, die ich geöffnet habe, war die Auswertung der Formelspalten unterdrückt, aber es handelt sich möglicherweise nur um eine Sicherheitsfunktion bei heruntergeladenen Dateien.
Wenn Sie wait(0) hinzufügen müssen, können Sie zunächst etwas übertrieben vorgehen und es fast nach jeder Zeile innerhalb der for-Schleife hinzufügen. Normalerweise ist dies in JMP nicht erforderlich, aber es gibt einige Fälle, in denen es erforderlich ist.
Betreff: Skriptfrage für Formeln erneut ausführenIch habe die Datei angehängt.Es sieht so aus, als hätte ich Rerun Formulas an der richtigen Stelle eingefügt, aber es funktioniert nicht.Wie und wohin geht Wait?
Betreff: Skriptfrage für Formeln erneut ausführenDas erneute Ausführen von Formeln sollte funktionieren. Vielleicht müssen Sie irgendwo wait(0) hinzufügen? Ohne die Datentabelle zu sehen, ist es etwas schwierig zu testen, wo das Problem liegen könnte (Zeilenanzahl, Spaltenanzahl, komplizierte Formeln, zufälliger Startwert, der sich aus irgendeinem Grund nicht ändert).
Mit diesem einfachen Beispiel scheinen die Werte gut aktualisiert zu werden:
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;
);