Estrarre i dati da un'analisi unidirezionaleSto cercando di creare uno script per prendere il valore p dall'analisi unidirezionale e rilasciarlo in una nuova colonna nella tabella utilizzata per l'analisi.
Ho esaminato la guida allo scripting di JMP 13 ea pagina 690 c'è "Estrai valori da un'analisi in un report" che sembra essere quello che voglio. Tuttavia seguendolo come guida, non sembra funzionare con oneway e anovas...
Ecco lo script elencato che ho modificato per funzionare con il set di dati di esempio bigclass mentre stavo cercando di risolvere il codice:
Deletesymbols();
dt=Open("$SAMPLE_DATA\Big Class.jmp");
//creates a oneway analysis of big class similar how my data will be interpreted
anova=Oneway(
Y(:height),
X(:age),
With Control(1, {12}),
Means(1), Mean Diamonds(1), Comparison Circles(1),
By(:sex)
);
anova<<show tree structure;
/*
Female LDS threshold results are in OultineBox(9), Levels (age) is StringColBox(5), pValues are NumberColBox(15)
Male LDS threshold results are in OultineBox(18), Levels (age) is StringColBox(10), pValues are NumberColBox(30)
*/
// Should create a report that I can use to extract data from the anova analysis based off the original script
report(anova) [Outline Box(9)] << Close( 0 ); <BR />report(anova) [Outline Box(18)] << Close( 0 );
reportanova = anova << Report;
// Should extract the level (age) and pvalues for females
agef = reportanova[Outline Box(9)][String Col Box(5)] << Getaslist;
pvalsf = reportanova[Outline Box(9)][NumberColBox(15)] << Getaslist;
// Should extract the level (age) pvalues for males
agem = reportanova[Outline Box(18)][String Col Box(10)] << Getaslist;
pvalsm = reportanova[Outline Box(18)][NumberColBox(30)] << Getaslist;
//column creation to recieve extracted data
dt<<new column("p-value",Numeric, "Continuous");
//should add the collected p-value to the data table in the new column, matched to the correct row based on sex and age <FONT color="#FF0000">(untested)</FONT>.
For Each Row( p-value =
match(sex,
"f",match(age,
show(agef[1]),show(pvalsf[1]),
show(agef[2]),show(pvalsf[2]),
show(agef[3]),show(pvalsf[3]),
show(agef[4]),show(pvalsf[4]),
show(agef[5]),show(pvalsf[5]),
show(agef[6]),show(pvalsf[6]),
),
"m",match(age,
show(agem[1]),show(pvalsm[1]),
show(agem[2]),show(pvalsm[2]),
show(agem[3]),show(pvalsm[3]),
show(agem[4]),show(pvalsm[4]),
show(agem[5]),show(pvalsm[5]),
show(agem[6]),show(pvalsm[6]),
),
);*/
Ma il registro incorporato presenta un errore quando si inserisce l'anova in un rapporto:
Send Expects Scriptable Object in accesso o valutazione di 'Send' , Report( anova )[Outline Box( 9 )] << /*####*/Close( 0 ) /*####*/
Il debugger fallisce nello stesso posto e fornisce questi come variabili:
Variabile Valore
anova {Solo andata[], Senso Unico[]}
dt Data Table("grande Classe")
reportanova {DisplayBox[OutlineBox], DisplayBox[OutlineBox]}
Quindi posso solo supporre che ciò che funziona con Bivariate non si estenda a Oneway.Ho persino cambiato le variabili, accorciando anova in anov nel caso fosse una variabile/comando/qualcosa non corrispondente, ma continua a fallire.C'era un messaggio precedente dal 2011 con un codice di esempio, ma era confuso con informazioni sui caratteri che non sarebbero state chiarite in parole, una finestra di script jmp o il salvataggio come file html in modo che potessi effettivamente leggerlo ...
Questo devo risolverlo prima di poter vedere se il mio codice per aggiungere il valore p alla riga corretta funziona ...
Grazie.
Re: estrarre i dati da un'analisi unidirezionaleSe qualcuno volesse anche vedere come ho ottenuto l'aggiunta del valore alla tabella abbinata al sesso e all'età lavorativa:
//creates a new column
dt<<NEW column=""></NEW>
Potrebbe esserci un modo più semplice o più ordinato per farlo, ma funziona. Anche le istruzioni if annidate e i cicli for hanno funzionato non appena mi sono reso conto della mancata corrispondenza del tipo di dati dell'età originale come "numero" e l'elenco di "LSD Threshold Matrix" era "carattere".
Re: estrarre i dati da un'analisi unidirezionalePer quello che vale, ho ripulito il confuso inviare dal 2011.
Re: estrarre i dati da un'analisi unidirezionaleUna forte raccomandazione per qualcosa che insegniamo come "best practice": non usare il indici assoluti mostrati nel diagramma ad albero del display. Puoi scrivere i pedici corretti in questo modo, quindi perché no?Perché in questo modo è difficile da comporre, leggere e, quindi, mantenere, ed è fragile. Usa il indicizzazione relativa come illustrato nella mia soluzione. È più facile scrivere, leggere (auto-documentarsi?) e mantenere. È anche molto meno fragile. Sii egoista e pensa solo a te stesso!
Ricorda che anche JMP cambia: le versioni introducono nuove sezioni nei report o spostano sezioni, tu modifichi le preferenze della piattaforma, qualcun altro utilizza il tuo script con preferenze diverse e così via. Sceneggiatura difensiva anticipa tale variazione.Gli indici relativi sono robusti contro di esso.
Alcune persone pensano che questa scelta sia solo una questione di stile. Spero che non subiscano mai il cambiamento.
(E non farmi iniziare a usare la direttiva dell'interprete Send To Report ...)
Re: estrarre i dati da un'analisi unidirezionaleFunziona, grazie!
Quindi, per chiunque altro guardi qui... e per essere sicuro di capire e non solo di copiare e incollare il codice, in:
f ages <SPAN class="token operator">=</SPAN> anova rpt<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token string">"LSD Threshold Matrix"</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token function">StringColBox</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Get</SPAN><SPAN class="token punctuation">;</SPAN>
L'opzione 'By()' a senso unico crea due istanze separate all'interno del rapporto, suppongo che questo sia il motivo per cui '<
anova rpt<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN>
sta puntando al primo gruppo creato da 'By(:sex)' durante la creazione del oneway, che è 'F', e 'anova rpt[2]' si riferisce al gruppo 2 'M'.T lo script originale della guida allo scripting non ne aveva bisogno poiché c'era solo una sezione nel report da trattare quando era un semplice bivariato?
Quindi il segmento:
<SPAN class="token punctuation">[</SPAN><SPAN class="token string">"LSD Threshold Matrix"</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token function">StringColBox</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN>
consente a jmp di saltare direttamente alla sezione "LSD Threshold Matrix" del rapporto e reimposta lo schema di numerazione, motivo per cui la colonna della stringa è ora referenziata da ...Box(1), ma per l'intera struttura ad albero, è ... Scatola(5).Con tutti e tre questi modi equivalenti per ottenere l'elenco delle età femminili di riferimento dalla struttura ad albero:
f ages <SPAN class="token operator">=</SPAN> anova rpt<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token string">"LSD Threshold Matrix"</SPAN><SPAN class="token punctuation">]</SPAN><SPAN class="token punctuation">[</SPAN><SPAN class="token function">StringColBox</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Get</SPAN><SPAN class="token punctuation">;<BR />f ages = anova rpt[1][Outline Box(9)][StringColBox(1)] << Get;<BR />f ages = anova rpt[1][StringColBox(5)] << Get;<BR /></SPAN>
Quindi se il By (:sex) è commentato da un verso, la struttura ad albero è semplificata e:
ages <SPAN class="token operator">=</SPAN> anova rpt[1]<SPAN class="token punctuation">[</SPAN><SPAN class="token function">StringColBox</SPAN><SPAN class="token punctuation">(5</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Get</SPAN><SPAN class="token punctuation">;<BR />ages = anova rpt[StringColBox(5)] << Get;<BR /></SPAN>
entrambi funzionano ora perché [1] è compreso e non è necessario specificarlo poiché [2] non è più nemmeno un'opzione.
Re: estrarre i dati da un'analisi unidirezionaleEsistono regole e sintassi generali che si applicano a tutte le piattaforme JMP (report) ma la composizione (ovvero, caselle di visualizzazione nidificate specifiche) varia, ovviamente. Prova questo approccio:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
//creates a oneway analysis of big class similar how my data will be interpreted
anova = dt << Oneway(
Y( :height ),
X( :age ),
With Control( 1, {12} ),
Means( 1 ),
Mean Diamonds( 1 ),
Comparison Circles( 1 ),
By( :sex )
);
anova rpt = anova << Report;
f ages = anova rpt[1]["LSD Threshold Matrix"][StringColBox(1)] << Get;
f pVal = anova rpt[1]["LSD Threshold Matrix"][NumberColBox(2)] << Get;
m ages = anova rpt[2]["LSD Threshold Matrix"][StringColBox(1)] << Get;
m pVal = anova rpt[2]["LSD Threshold Matrix"][NumberColBox(2)] << Get;