<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Sto scrivendo uno script che aggiungerà alcune informazioni aggiuntive a una piattaforma esistente (ad esempio aggiungendo il modello RSquare Predicted to Fit). Sono in grado di aggiungere il pred.R2 a una piattaforma creata come parte del mio script. Ma come potrei ottenere un riferimento a un modello che è stato adattato dall'utente? Vorrei creare una finestra di dialogo utente, che consenta all'utente di selezionare la finestra della piattaforma alla quale dovrebbe essere aggiunto pred.R2.
Ovviamente preferirei ancora di più aggiungere semplicemente la mia voce di menu all'hotspot principale di Fit-Model-plaftorm, ma non ho idea se sia possibile?
Grazie per qualsiasi consiglio,
Sebastian
Sebastian,
Solo per costruire l'eccellente risposta di MS ... Abbiamo scritto uno script molto simile per aggiungere il valore previsto R2 all'output di Fit Model. Invece di visualizzare una finestra di dialogo per selezionare il report appropriato, è possibile eseguire lo script dal menu o una barra degli strumenti della finestra del report corrente (lo script deve essere aggiunto al menu o a una barra degli strumenti). Quindi il comando Current Window () fornisce un riferimento alla finestra del report ed è possibile cercare le caselle del profilo all'interno della finestra del report. Ecco una parte del nostro script.
curwin = Current Window();For( i = 1, i < 10000, i++, Try( outlinebox = curwin[Outline Box( i )]; Try( outlineboxobj = outlinebox << Get Scriptable Object; // DETAILS NOT SHOWN: // Check that the outline box is the top of a Fit Model analysis, with Standard Least Squares personality. // Pull the PRESS statistic and SS(treatment) to calculate R2-Predicted and append it to the Summary of Fit. ); , Break(); // If no more outline boxes are found, the first "Try()" goes here and forces an escape from the For() loop. ););
Il nostro script inserisce effettivamente il valore previsto di R2 in ogni analisi del modello di adattamento in quella finestra (funziona per più Y e per variabili). Lo fa osservando ogni riquadro di schema nella finestra del report.
Commenti:
1. La documentazione JSL non rende giustizia al messaggio "<< Ottieni oggetto Scriptable". Ho cercato per molto tempo un metodo per accedere a finestre di report esistenti (analisi standard che erano già state create da un utente, non da uno script). Questa capacità apre molte opportunità di scripting.
2. Per impedire a tutti noi di reinventare la ruota, sarebbe bello se JMP includesse il valore R2-Predicted nell'output standard dei minimi quadrati.
Howard
Generalmente, << Ottieni oggetto Scriptable può dare accesso alla piattaforma. comunque, il Fit Model l'output è un po 'particolare e richiede un po' di scavo nel report per trovare la topbox della piattaforma.
Se non è assegnato alcun By-role, il sotto dovrebbe funzionare (assumendo funzioni e definizioni come sopra).
// Dialogo
Nuova finestra ( "Seleziona il rapporto di regressione" ,
<< Modale ,
Pannello ( "Seleziona il rapporto di regressione per aggiungere il R2 previsto a" ,
rb = Radio Box ( finestre ) ,
Scatola dei pulsanti ( "OK" ,
Finestra ( rb << essere selezionato ) << Porta la finestra in primo piano ;
insertToReport (
Rapporto corrente () [ 1 , 1 , 1 ] << ottieni oggetti con script ()
) ;
)
)
) ;
Molte grazie, Sebastian. Ho quasi capito (penso), quindi fammi ricapitolare. . .
Il tuo utente avrebbe la sua sessione JMP in uno stato di cui il tuo codice non è a conoscenza. In altre parole, potrebbero avere più tabelle aperte, ciascuna con più finestre. Alcune di queste finestre potrebbero contenere un "Fit Least Squares"; rapporto. Il tuo codice dovrebbe scansionare tutte le finestre aperte, identificare quest'ultimo e, se ce n'è più di uno, lasciare che l'utente scelga quale aggiungere il contenuto del rapporto aggiuntivo (se ce n'è solo uno, non è necessario chiedere). Il punto chiave è che il tuo codice non ha effettivamente generato nessuno dei report.
È corretto, per favore?
Ciao Ian,
Grazie per la risposta. Vorrei seguire questo flusso di lavoro:
1. Gli utenti iniziano la sua analisi usando "Fit Model (minimi quadrati standard)".
2. Quindi l'utente esegue il mio script per aggiungere il R2 previsto al suo rapporto.
3. Il R2 previsto viene quindi allegato al report "Modello di adattamento".
Il problema è come accedo al rapporto che è stato creato dall'utente nel mio script.
Attualmente il mio codice è simile a questo. Fondamentalmente voglio sostituire l'ultima sezione "Test it" con una finestra di dialogo utente in cui l'utente sceglie il report in cui il Pred. R2 dovrebbe essere aggiunto (specialmente nel caso in cui ci siano più report). Mi manca solo la parte di come posso fare riferimento a un rapporto esistente.
// Estrae la statistica PRESS da una piattaforma "Fit Model"
getPRESS = Funzione ({ plattform } ,
plattform << stampa ( mostrare = 1 ) ;
rapporto = plattform << rapporto ;
stampa = ( rapporto [ OutlineBox ( "Stampa" )] [ 1 ] [ 1 ] << Ottieni come Matrix ) [ 1 ] ;
stampa ;
) ;
// Estrae la somma totale dei quadrati da una piattaforma "Fit Model"
getTSS = Funzione ({ plattform } ,
rapporto = plattform << rapporto ;
ss = ( rapporto [ OutlineBox ( "Analisi della varianza" )] [ 1 ] [ 3 ] << Ottieni come Matrix ) ;
TSS = ss [ nRow ( ss )] ;
TSS ;
) ;
// Calcola l'R2 previsto per un modello lineare calcolato utilizzando la piattaforma di modello Fit
predR2 = Funzione ({ plattform } ,
stampa = getPRESS ( plattform ) ;
TSS = getTSS ( plattform ) ;
PR2 = 1 - stampa / TSS ;
PR2 ;
) ;
// Inserire il pred R2 nel report
insertToReport = Funzione ({ plattform } ,
lm.rep = plattform << rapporto ;
nomi = lm.rep [ OutlineBox ( "Riepilogo di adattamento" )] [ StringColBox ( 1 )] << Ottenere ;
valori = lm.rep [ OutlineBox ( "Riepilogo di adattamento" )] [ Numero Col Box ( 1 )] << Ottenere ;
Inserire ( nomi , "Previsto RSquare" , 3 ) ;
Inserire ( valori , predR2 ( plattform ) , 3 ) ;
lm.rep [ OutlineBox ( "Riepilogo di adattamento" )] [ StringColBox ( 1 )] << Imposta valori ( nomi ) ;
lm.rep [ OutlineBox ( "Riepilogo di adattamento" )] [ NumberColBox ( 1 )] << Imposta valori ( Matrice ( valori )) ;
) ;
// Provalo
dt = Aperto ( "$ sample_data / Design Experiment / Coffee Data.jmp" ) ;
analisi = Fit Model (
Y ( : Forza ) ,
effetti ( : Macinare , : Temperatura , : Tempo , : Carica , : Stazione ) ,
Personalità ( "Minimi quadrati standard" ) ,
enfasi ( "Rapporto minimo" ) ,
Correre (
: Forza << { Mancanza di adattamento ( 0 ) , Plot Actual di Predicted ( 0 ) ,
Registra la trama ( 0 ) , Traccia residuo in base a Predicted ( 0 ) ,
Effetto grafico Leva ( 0 )}
)
) ;
InsertToReport ( analisi ) ;
aggiunta: Questo è quello che ho provato ma non ho potuto fare il lavoro:
// ----------------------- +
// Finestra di dialogo utente |
// ----------------------- +
// Ottieni tutte le finestre aperte
windows = {};
ref_windows = Window ();
Per (i = 1, i <= Length (ref_windows), i ++,
Insert Into (windows, rif_windows << Ottieni il titolo della finestra);
);
// Dialogo
Nuova finestra ("Seleziona rapporto di regressione", << Modale,
Riquadro pannello ("Seleziona il rapporto di regressione per aggiungere il R2 previsto a", pf = Radio Box (windows));
);
lm_plattform = Plattform (pf << Get);
lm_plattform << Porta in primo piano;
insertToReport (lm_plattform);