Ho guardato rapidamente questo, nota che sto usando JMP16 e For Each () invece di For ().
Domanda 1:
Penso che sia necessario ottenere riferimenti separati alle caselle di contorno, anche un'opzione è usare XPath e quindi scorrere l'elenco degli elenchi. Anche
//creates a report and maximizes desirability
//doesn't work if there is anything in the by() field
pf_obs = fit << XPath("//OutlineBox[text()='Prediction Profiler']"); // list of lists so easiest to loop over them
For Each({pf_ob}, pf_obs,
pf = pf_ob << Get Scriptable Object;
pf << Maximize and Remember;
);
//create a data table with the parameters from the prediction profile
//in my other version (with the for loop a Where( :x = y[i]) in the model, I than had some code to concatenate tables together and change some formatting
dtout[1] = Report(fit[1])["Prediction Profiler"]["Remembered Settings"][Table Box(1)] << Make Combined Data Table

Domanda 2:
Farei un refactoring un po 'più grande a questa parte del codice per renderlo più pulito, ma puoi anche fare una "correzione rapida" per questo. Utilizzare Inserisci in per aggiungere limiti di risposta all'espressione Profiler
jslExprProfiler = expr(
Profiler( 1,
Confidence Intervals( 1 ),
Desirability Functions( 1 ),
//sets desirability target of the crit response
_Y2_ << Response Limits(
{Lower( ytarg-1, 0.0183 ), Middle( ytarg, 1 ), Upper( ytarg+1, 0.0183 ),
Goal( "Match Target" ), Importance( 1 )}
)
);
);
For Each({mod}, ModList,
Insert Into(
jslExprProfiler, EvalExpr(
Expr(mod) << Response Limits({Lower(1, 1), Middle(2, 1), Upper(3, 1), Goal("None"), Importance(1)})
)
)
);
jslExprProfiler = Substitute(
Expr(fit << _prof_),
Expr(_prof_), Name Expr(jslExprProfiler)
);
jslExprProfiler = Substitute(
Name Expr(jslExprProfiler),
expr(_Y2_), nameexpr(yList[1])
);
Codice completo:
Visualizza altro... Ciao,
Sto lavorando a uno script che consentirà agli utenti di farlo
- Seleziona le colonne per adattarle a un modello
- Identificare la variabile primaria e specificare il valore dell'obiettivo
- Identificare per quale colonna suddividere il modello
- Consentire a JMP di creare il modello, ottimizzare la desiderabilità per raggiungere l'obiettivo prefissato, quindi produrre i risultati del modello
- Copia i risultati da una comoda tabella di output
Ho script funzionali che fanno ciò che voglio senza consentire l'input o la selezione dell'utente, ma rendere lo script interattivo è stato impegnativo. Penso di essere per lo più lì, ma ho alcune cose specifiche con cui sto lottando
- Domanda 1: in una versione precedente di questo script, ho utilizzato una finestra diversa per ogni modello utilizzando un ciclo for con una riga While( x == "y[i]"). Preferirei usare By( :x ) perché è più flessibile e fornisce una finestra di output. Tuttavia, l'utilizzo di By( :x ) interrompe lo script successivo per ottenere un oggetto scriptabile dal report. È possibile creare un report diverso per ogni sottocasella nella finestra del modello? O un modo migliore per codificare le righe 173-181? Costruisco quelle righe sulla base di questi altri due thread: filo 1 , filo 2 .
- Domanda 2: Ho bisogno dell'opzione per poter avere un numero variabile di effetti modellati senza avere funzioni di desiderabilità (in seguito lo script completo avrà anche effetti ridotti al minimo ma questo script demo semplificato stava diventando troppo complicato. Nelle righe 122-126 sono in grado di creare l'espressione desiderata in ModExpr, ma poiché è un elenco non ha funzionato quando ho provato a sostituirlo direttamente nel profilo. La mia soluzione è avere un numero di segnaposto maggiore del numero di variabili che mi aspetto di modellare e il codice sembra ignorare le parti senza senso se ho meno di 6 effetti modellati ... ma questo sembra super stravagante. C'è un modo per correggere il codice commentato nelle righe 130-134 in modo tale che l'elenco sia combinato in un'unica espressione che funzioni? Neanche io sono riuscito a far suonare bene Concatenation, ma scommetto che c'è qualcosa di semplice che mi è sfuggito.
Ecco uno script di esempio che utilizza dati di esempio. Il modello è una pessima vestibilità, ma non è molto importante per la demo. Durante l'esecuzione, se si cancella la selezione per "by", le cose funzioneranno correttamente e produrranno risultati. Se viene lasciato qualcosa nella sezione "by", la riga 174 verrà interrotta.
Grazie per tutto l'aiuto!
Names Default To Here( 1 );
//sample data for demo
dt = Open( "$SAMPLE_DATA/Football.jmp" );
xvar = {};
yvar = {};
byvar = {};
ytarg = 60;
dtout = {};
//let users select the columns to model
win = New Window( "Model Variable Selection",
<<MODAL></MODAL>