Domanda di script per Rerun FormuleHo fatto questa domanda in un post precedente, ma è stato qualche settimana fa, quindi potrebbe non essere notato.Sospetto che questa sia una domanda di scripting facile per questo gruppo.Di seguito è riportato uno script (donato da Frank) che esegue con successo una simulazione Monte Carlo per una regressione graduale.L'unica cosa che non ha fatto è stato ricalcolare un numero di colonne in cui ho numeri casuali nelle formule prima di condurre la regressione graduale.Il comando <
Il mio tentativo fallito è la riga 19 nello script.Grazie.
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>Modellazione statistica avanzataRi: domanda di script per le formule di ripetizioneGrazie, questo è perfetto.E grazie per essere paziente con me.Inoltre, l'aiuto su Wait () è in aiuto ma non l'indice di scripting, come dici tu.
Ri: domanda di script per le formule di ripetizioneNon sono sicuro del motivo per cui lo script originale che avevi non aggiornerebbe i valori nelle colonne della formula. Potresti forse testarlo ulteriormente abbassando il numero di loop (usa ad esempio come valore massimo) e aggiungendo Wait(1); per esempio dopo le formule <
Ecco uno script leggermente modificato utilizzando la tabella dei sottoinsiemi che hai fornito in precedenza. Dato che non vuoi essere più abile con lo scripting, non andrò molto in profondità nello spiegare come funzionano le funzioni qui, ma vedi la spiegazione qui sotto e i commenti nello script, posso anche spiegare di più se necessario. Lo script fornito qui dovrebbe:
- Eseguire il ciclo su tutte le colonne trovate in dt e abilitare la valutazione su di esse per consentire il ricalcolo sulle colonne formula
- Esegui Fit Model 100 volte e ricalcola i valori nelle colonne formula ogni volta con <
- Userà anche Show() per stampare Col Median() per una colonna da registrare. Ciò rallenterà l'esecuzione dello script, ma dovrebbe mostrare che i valori nella colonna cambiano
- Crea una tabella dei risultati con i risultati e chiudi tutte le tabelle e le finestre non necessarie
- Al termine dell'esecuzione del ciclo: nascondi ed escludi le righe con ProbF > 0,05 e quindi crea la distribuzione
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>
Questo script non sembrava aver bisogno di Wait(0) almeno sulla mia configurazione (PC veloce, Windows 10 e JMP16.2). Per me sembra che i valori della formula siano stati rivalutati
Risultati:

Indice di scripting per Wait (), facendo clic su Topic Help a volte fornisce maggiori informazioni (in caso di Wait () lo fa)

Guida di JMP - Attendere(n) "Specificare Aspetta(0) consente un ciclo di elaborazione dei messaggi."
Ri: domanda di script per le formule di ripetizioneLe formule nella mia tabella non vengono soppresse.Puoi spiegare un po 'di più sui comandi che stai suggerendo di aggiungere?Sono quasi completamente all'oscuro dello scripting (e non voglio davvero passare il mio tempo a diventare più abile - non spendere le tue energie a dirmi perché dovrei - sono un caso speciale in molti modi).Inserisco il nome di una colonna all'interno di { } o inserisco tutte e 6 le colonne (separate da o ;?)?Devo sostituire String con qualcosa?E, elenco Colonna separatamente per il comando suppress eval (false)?
Per quanto riguarda wait() l'ho provato senza successo, ma non riesco a trovare alcuna documentazione nell'indice di scripting sul comando wait().
Ri: domanda di script per le formule di ripetizioneSolo per assicurarti che la colonna venga valutata, aggiungi questo prima del ciclo For (se stai usando una versione precedente di JMP16 cambia For Each in For):
For Each({col_name}, dt << get column names(String),
Column(dt, col_name) << suppress eval(False)
);
Nella tabella che ho aperto le colonne della formula avevano la valutazione soppressa, ma potrebbe essere solo una funzione di sicurezza con i file scaricati.
Se devi aggiungere wait (0), puoi andare un po 'eccessivo con per iniziare e quasi aggiungerlo dopo ogni riga all'interno del ciclo for. Di solito non è necessario in JMP, ma in alcuni casi è necessario.
Ri: domanda di script per le formule di ripetizioneHo allegato il file.Sembra che abbia inserito Rerun Formule nella posizione corretta ma non funziona.Come e dove va Wait?
Ri: domanda di script per le formule di ripetizioneLe formule di riesecuzione dovrebbero funzionare, forse è necessario aggiungere wait(0) da qualche parte? Senza vedere il datatable è un po 'difficile testare dove potrebbe essere il problema (conteggio di righe, conteggio di colonne, formule complicate, seme casuale che non cambia per qualche motivo).
Con questo semplice esempio i valori sembrano aggiornarsi correttamente:
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;
);