Comment sélectionner et exclure par combinaison UniqueVals de deux colonnes ?Je suis donc perplexe ici. J'essaie de générer un dt filtré contenant uniquement des données statistiquement significatives, basées sur deux colonnes : Chart_ID et Recipe_ID. Je peux le faire fonctionner avec une seule colonne, mais je n'arrive pas à comprendre deux colonnes.
- Je trace les données brutes à l'aide de Oneway (y=mean, x=chamber, BY:Chart_ID, Recipe_ID) et j'exécute le tTest Tukey All-pairs.
- Ensuite, en prenant le tableau de données pVal combiné.
- puis en sélectionnant toutes les lignes où pVal >0,05 et en excluant
- puis créer une liste récapitulative des UniqueVals par Chart_ID (il s'agit de tous les Chart_ID avec des pVals significatifs.)
- puis en sélectionnant toutes les lignes de la source dt avec les UniqueVals correspondants
- puis inverser la sélection et exclure
- -> cela laisse la source dt avec uniquement les données tTest significatives par Chart_ID.
Je n'arrive pas à comprendre comment ajouter le Recipe_ID dans le résumé UniqueVals.
Existe-t-il une meilleure façon de se retrouver avec une source dt qui a exclu tous les graphiques/recettes qui ne sont pas significatifs ?
//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;Mélange et nettoyage des donnéesRe : Comment sélectionner et exclure par combo UniqueVals de deux colonnes ?ça a marché! une victoire aussi simple. envoyer une valeur concaténée à une chaîne.Re : Comment sélectionner et exclure par combo UniqueVals de deux colonnes ?Ma précédente solution Associative Array() ne fonctionnera pas correctement s'il y a des valeurs en double dans les colonnes (cela pourrait être assez facilement corrigé), donc j'utilise la version for-loop.
Est-ce que cela fait ce que vous voulez ?
Names Default To Here(1);
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( :batch),
By(:trial, :popcorn),
//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 << set name( "pValue PairWise by Channel Tukey");
/***********************************/
/**********************************/
pVals = Loc(dt1:"p-Value"n << get as matrix <= 0.05);
comparisonStrings = {};
For(i = 1, i <= N Items(pVals), i++,
Insert Into(comparisonStrings, char(dt1:trial[pVals[i]]) || dt1:popcorn[pVals[i]]);
);
show(comparisonStrings);
dtPopCorn << clear select;
dtPopCorn << select where(contains(comparisonStrings, char(:trial)||:popcorn));Seule la combinaison avec une valeur de p inférieure à 0,05 est trial = 2 et popcorm = gourmet.

Re : Comment sélectionner et exclure par combo UniqueVals de deux colonnes ?@jthi
Merci pour les conseils, mais je suis un peu confus au sujet de votre script. Il semble qu'il ne fasse que sélectionner quelques fois mais ne fait rien pour revenir à un dt source.
Je peux très bien sélectionner les pVal dans la table de données combinées. Le problème que j'ai est d'essayer de résumer ensuite par deux colonnes dans le tableau de données combiné, puis de revenir aux données source principales et de sélectionner à l'aide du résumé.
J'ai trouvé un ensemble d'échantillons qui ressemble à ce que nous pouvons utiliser pour parler de ce problème.
Je n'arrive pas à comprendre comment résumer à la source dt en utilisant les deux colonnes BY
Par(:essai, :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;Re : Comment sélectionner et exclure par combo UniqueVals de deux colonnes ?Vous pouvez convertir la colonne numérique en caractère, puis concaténer les deux colonnes pour obtenir la liste des chaînes de comparaison. Utilisez ensuite cette liste pour sélectionner les lignes souhaitées (ou utilisez des tableaux associatifs). N'ayant pas d'exemple de jeu de données, voici une sorte d'exemple :
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);Utilisez l'index de script pour mieux comprendre ce qui se passe (et pour le débogage si nécessaire).
Re : Comment sélectionner et exclure par combo UniqueVals de deux colonnes ?Merci pour l'info. J'ai lu la déclaration ASA et cela a du sens pour la plupart. Cependant, ma situation (et je suppose que beaucoup d'autres personnes) traitent des milliers de graphiques et j'ai besoin d'un moyen de filtrer et de réduire rapidement la liste pour examiner les plus importants. Voici une capture d'écran à titre d'exemple. J'ai 5000 graphiques à parcourir et j'ai besoin d'une bonne méthode pour identifier les plus importants à examiner. Je dois tracer la ligne quelque part.
J'ai également recherché FDR, mais je ne pense pas que cela s'applique, car je n'utilise qu'une seule caractéristique X. Il n'y a pas de FDR avec un seul X.

Concernant la sélection et le résumé :
C'est ca le truc. Je n'arrive pas à comprendre comment obtenir le résumé pour ensuite le traduire en me permettant de sélectionner les données source.
Auparavant, je sélectionnais une seule colonne (Chart_ID) puis la reconvertissais en numérique car Summarize génère un caractère. À partir de là, j'ai pu sélectionner la source dt Chart_ID Col par la liste des UniqueVals (qui étaient les Chart_ID).
Comment faire en sorte que cela se produise avec deux colonnes différentes qui sont numériques et de caractères ?
Re : Comment sélectionner et exclure par combo UniqueVals de deux colonnes ?Salut, aliegner1 !
Peut-être que je ne comprends pas, mais vous pourriez essayer de sélectionner des valeurs p significatives, de créer un sous-ensemble d'un nouveau tableau, puis de résumer par Chart_ID et Recipe_ID ?
Encore une fois, peut-être que je ne comprends pas, mais ce que tu fais sent le " piratage informatique ".À tout le moins, je vous recommande de lire la déclaration ASA sur les p-values, puis de rechercher le taux de fausses découvertes dans l'index des statistiques sous l'aide de JMP.
Bonne chance!