Come selezionare ed escludere dalla combinazione UniqueVals di due colonne?Quindi sono perplesso qui. Sto cercando di produrre un dt schermato di soli dati statisticamente significativi, in base a due colonne: Chart_ID e Recipe_ID. Posso farlo funzionare con una singola colonna ma non riesco a capire due colonne.
- Sto tracciando i dati grezzi utilizzando Oneway (y=mean, x=chamber, BY:Chart_ID, Recipe_ID) ed eseguendo il tTest Tukey di tutte le coppie.
- Quindi prendendo la tabella dei dati pVal combinata.
- quindi selezionando tutte le righe dove pVal >0.05 ed escludendo
- quindi creando un elenco riepilogativo di UniqueVals per Chart_ID (questo è tutto Chart_ID con pVals significativi.)
- quindi selezionando tutte le righe in source dt con UniqueVals matching
- quindi invertendo la selezione ed escludendo
- -> questo lascia la sorgente dt con solo i dati che sono tTest significativi per Chart_ID.
Non riesco a capire come aggiungere il Recipe_ID nel riepilogo UniqueVals.
C'è un modo migliore per finire con una fonte dt che ha escluso tutti i grafici/ricette che non sono significativi?
//dtSPC --> my source data, raw SPC data. Need to exclude rows from Charts, Recipes with high pVals
/*plotting a basic Fit YbyX just to get pValues. Formatting and style done on final plot*/
ow1 = Oneway(
Y( :MEAN ),
X( :CHAMBER ),
By(:CHART_ID, :RECIPE),
//All pairs Tukey HSD test
All Pairs(
1,
Confidence Quantile( 0 ),
Difference Matrix( 0 ),
LSD Threshold Matrix( 0 ),
Connecting Letters Report( 0 ),
Ordered Differences Report( 1 )
),
);
/***********************************/
/***********************************/
// Create the combined data table, using xPath (return a list of the OutlineBoxes from the report that have the title Ordered Differences Report. Then, use the first of those to make the combined data table.)
outlines = (Report( ow1[1] ) << Top Parent) << XPath( "//OutlineBox[text()='Ordered Differences Report']" );
dt1 = outlines[1][Table Box( 1 )] << Make Combined Data Table;
dt1 = current data table();
dt1 << set name( "pValue PairWise by Channel Tukey");
dt1:CHART_ID << Data type( Numeric ) << Set Modeling Type( Nominal );
/***********************************/
/**********************************/
//Screen and show only the CHART_ID's w/ a Tukey pair pVal<0.05
//exclude all high pVal rows, leaving only low pVal Channels. Does not work in reverse.
dt1 << select where(:name("p-Value") > 0.05);
dt1 << exclude;
dt1 << clear select;
//create a list of remaining Unique CHART_ID's
summarize(dt1, uniqueVals=by(:CHART_ID));
//Convert to numeric
For( i = 1, i <= N Items(uniqueVals ), i++,
uniqueVals[i] = Num(uniqueVals[i] )
);
//extra, just to look at the data
//dtUnique = New Table( "uniqueVals less 0.05");
//dtUnique << New Column( "CHART_ID", Values(uniqueVals));
//select on SPC source data just the channels w/ low pVals
//need to choose SPC data table
dtSPC << clear select;
dtSPC << select where( contains( uniqueVals, :CHART_ID));
//invert and exclude, leaving only low pVal CHART_ID's
dtSPC << invert row selection << exclude;
dtSPC << clear select;AnalisiTabella datiScriptingRe: Come selezionare ed escludere dalla combinazione UniqueVals di due colonne?Ciao, aliegner1!
Forse non capisco, ma potresti provare a selezionare valori p significativi, sottoimpostare una nuova tabella, quindi riassumere per Chart_ID e Recipe_ID?
Di nuovo, forse non capisco, ma quello che stai facendo sa di " p hacking ".Per lo meno, ti consiglio di leggere l'ASA Statement on p-Values e quindi di cercare False Discovery Rate nell'indice delle statistiche sotto la Guida di JMP.
In bocca al lupo!
Re: Come selezionare ed escludere dalla combinazione UniqueVals di due colonne?Grazie per le info. Ho letto la dichiarazione dell'ASA e per lo più ha senso. Tuttavia, la mia situazione (e presumo molte altre persone) ha a che fare con migliaia di grafici e ho bisogno di un modo per vagliare e ridurre rapidamente l'elenco per guardare i più importanti. Ecco uno screenshot come esempio. Ho 5000 grafici da esaminare e ho bisogno di un buon metodo per identificare quelli più importanti da esaminare. Devo tracciare la linea da qualche parte.
Ho anche cercato FDR, ma non credo che questo si applichi, poiché sto usando solo una singola caratteristica X. Non succede nessun FDR con una sola X.

