Script per esportare AIC in una nuova tabella di dati<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Sto confrontando i risultati AIC per più modelli nella piattaforma Fit Parametric Survival. A questo punto, ho uno script per eseguire tutti i modelli con cui produce più finestre, e copio/incollo l'AIC e altri output in un file excel uno per uno. Inutile al giorno, questo è un processo che richiede tempo e spreco. Sono un principiante in JSL, qualcuno sarebbe in grado di aiutarmi a produrre un processo automatizzato per estrarre AIC e altre informazioni dalle finestre multiple dei report e salvarle in un'unica finestra di dati? Le informazioni aggiuntive che sto valutando sono la convergenza dei parametri, le osservazioni utilizzate e il numero di valori censurati e non censurati.
Grazie per qualsiasi aiuto!
Utilizzo della macro VBA per importare dati in JMP e restituire i risultati JMP al foglio Excel su Weibull AnalysisCiao ragazzi,
Prima di tutto vorrei ringraziarti per aver condiviso i tuoi risultati di scripting e mi ha aiutato ad automatizzare il mio processo di query dei dati. sto usando VBA-Macro excel per copiare la mia tabella in JMP per eseguire l'analisi Weibull e ottenere i valori di Scale & Shape e copiarli nel mio file VBA-Macro excel. Di seguito è riportato il codice che ho usato. Spero che sarà utile anche per gli altri.
VBA-Macro Excel.
Sub JMP()
Dim app As JMP.Application
Dim doc As JMP.Document
Imposta app = CreateObject("JMP.Application")
app.Visible = Vero
Imposta doc = app.OpenDocument("C:\Users\ABC\Desktop\WS.jsl")
fine sost
Script JSL (salvati come formato WS.jsl)
//! <<>>.
dt = Apri( "C:\Utenti\ABC\Desktop\Libro1.xlsm" ); <<< JSL aprirà il file excel nella tabella dati JMP per eseguire l'analisi weibull di seguito>>>
fm = Distribuzione Vita(
Y( :Nome( "TTF,Hr" ) ),
Censore( :Censore ),
Codice censore( 1 ),
Frequenza( :Freq ),
<
Metodo dell'intervallo di confidenza (probabilità),
<
<
Tipo di intervallo (simultaneo),
<
{Probability Paper( Profiler( 1, Confidence Intervals( 1 ), Term Value( Name( "TTF,Hr" )(4846.6174375, Lock( 0 ), Show( 1 )) ) ) ),
Weibull Distribution( Profiler( 1, Confidence Intervals( 1 ), Term Value( Name( "TTF,Hr" )(4846.6, Lock( 0 ), Show( 1 )) ) ) ),
Weibull Quantile( Profiler( 1, Confidence Intervals( 1 ), Term Value( Probability( 0.5, Lock( 0 ), Show( 1 ) ) ) ) ),
Weibull Hazard( Profiler( 1, Confidence Intervals( 1 ), Term Value( Name( "TTF,Hr" )(4846.6, Lock( 0 ), Show( 1 )) ) ) ),
Weibull Density( Profiler( 1, Term Value( Name( "TTF,Hr" )(4846.6, Lock( 0 ), Show( 1 )) ) ) ), Custom Stima( Weibull, 0 )}
),
Invia a rapporto(
Dispatch( {"Compare Distributions"}, "Life Distribution", FrameBox, {Grid Line Order( 2 ), Reference Line Order( 3 )} ),
Dispatch( {"Statistiche", "Confronti modello"}, "", TableBox, {Ordina per colonna( 2, 1 )} )
)
);
// Per copiare automaticamente i dati della stima parametrica in una nuova tabella di dati (ad esempio: formato untitled.jmp)
fmrep = fm << Rapporto;
fmrep[Outline Box("Stima parametrica ?" )][Table Box( 1 )] << crea tabella dati combinati;
dt1 = Tabella dati corrente();
dt1 << Salva con nome( "c:\Utenti\ABC\Desktop\AAA.xlsx" ); // per salvare il file untitled.jmp come file excel (in questo caso lo avevo come AAA.xlsx) nella posizione del desktop.
Chiudi( dt, Nessun salvataggio );
Chiudi( dt1, Nessun salvataggio );
Gli script di cui sopra funziona perfettamente per me.
Ho solo pensato di contribuire a questa comunità con le mie recenti scoperte e apprendimenti.
Grazie!
Jim
Ri: Script per esportare AIC in una nuova tabella datiEUREKA!!! Grazie Jeff, Marco e Ian! Ragazzi, mi avete insegnato molto in poco tempo e mi avete dato la soluzione che mi farà risparmiare ore di inutili clic, copia e incolla!
Ora, se qualcuno di voi sa come aggiungere una colonna per il testo di avviso quando i modelli non convergono, sarebbe la ciliegina sulla torta. Ma sono contento di quello che abbiamo realizzato!
Ri: Script per esportare AIC in una nuova tabella datiQuando si utilizza By() in un avvio di piattaforma, JMP restituirà un elenco delle piattaforme risultanti. Senza di esso, JMP restituirà una singola piattaforma, non in un elenco.
Poiché gli esempi qui utilizzati By() avevano bisogno di indicizzare nell'elenco delle piattaforme per fare riferimento a uno specifico per uno per gruppo. Questo è il [1] in:
fmrep1[1][Outlinebox("Parametric ?")][TableBox(1)]<<make combined data table;Non stai usando By() in nessuno dei lanci della tua piattaforma, quindi non hai bisogno di [1].
Per ottenere tutte le tabelle in un'unica tabella di dati, sarebbe più semplice iniziare con tutti i report in un'unica finestra.
Puoi farlo usando New Window() per creare la tua finestra di report.
dt = Open( "$SAMPLE_DATA\Reliability\Tobit2.jmp" );
myWin = New Window( "My Window",
fm1 = dt << Fit Model(
Y( :YLow, :YHigh ),
Effects( :age, ),
Personality( Parametric Survival ),
Distribution( LogNormal ),
Run( Likelihood Ratio Tests( 1 ) ),
);
fm2 = dt << Fit Model(
Y( :YLow, :YHigh ),
Effects( :liquidity ),
Personality( Parametric Survival ),
Distribution( LogNormal ),
Run( Likelihood Ratio Tests( 1 ) ),
);
fm3 = dt << Fit Model(
Y( :YLow, :YHigh ),
Effects( :age, :liquidity ),
Personality( Parametric Survival ),
Distribution( LogNormal ),
Run( Likelihood Ratio Tests( 1 ) ),
);
);
combined = myWin[Outline Box( "Parametric ?" )][Table Box( 1 )] << make combined data table;
Si noti che non è necessario ottenere l'oggetto report, poiché abbiamo un riferimento alla finestra del report, myWin , Già.
Per ottenere una tabella simile a quella che mostri nel tuo post originale dovrai dividere () la tabella che ottieni dalla tabella dei dati combinati.
combined <<Split(
Split By( :Column 1 ),
Split( :Column 2 ),
Remaining Columns( Drop All )
);
So che vuoi anche una colonna per indicare quale modello rappresentano le righe. A seconda di come decidi quali modelli eseguire, potrebbe essere più semplice mantenere l'elenco da solo e aggiungere tu stesso una colonna alla tabella dei dati con tali informazioni.
Se non sai quali modelli hai specificato, è possibile estrarli dai rapporti di sopravvivenza parametrici ma non è così facile.
- Jeff
Ri: Script per esportare AIC in una nuova tabella datiVa bene, quindi ci stiamo avvicinando. Anche se ho incollato la sceneggiatura sbagliata, Jeff mi ha dato la risposta giusta. Il seguente script fornisce la tabella desiderata per i dati di esempio:
dt = Aprire ( "$SAMPLE_DATA/Affidabilità/Tobit2.jmp" ) ;
// Aggiungi una colonna "per" casuale
di Col = dt << Nuova colonna ( "Di" , Numerico , Nominale , Formula ( Intero casuale ( 1 , 2 ))) ;
// Crea il report invisibile
FM = dt << Modello adatto (
Y ( : YBasso , : YAlto ) ,
Effetti ( : età , : liquidità ) ,
Di ( : Di ) ,
Personalità ( Sopravvivenza parametrica ) ,
Distribuzione ( LogNormale ) ,
Correre ( Test del rapporto di verosimiglianza ( 1 ) ) ,
) ;
// Ottieni un riferimento al livello del report
fmrep = FM << Rapporto ;
fmrep [ 1 ][ Contorno ( "Parametrico?" )][ TableBox ( 1 )] << crea una tabella di dati combinati ;
Vicino ( dt , NoSalva ) ;
// Questo script funziona come dovrebbe!!
Ma perché è così quando rimuovo di Col = dt << Nuova colonna ( ...) E Di ( : Di ) , lo script non produce più una tabella?
E poiché il mio obiettivo è creare una singola tabella di dati combinata da più report, come faccio a far funzionare il seguente script di esempio:
dt = Aprire ( "$SAMPLE_DATA/Affidabilità/Tobit2.jmp" ) ;
// Crea il rapporto invisibile
FM1 = dt << Modello adatto (
Y ( : YBasso , : YAlto ) ,
Effetti ( : età , ) ,
Personalità ( Sopravvivenza parametrica ) ,
Distribuzione ( LogNormale ) ,
Correre ( Test del rapporto di verosimiglianza ( 1 ) ) ,
) ;
FM2 = dt << Modello adatto (
Y ( : YBasso , : YAlto ) ,
Effetti ( : liquidità ) ,
Personalità ( Sopravvivenza parametrica ) ,
Distribuzione ( LogNormale ) ,
Correre ( Test del rapporto di verosimiglianza ( 1 ) ) ,
) ;
FM3 = dt << Modello adatto (
Y ( : YBasso , : YAlto ) ,
Effetti ( : età , : liquidità ) ,
Personalità ( Sopravvivenza parametrica ) ,
Distribuzione ( LogNormale ) ,
Correre ( Test del rapporto di verosimiglianza ( 1 ) ) ,
) ;
// Ottieni un riferimento al livello del report
fmrep1 = FM1 << Rapporto ;
fmrep1 [ 1 ][ Contorno ( "Parametrico?" )][ TableBox ( 1 )] << crea una tabella di dati combinati ;
GRAZIE A TUTTI!!!
JP
Ri: Script per esportare AIC in una nuova tabella datiHai alcuni errori di sottoscrizione in questa riga:
fmrep[1]["Parameter Estimates"][TableBox(1)] << Make Combined Data Table;
Invece dovrebbe essere:
fmrep[Outlinebox("Parametric ?")][TableBox(1)]<<make combined data table;Potresti usare Outlinebox(1) o inserire il titolo completo ma il carattere jolly "?" lo rende un po' più generale.
- Jeff
Ri: Script per esportare AIC in una nuova tabella datiMark & Ian, grazie per il tuo tempo! Tuttavia, non riesco ancora a capire bene, perché la mia versione dello script di seguito non produrrà ancora una tabella. Ho provato a combinare i tuoi due esempi:
dt = Aprire ( "$SAMPLE_DATA/Classe grande.JMP" ) ;
biv = dt << Bivariato (
Y ( : altezza ) ,
X ( : peso ) ,
Linea adatta ,
Di ( : sesso )
) ;
fmrep = FM << Rapporto ;
fmrep [ 1 ][ "Stime dei parametri" ][ TableBox ( 1 )] << Crea una tabella di dati combinati ;
Qualche idea?
Grazie,
JP
Ri: Script per esportare AIC in una nuova tabella datiDove ho usato "Parameter Estimates" nel pedice per scegliere come target una particolare casella di contorno, dovresti invece usare "Parametric Survival Fit - Model 633 ".
Ri: Script per esportare AIC in una nuova tabella datiOps! Vedo che volevi un tavolo, non un diario. Nel qual caso "Crea tabella di dati combinati" è probabilmente più diretto.
Ri: Script per esportare AIC in una nuova tabella datiSulla base di ciò che Mark ha spiegato, ecco un modo:
dt = Aprire ( "$SAMPLE_DATA/Affidabilità/Tobit2.jmp" ) ;
// Aggiungi una colonna "per" casuale
di Col = dt << Nuova colonna ( "Di" , Numerico , Nominale , Formula ( Intero casuale ( 1 , 2 ))) ;
// Crea il report invisibile
FM = dt << Modello adatto (
Y ( : YBasso , : YAlto ) ,
Effetti ( : età , : liquidità ) ,
Di ( : Di ) ,
Personalità ( Sopravvivenza parametrica ) ,
Distribuzione ( LogNormale ) ,
Correre ( Test del rapporto di verosimiglianza ( 1 ) ) ,
Invisibile
) ;
// Ottieni un riferimento al livello del report
fmrep = FM << Rapporto ;
// Questo sarà un elenco, un elemento per gruppo 'per'
contornoTitolo = fmRep << OttieniTitolo ;
// Crea una casella di visualizzazione vuota
lub = LineUpBox ( NCol ( 1 )) ;
// Aggiungi il contenuto di cui abbiamo bisogno
Per ( o = 1 , o <= NArticoli ( contornoTitolo ) , o ++,
lub << Aggiungere (
OutlineBox ( contornoTitolo [ o ] ,
( fmRep [ o ])[ TableBox ( 1 )] ;
) ;
) ;
) ;
Vicino ( dt , NoSalva ) ;
// Crea un diario
Nuova finestra ( "Rapporto" , << rivista , lub ) ;
L'unica difficoltà è sapere quali table box includere. Per capirlo, fai clic con il pulsante destro del mouse sul triangolo del nodo del contorno, quindi seleziona Modifica> Mostra struttura ad albero.
Ri: Script per esportare AIC in una nuova tabella datiGrazie per la tua pronta risposta, Marco!! È stato molto utile ed educativo, anche se all'inizio non ha prodotto la tabella dei dati fino a quando non ho riscritto l'ultimo bit come
Rapporto ( biv [ 1 ] )[ "Stime dei parametri" ][ TableBox ( 1 )] << Crea una tabella di dati combinati ;
seguendo questo esempio: 46983 - Come creare una tabella dati combinata di statistiche riassuntive da un report di distribuzione quando si utilizza una variabile per .
Tuttavia, non sono ancora in grado di tradurlo nel mio flusso di lavoro, forse perché la tabella che desidero non ha titolo (ad esempio "Stime dei parametri"). Di seguito è riportato un esempio di un rapporto. La parte cerchiata è ciò che voglio trasformare in una tabella di dati. Ho incluso un esempio dello script che sto usando in fondo. La sfida è come aggiungere i dati cerchiati da ~ 100 rapporti generati contemporaneamente in una tabella di dati. Ho aggiunto uno screenshot del tavolo finale che sto cercando, che sto attualmente inserendo manualmente in Excel (che schifo). Avrei anche bisogno di un modo per aggiungere il modello # (ad esempio 633) a ciascuna riga.
Grazie ancora per il vostro aiuto!
JP


