¿Cómo seleccionar y excluir por combinación UniqueVals de dos columnas?Así que estoy perplejo aquí. Estoy tratando de generar un dt filtrado de solo datos estadísticamente significativos, basado en dos columnas: Chart_ID y Recipe_ID. Puedo hacer que funcione con una sola columna, pero no puedo descifrar dos columnas.
- Estoy trazando los datos brutos usando Oneway (y = media, x = cámara, BY: Chart_ID, Recipe_ID) y ejecutando la prueba tTest de Tukey de todos los pares.
- Luego, tomando la tabla de datos combinada de pVal.
- luego seleccionando todas las filas donde pVal> 0.05 y excluyendo
- luego, creando una lista resumida de los UniqueVals por Chart_ID (estos son todos los Chart_ID con pVals significativos).
- luego seleccionando todas las filas en la fuente dt con UniqueVals coincidentes
- luego invirtiendo la selección y excluyendo
- -> esto deja a la fuente dt solo con datos que tTest son significativos por Chart_ID.
No puedo averiguar cómo agregar el Recipe_ID en el resumen UniqueVals.
¿Existe una mejor manera de terminar con una fuente dt que haya excluido todos los Gráficos / Recetas que no son significativas?
//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;AnalíticaTabla de datosScriptingRe: ¿Cómo seleccionar y excluir por combinación de UniqueVals de dos columnas?¡Hola, aliegner1!
Tal vez no lo entiendo, pero podría intentar seleccionar valores p significativos, crear subconjuntos de una nueva tabla y luego resumir por Chart_ID y Recipe_ID.
De nuevo, tal vez no lo entiendo, pero lo que estás haciendo huele a " p hackeo ".Como mínimo, le recomiendo que lea la Declaración de ASA sobre valores p y luego busque Tasa de descubrimiento falso en el Índice de estadísticas en la Ayuda de JMP.
¡Buena suerte!
Re: ¿Cómo seleccionar y excluir por combinación de UniqueVals de dos columnas?Gracias por la información. Leí la declaración de ASA y tiene sentido principalmente. Sin embargo, mi situación (y supongo que muchas otras personas) están lidiando con miles de gráficos y necesito una forma de filtrar y recortar rápidamente la lista para ver los más importantes. Aquí hay una captura de pantalla como ejemplo. Tengo 5000 gráficos para examinar y necesito un buen método para identificar los más importantes para pasar tiempo mirando. Debo trazar la línea en alguna parte.
También busqué FDR, pero no creo que esto se aplique, ya que solo estoy usando una única característica X. No hay ningún FDR sucediendo con solo una X.

Respecto al seleccionar y resumir:
Esa es la cosa. No puedo averiguar cómo obtener el resumen para luego traducirlo para permitirme seleccionar los datos de origen.
Anteriormente, estaba seleccionando una sola columna (Chart_ID) y luego volvía a convertir a numérica porque Resumir muestra el carácter. Desde allí, pude seleccionar la fuente dt Chart_ID Col por la lista de UniqueVals (que era Chart_ID).
¿Cómo hacer que esto suceda con dos columnas diferentes que son numéricas y de caracteres?
Re: ¿Cómo seleccionar y excluir por combinación de UniqueVals de dos columnas?Puede convertir la columna numérica en caracteres y luego concanear las dos columnas para obtener una lista de cadenas de comparación. Luego use esa lista para seleccionar filas deseadas (o use matrices asociativas). No tengo un conjunto de datos de ejemplo, así que aquí hay una especie de ejemplo:
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);Utilice Scripting Index para comprender mejor lo que está sucediendo (y para depurarlo si es necesario).
Re: ¿Cómo seleccionar y excluir por combinación de UniqueVals de dos columnas?@jthi
Gracias por los consejos, pero estoy un poco confundido acerca de tu guión. Parece que solo está seleccionando algunas veces, pero no hace nada para regresar a una fuente dt.
Puedo seleccionar los pVal de la tabla de datos combinados muy bien. El problema que tengo es tratar de resumir luego en dos columnas en la Tabla de datos combinados, luego volver a los datos de origen principal y seleccionar usando el resumen.
Encontré un conjunto de muestra que parece que podemos usar para hablar sobre este problema.
No puedo averiguar cómo resumir de nuevo a la fuente dt usando las dos columnas BY
Por (: ensayo,: aceite 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;