Estrai la formula di previsione senza dover salvare la formula nella tabella dati<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Sto scrivendo uno script per adattare una serie di modelli lineari generalizzati a un dato e quindi estraendo l'AIC ecc. per eseguire la media del modello. A causa del modo in cui JMP codifica le variabili categoriali nella matrice di progettazione per i modelli lineari generalizzati (JMP utilizza una codifica a somma pari a zero anziché una codifica a punto d'angolo), è difficile modellare la media delle previsioni utilizzando i coefficienti stimati riportati nella tabella fit (una delle categorie non viene mai mostrata e avrei bisogno di fare una programmazione approfondita per ricrearla). Sembra che sarebbe più semplice utilizzare semplicemente la formula di previsione dalla piattaforma e quindi applicare i pesi del modello a queste previsioni in un'unica formula di grandi dimensioni.
Tuttavia, per quanto posso vedere, devo salvare la formula di previsione nella tabella dati per CIASCUN modello, quindi posso estrarre la formula e salvarla per utilizzarla altrove utilizzando qualcosa sulla falsariga di
modelfit << formula di previsione ;
modellopredformula = car ( Colonna ( dati , "Formula P(PA)" ) << Ottieni la formula ()) ;
dove "Formula P(PA)" è la formula prevista. Posso quindi salvare la formula di previsione del modello (in forma di carattere) nella mia tabella AIC riepilogativa ed eventualmente creare una super formula che sia una somma ponderata delle singole formule....
Tuttavia, ciò rallenta notevolmente lo script perché le previsioni vengono calcolate per l'intera tabella di dati e devo aggiungere e rimuovere la colonna per ogni adattamento del modello.
Quindi, esiste un modo per estrarre la formula di previsione effettiva da un adattamento del modello SENZA dover prima salvare la colonna nella tabella dati e far eseguire effettivamente i calcoli a JMP?
Grazie
Carlo Schwarz
Ri: Estrai la formula di previsione senza dover salvare la formula nella tabella datiA partire da JMP Pro 13.0, esiste un modo più semplice per " estrarre la formula di previsione effettiva da un adattamento del modello SENZA dover prima salvare la colonna nella tabella dati e fare in modo che JMP esegua effettivamente i calcoli?". Questo è esattamente ciò che fanno la "Formula di pubblicazione della previsione" e le sue varianti; la formula generata dall'adattamento del modello viene archiviata direttamente in una nuova piattaforma JMP denominata Deposito di formule . Da lì puoi applicarlo ad altre tabelle (compatibili), generare codice di punteggio (in più linguaggi di programmazione) per la distribuzione e avviare piattaforme JMP come Profiler e Model Comparison. Quest'ultimo ha un comando di media del modello che credo implementi il tuo obiettivo finale di creare un insieme.
Sfortunatamente, il comando Pubblica non è stato ancora aggiunto per la piattaforma del modello lineare generalizzato che stai utilizzando. Ma è disponibile per un buon numero di altre piattaforme di modellazione predittiva: Neural, Partition, Standard Least Squares, solo per citarne alcune.
Ri: Estrai la formula di previsione senza dover salvare la formula nella tabella datisì, per valutare dt, è giusto
dt; o se vuoi essere stravagante, eval(dt);
la funzione open può accettare un paio di argomenti diversi. In molti casi l'ordine degli argomenti non ha importanza, in questo caso sì. inserito in aggiunge alla fine dell'elenco di argomenti nella funzione a meno che non si specifichi che dovrebbe andare in un certo ordine con il terzo argomento che non ho usato qui.
Certo, può sembrare davvero strano, ma è super conveniente.
racchiudendo l'istruzione open in un'espressione, posso aggiungere o rimuovere argomenti prima che venga valutata.
insert in aggiunge essenzialmente ",invisible" tranne che non è una stringa che deve essere analizzata.
insert into aggiunge il contenuto di invis con una piccola svolta, se avessi semplicemente inserito invis, avrebbe inserito l'invis valutato, non lo volevo, quindi ho racchiuso invis in "nome expr".nome expr(invis) verrà valutato come "invisibile" inoltre aggiunge il comune come separatore. quindi name eval aggiunge il testo dell'espressione senza che sia mai testo.sfortunatamente più cerco di spiegarlo, peggio sembra.
in JSL potresti essenzialmente iniziare con l'espressione di una funzione vuota e riempirla con tutte le parti e i pezzi di cui hai bisogno.
Ri: Estrai la formula di previsione senza dover salvare la formula nella tabella datiPulito... ma non capisco davvero come 'insert into' sappia dove inserire l'espressione "invis" nell'espressione "dt". Immagino che Expr "parsea" sia l'espressione per creare una sorta di albero e poi "insert into" aggiunga semplicemente l'argomento "invis" come un'altra foglia nell'albero?
Non ho una conoscenza sufficientemente approfondita di come gli argomenti vengono passati alle funzioni in JMP. Vengo da un background R in cui è posizionale o argomento=valore e trovo un po 'strano l'uso di JMP di cose come Invisible nella funzione Open() perché non è una stringa). Qualche buon riferimento per questo modo di chiamare le funzioni?
Non l'ho ancora provato, ma presumo che sia necessario valutare l'espressione "dt" per aprire la tabella dati effettiva.
Ri: Estrai la formula di previsione senza dover salvare la formula nella tabella datileggermente diverso e nessuna analisi
correre in silenzio = 1 ;
invis = Espr ( invisibile ) ; //questa non è una stringa o un elenco e non viene valutata
dt = Espr ( Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ) ;
Se ( correre in silenzio == 1 , io inserire in ( dt , Nome Espr ( invis ) ) ) ; //usa Name Expr per restituire il simbolo dell'espressione senza valutarlo.
Ri: Estrai la formula di previsione senza dover salvare la formula nella tabella datiGrazie per i suggerimenti... Ho anche inventato
// Il flag runsilent riportato di seguito è utile per il debug. Impostalo su 0 per rendere tutto visibile. 1 per correre in silenzio
correre in silenzio = 0 ;
eval ( analizzare ( "dati = Apri( \!"SPPI_ Data_JMP_Revised.jmp\!""|| Se ( correre in silenzio , ",\!"invisibile\!"" , " " ) || ");" )) ;
Nota ho dovuto includere la virgola con la stringa ",invisible" per creare un express che funzioni se runsilent=0 per evitare di avere argomenti "vuoti" nella chiamata.
Carlo.
Ri: Estrai la formula di previsione senza dover salvare la formula nella tabella datiInvisibile è una parola chiave quindi non è così facile da impostare come parametro.Di solito utilizzo solo le istruzioni IF:
La mia distribuzione = Funzione ({ dt , col , fareInvisible } , { Locale predefinito } ,
Se ( fareInvisible ,
dt << Distribuzione ( Invisibile , Colonna ( Val ( col ) ) )
,
dt << Distribuzione ( Colonna ( Val ( col ) ) )
)
) ;
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
La mia distribuzione ( dt , "altezza" , 1 ) ;
Se vuoi impostarlo come parametro puoi creare il comando come una stringa, quindi analizzarlo ed eseguirlo:
La mia distribuzione = Funzione ({ dt , col , fareInvisible } , { Locale predefinito } ,
Se ( fareInvisible ,
parola chiave = "Invisibile"
,
parola chiave = ""
) ;
Val ( Analizzare ( Inserisci valutazione ( "\[
dt << Distribuzione( ^parola chiave^, Colonna( "^col^" ) )
]\" ))) ;
) ;
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
La mia distribuzione ( dt , "altezza" , 1 ) ;
Ri: Estrai la formula di previsione senza dover salvare la formula nella tabella datiI resoconti dell'adattamento non vengono mai visualizzati sullo schermo, ma non li ho mai resi esplicitamente invisibili. Vedo che esiste un'opzione "invisibile" per lanciare attacchi....
Quando specifico l'opzione invisibile all'avvio della piattaforma, il tempo viene ridotto da 45 secondi a 30 secondi.
È visibile la tabella dati originale (in cui vengono successivamente salvate le formule di previsione) e sono visibili anche la tabella dati di riepilogo finale (dove vengono successivamente aggiunti i risultati di ciascun adattamento del modello). Ho provato a rendere invisibile la tabella dati originale e questo accelera davvero le cose (ora fino a 15 secondi) anche aggiungendo/rimuovendo le colonne di previsione.
La tabella dei risultati finali è stata creata successivamente in modo da poter vedere le righe aggiunte successivamente. Inoltre l'ho reso invisibile e ho ridotto nuovamente il tempo a 8 secondi!
Quindi il collo di bottiglia sembra avere a che fare con le operazioni sullo schermo piuttosto che con il tempo della CPU.
Ora ci sono i tempi rivisti (nello script finale accelerato).
Vestibilità del modello al 56%.
Il 13% genera report modello
Il 12% chiude il modello di relazione (anche se è invisibile?)
Quando guardo il mio log, la mia linea
modelfit << formula di previsione ;
ha attivato un messaggio di avviso relativo a un operatore booleano mancante. Se lo passo a
modelfit << formula di previsione(1) ;
lo script funziona ancora correttamente senza un messaggio di avviso. Tuttavia, non riesco a trovare alcuna documentazione nella Guida alla sintassi JSL o alla Guida allo scripting su cosa a
modelfit << formula di previsione(0) ;
farebbe? Proverò a scrivere un piccolo script per vedere se anche quest'ultimo non valuterebbe la formula di previsione.
Ora sto provando a modificare lo script in modo che l'opzione "invisibile" possa essere impostata al volo. Voglio fare qualcosa del genere
esegui silenzioso=1;
dati << open("blah", if(esegui silenzioso, "Invisibile"));
ma JMP si ferma sempre a quel punto... Ho sempre problemi su come rendere dinamici i messaggi quando sono necessarie parole in codice "cablate". Torniamo ai libri....
Carlo.
Ri: Estrai la formula di previsione senza dover salvare la formula nella tabella datiPer quanto riguarda i tempi, hai provato a rendere "invisibile" la finestra del rapporto. Sono solo curioso di sapere se questo influisce sulla cifra del 23% sopra riportata.
Ri: Estrai la formula di previsione senza dover salvare la formula nella tabella datiGrazie Ian e Dave. Non sono riuscito a trovare la formula di previsione in nessun punto dell'albero ShowProperties, quindi suppongo che non venga calcolata finché non viene richiesta da un'azione di salvataggio della colonna.
Ho provato il mio script con e senza sopprimere la valutazione della formula. Senza sopprimere la formula, ci sono voluti 45 secondi. Per sopprimere la formula ci sono voluti 44 secondi. Immagino di aver sbagliato nel presumere che la valutazione della formula richiedesse molto tempo rispetto all'adattamento del modello effettivo, all'estrazione dal rapporto e al salvataggio delle informazioni in una nuova tabella di dati (riepilogativa).
Non mi è venuto in mente di provare a profilare la sceneggiatura. L'ho appena fatto. Ecco i risultati
L'11% del tempo impiegato nel montaggio dei modelli
Il 13% del tempo impiegato nella creazione dei report
Il 47% del tempo impiegato per eliminare la colonna utilizzata per ciascun modello per le previsioni utilizzando: dati << cancella colonne("Formula P(PA)");
Il 23% del tempo impiegato a chiudere la finestra del report dopo aver estratto le informazioni da essa utilizzando: modelreport << chiudi finestra;
L'ho trovato sorprendente!
Carlo
Ri: Estrai la formula di previsione senza dover salvare la formula nella tabella datiFWIW, penso che Dave possa avere ragione. Sono presenti i messaggi "<< Ottieni stime" e "<< Ottieni componenti di varianza", ma non sono sempre disponibili (a seconda della natura dell'adattamento). Potrebbe valere la pena utilizzare 'ShowProperties()' nel tuo caso specifico per vedere.
Ri: Estrai la formula di previsione senza dover salvare la formula nella tabella datiNon sono sicuro che ci sia un modo per fare quello che vuoi.L'approccio che seguo è quello di sopprimere la valutazione della formula prima di salvare le formule di previsione:
dt << Sopprimi Formula Valutazione(1)