Ecco un esempio dello script che sto usando:
Modello adatto (
Censurare ( : Disperso ) ,
Codice censore ( "0" ) ,
Y ( : giorni alla dispersione ) ,
Effetti ( : Peso ,: Anno ,: Fonte ,: Traslocazione ,: Trattamento ,: Geologia ,: Luogo , ) ,
Personalità ( Sopravvivenza parametrica ) ,
Distribuzione ( Frechet ) ,
Correre ( Test del rapporto di verosimiglianza ( 1 ) ) ,
SendToReport (
Spedizione (
{} ,
Adattamento parametrico di sopravvivenza ,
OutlineBox ,
{ Imposta titolo ( "Parametric Survival Fit - Modello 632" )}
)
)
) ;
Modello adatto (
Censurare ( : Disperso ) ,
Codice censore ( "0" ) ,
Y ( : giorni alla dispersione ) ,
Effetti ( : Peso ,: Anno ,: Fonte ,: Traslocazione ,: Trattamento ,: Geologia , ) ,
Personalità ( Sopravvivenza parametrica ) ,
Distribuzione ( Frechet ) ,
Correre ( Test del rapporto di verosimiglianza ( 1 ) ) ,
SendToReport (
Spedizione (
{} ,
Adattamento parametrico di sopravvivenza ,
OutlineBox ,
{ Imposta titolo ( "Parametric Survival Fit - Modello 633" )}
)
)
) ;
Ri: Script per esportare AIC in una nuova tabella datiÈ possibile produrre questo risultato in modo interattivo facendo clic con il pulsante destro del mouse sulla tabella con il valore AIC nel rapporto e selezionando Crea tabella dati combinati.
L'equivalente di script richiede l'invio di un messaggio con lo stesso nome del comando di menu all'oggetto casella di visualizzazione responsabile della presentazione del valore AIC nel report. Usa il seguente esempio per questa idea:
- apri Grande Classe
- lancia la piattaforma Bivariata con altezza rispetto a peso e sesso come variabile di raggruppamento
- inserire una linea in entrambi i gruppi
- ottenere il riferimento al livello del report
- sottoporre ripetutamente l'albero di visualizzazione nel report al livello della prima tabella (ad es. stime dei parametri)
- inviare il messaggio
tt = Aprire ( "$SAMPLE_DATA/Classe grande.JMP" ) ;
biv = dt << Bivariato (
Y( : altezza ) ,
X( : peso ) ,
Linea adatta ,
Di( : sesso )
);
biv4 = biv << Rapporto ;
bivr[ 1 ][ "Stime dei parametri" ][ TableBox ( 1 )] << Crea una tabella di dati combinati ;