Per quanto riguarda la selezione e il riepilogo:
Questa è la cosa. Non riesco a capire come ottenere il riepilogo per poi tradurre per farmi selezionare i dati di origine.
In precedenza, selezionavo una singola colonna (Chart_ID), quindi riconvertivo in numerico perché Riepiloga caratteri di output. Da lì, sono stato in grado di selezionare la sorgente dt Chart_ID Col dall'elenco di UniqueVals (che era il Chart_ID).
Come farlo accadere con due colonne diverse che sono numeriche e caratteri?
Re: Come selezionare ed escludere dalla combinazione UniqueVals di due colonne?È possibile convertire la colonna numerica in carattere e quindi concatenare le due colonne per ottenere un elenco di stringhe di confronto. Quindi usa quell'elenco per selezionare le righe desiderate (o usa gli array associativi). Non ho un set di dati di esempio, quindi ecco una sorta di esempio:
Names Default To Here(1);
dt = New Table("Untitled 22",
Add Rows(5),
Compress File When Saved(1),
New Column("CHART_ID",
Character,
"Nominal",
Set Values({"123", "1", "12", "0", "135"})
),
New Column("RECIPE",
Character,
"Nominal",
Set Values({"A", "A", "B", "B", "C"})
),
New Column("pval",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([0.1, 0.001, 0.051, 0.002, 0.1])
)
);
pVals = Loc(dt:pval << get as matrix > 0.05); //get rows over 0.05
comparisonStrings = {};
For(i = 1, i <= N Items(pVals), i++,
Insert Into(comparisonStrings, char(dt:CHART_ID[pVals[i]]) || dt:RECIPE[pVals[i]]);
);
wait(1);
dt << Select Where(Contains(comparisonStrings, char(:CHART_ID)||:RECIPE));
wait(1);
dt << clear select;
wait(1);
aa = Associative Array(Eval List(dt:CHART_ID[pVals]), EvalList(dt:RECIPE[pVals]));
dt << Select Where(Contains(aa, :CHART_ID) & aa[:CHART_ID] == :RECIPE);Usa Scripting Index per capire meglio cosa sta succedendo (e per il debug se necessario).
Re: Come selezionare ed escludere dalla combinazione UniqueVals di due colonne?@jthi
Grazie per i suggerimenti, ma sono un po' confuso riguardo al tuo script. Sembra che stia solo selezionando alcune volte ma non fa nulla per tornare a un dt di origine.
Posso selezionare bene i pVal dalla tabella dei dati combinati. Il problema che sto riscontrando è provare a riassumere per due colonne nella tabella dei dati combinati, quindi tornare ai dati di origine principale e selezionare utilizzando il riepilogo.
Ho trovato un set di campioni che sembra che possiamo usare per parlare di questo problema.
Non riesco a capire come riassumere alla fonte dt usando le due colonne BY
Da(:trial, :oil amt),
dtPopCorn = Open( "$SAMPLE_DATA/Popcorn.jmp" );
/*plotting a basic Fit YbyX just to get pValues. Formatting and style done on final plot*/
ow1 = Oneway(
Y( :yield ),
X( :popcorn ),
By(:trial, :oil amt),
//All pairs Tukey HSD test
All Pairs(
1,
Confidence Quantile( 0 ),
Difference Matrix( 0 ),
LSD Threshold Matrix( 0 ),
Connecting Letters Report( 0 ),
Ordered Differences Report( 1 )
),
);
/***********************************/
/***********************************/
// Create the combined data table, using xPath (return a list of the OutlineBoxes from the report that have the title Ordered Differences Report. Then, use the first of those to make the combined data table.)
outlines = (Report( ow1[1] ) << Top Parent) << XPath( "//OutlineBox[text()='Ordered Differences Report']" );
dt1 = outlines[1][Table Box( 1 )] << Make Combined Data Table;
dt1 = current data table();
dt1 << set name( "pValue PairWise by Channel Tukey");
dt1:trial << Data type( Numeric ) << Set Modeling Type( Nominal );
/***********************************/
/**********************************/
//Screen and show only the trial's w/ a Tukey pair pVal<0.05
//exclude all high pVal rows, leaving only low pVal Channels. Does not work in reverse.
dt1 << select where(:name("p-Value") > 0.5); //I know...just setting 0.5 so that one row stands out.
dt1 << exclude;
dt1 << clear select;
//create a list of remaining Unique trial's
summarize(dt1, uniqueVals=by(:trial));
//Convert to numeric
For( i = 1, i <= N Items(uniqueVals ), i++,
uniqueVals[i] = Num(uniqueVals[i] )
);
//extra, just to look at the data
//dtUnique = New Table( "uniqueVals less 0.5");
//dtUnique << New Column( "trial", Values(uniqueVals));
//select on SPC source data just the channels w/ low pVals
//need to choose SPC data table
dtPopCorn << clear select;
dtPopCorn << select where( contains( uniqueVals, :trial));
//invert and exclude, leaving only low pVal trial's
dtPopCorn << invert row selection << exclude;
dtPopCorn << clear select;