Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?J'ai rassemblé le JSL suivant pour filtrer d'abord les valeurs aberrantes dans les données, puis obtenir le Ppk, mais je note que mon script est incorrect car lorsque je filtre les valeurs aberrantes en excluant toutes les lignes, j'exclus les points de données non aberrants pour d'autres processus. paramètres.
Pour définir les valeurs aberrantes, mon critère préféré est que tout ce qui se situe en dehors de Q1/Q3 +/- 1,5xIQR est une valeur aberrante, c'est ce que (je pense) j'utilise ci-dessous.
Names Default To Here (1);
Clear Log ();
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
col_names = dt << Get Column Group("Processes"); // Column Group should pre-exist.
obj = Explore Outliers(Y(Eval( col_names ) )); // Run expolore outliers
obj << Quantile Range Outliers( Tail Quantile( 0.25 ), Q (1.5) ); // select Q3/Q1 +/- 1.5 x IQR
obj << Exclude Rows(ALL); // exclude OL rows
// Run capability analysis
platform = dt << Process Capability(
Process Variables( Eval( col_names ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Moving Range Method( Average of Moving Ranges ),
Overall Sigma Summary Report( 1 ),
//Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Select Out of Spec Values( 1 ),
Goal Plot(0 ),
Capability Index Plot( 1 ),
Process Performance Plot( 0 ),
Order By( "Within Sigma Ppk Ascending" )
);
Wait( 0 );
Report( platform )[Outline Box( "Process Capability" )][Outline Box( "Overall Sigma Capability Summary Report" )][Table Box( 1 )] <<
Make Into Data Table;
dt_curr = Current Data Table();
dt_curr << Set Name( "Capability Report" );Je peux colorer les cellules aberrantes par paramètre mais je ne sais pas comment les exclure pour l'analyse de capacité. J'ai besoin d'un peu d'aide par ici.
Deuxièmement, pour chaque tranche d'un lot, je voudrais calculer le Cpk pour chaque paramètre de processus après filtrage des valeurs aberrantes , pour obtenir un tracé de tendance Cpk par tranche pour chaque paramètre de processus. Comment faire cela via JSL (en utilisant l'exemple d'ensemble de données que j'ai dans mon script) ?
Automatisation et scriptsles fenêtresRe : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?Pour la première partie (Ppk) de ma question, échangerait-il
obj << Exclude Rows(ALL);
par
obj << Change to Missing(ALL);
fait le travail?
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?Parce que vous disposez d'un tableau grand format, vous devrez les remplacer par manquants (utiliser des codes de valeur manquantes ou modifier les données) OU empiler vos données pour pouvoir exclure des lignes.
Avez-vous essayé si << Passer à manquant fait ce que vous recherchez ?

Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?@jthi je pense que nous nous sommes croisés. Le passage à manquant me donne un Ppk négatif pour certains paramètres - est-ce attendu ?

Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?Créez une seule colonne avec les valeurs aberrantes pour lesquelles vous pouvez calculer le Ppk manuellement (et avec JMP). Remplacez les valeurs aberrantes par des valeurs manquantes, répétez les calculs. Sont-ils corrects ?
Si je prends juste le premier paramètre et vérifie à quoi il ressemble

Je dirais que quelqu’un devrait réagir d’une manière ou d’une autre à cela. Vous pouvez également comprendre assez facilement pourquoi il existe des valeurs de capacité négatives (la moyenne est en dehors des spécifications).
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?@jthi Merci. J'avais cru comprendre que les Ppk ne pouvaient pas être négatifs alors que les Cpk le pouvaient, c'est pourquoi je doutais de mon étape "Changer en manquant". Je vais vérifier ma compréhension. Encore une chose avant de passer à la deuxième partie de ma question : est-ce que j'applique correctement les critères de filtrage des valeurs aberrantes (c'est-à-dire filtrer en dehors de Q1/Q3 +/- 1,5xIQR ) ?
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?La documentation JMP offre les meilleures réponses à des questions comme celle-là, si vous parvenez simplement à trouver les bons endroits. Parfois, cela peut être assez difficile.
Dans ce cas, probablement ici Modélisation prédictive et spécialisée > Explorer les valeurs aberrantes > Présentation d'Explorer les valeurs aberrantes > Valeurs aberrantes de la plage quantile ou ici Modélisation prédictive et spécialisée > Explorer les valeurs aberrantes > Le rapport Explorer les valeurs aberrantes > Rapport sur les valeurs aberrantes de la plage quantile

Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?@jthi Merci, j'en viens maintenant à la deuxième partie de ma question.
Pour chaque tranche d'un lot, je voudrais calculer le Cpk pour chaque paramètre de processusaprès filtrage des valeurs aberrantes, pour obtenir un tracé de tendance Cpk par tranche pour chaque paramètre de processus.
Il ne s'agit donc pas de la capacité d'un paramètre pour toutes les tranches d'un tableau de données, mais de la capacité du paramètre pour une tranche dans un lot donné.
Comment faire cela via JSL sur le même ensemble de données que j'ai ici ?
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?Le regroupement des variables ne devrait-il pas vous permettre d'obtenir cette table en utilisant :lot_id, :wafer et/ou :wafer en lot selon vos besoins ? Et puis vous pouvez créer un graphique à partir de ce tableau
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?@jthi Merci. Si j'utilise
Names Default To Here (1);
Clear Log ();
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
col_names = dt << Get Column Group("Processes"); // Column Group should pre-exist.
obj = Explore Outliers(Y(Eval( col_names )),By( :Wafer ID in lot ID)); // Run expolore outliers
obj << Quantile Range Outliers( Tail Quantile( 0.25 ), Q (1.5) ); // select Q3/Q1 +/- 1.5 x IQR<BR />J'obtiens la fenêtre Explore Outliers Platform dans laquelle je traite les plaquettes individuellement. Comment puis-je ensuite utiliser
obj << Change to Missing(ALL);
passer à l'étape suivante, c'est-à-dire l'analyse de capacité par « ID de plaquette dans l'ID de lot » ?
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?Je pense que cela devrait très bien fonctionner. Êtes-vous sûr d'avoir des valeurs aberrantes dans vos données ?
- Prenez un ensemble de données beaucoup plus petit (seulement quelques ID de plaquette dans l'ID de lot)
- Créer des valeurs aberrantes dans une colonne
- Exécutez votre script
- Vérifiez que cela fonctionne
- Répétez avec des données plus volumineuses
Notez que j'ai changé Tail Quantile
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
eo = dt << Explore Outliers(Y(Column Group("Processes")), By(:Wafer ID in lot ID), Invisible);
eo << Quantile Range Outliers(Tail Quantile(0.4), Q(1.5));
dt << Begin Data Update;
// eo << Color Cells(All);
Log Capture(eo << Change to Missing(ALL));
dt << End Data Update;
eo[1] << Close Window;Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?@jthi Merci, j'ai maintenant utilisé un ensemble de données plus petit pour l'analyse (JSL ci-dessous). Je pense qu'il n'est pas nécessaire de filtrer les valeurs aberrantes sur un ID de plaquette sur une base d'ID de lot, car les cellules aberrantes sont rendues manquantes de toute façon. Ce dont j'ai besoin, c'est d'une analyse de capacité sur un ensemble de données filtrées avec des valeurs aberrantes.
Names Default To Here( 1 );
Clear Log();
dt_full = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
dt = Data Table( "Semiconductor Capability" ) << Subset(
All rows,
columns( :lot_id, :wafer, :Wafer ID in lot ID, :SITE, :NPN1, :PNP2, :PNP3, :FNM1, :RES3, RSP2 )
);
Wait( 1 );
Close( dt_full, no save );
col_names = dt << Get Column Group( "Processes" ); // Column Group should pre-exist.
obj = Explore Outliers( Y( Eval( col_names ) ) );//,By( :Wafer ID in lot ID)); // Run expolore outliers
obj << Quantile Range Outliers( Tail Quantile( 0.25 ), Q( 1.5 ) ); // select Q3/Q1 +/- 1.5 x IQR
obj << Color Cells( ALL ); //check
Wait( 1 );
obj << Change to Missing( ALL );
Wait( 1 );
obj << Close Window;
// Run capability analysis
platform = dt << Process Capability(
Process Variables( Eval( col_names ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Moving Range Method( Average of Moving Ranges ),
//Within Sigma Summary Report( 0),
Overall Sigma Summary Report( 1 ),
Select Out of Spec Values( 1 ),
Goal Plot( 0 ),
Capability Index Plot( 0 ),
Capability Box Plots( 0 ),
Process Performance Plot( 0 ),
Order By( "Overall Sigma Ppk Ascending" )
);
Wait( 0 );
Report( platform )[Outline Box( "Process Capability" )][Outline Box( "Overall Sigma Capability Summary Report" )][Table Box( 1 )] <<
Make Into Data Table;
dt_curr = Current Data Table();
dt_curr << Set Name( "Capability Report" );
platform << close window;
dt << Clear Select;
// Run capability analysis by wafer in a lot
platform2 = dt << Process Capability(
Process Variables( Eval( col_names ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Moving Range Method( Average of Moving Ranges ),
//Within Sigma Summary Report( 0),
Overall Sigma Summary Report(1),
Select Out of Spec Values( 1 ),
Goal Plot( 0 ),
Capability Index Plot( 0 ),
Capability Box Plots( 0 ),
Process Performance Plot( 0 ),
Order By( "Overall Sigma Ppk Ascending" ),
By( :Wafer ID in lot ID )
);
dt << Clear Select;
Là, je souhaite comparer Ppk par paramètre pour l'ensemble de données complet par rapport à la capacité du même paramètre sur un ID de plaquette sur la base d'un ID de lot . À cette fin, j'ai élaboré le script ci-dessous et j'ai du mal à créer un tableau de données combiné (peut le faire de manière interactive) à partir de la deuxième analyse de capabilité.
Report( platform2)[Outline Box( "Process Capability" )][Outline Box( "Overall Sigma Capability Summary Report" )][Table Box( 1 )] <<
Make Combined Data Table;
platform2 << close window;
Enfin, ce que je veux, c'est un tracé de la capacité (axe des y) par rapport à l'ID de plaquette dans un ID de lot (axe des x) généré à partir de la table de données combinée avec les noms de paramètres dans la page (sur Graph Builder). De plus, j'ai besoin que le Ppk calculé à partir de la première analyse de capacité soit affiché sous forme de ligne horizontale pour chaque paramètre. Puis-je s'il vous plaît obtenir de l'aide ici ?
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?Quel est le problème lorsque vous essayez de créer la table de données combinées ? Avez-vous vérifié ce que contient platform2 ?
Names Default To Here(1);
dt_full = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
dt = Data Table("Semiconductor Capability") << Subset(All rows, Columns(:lot_id, :wafer, :Wafer ID in lot ID, :SITE, :NPN1, :PNP2, :PNP3, :FNM1, :RES3, RSP2));
Close(dt_full, no save);
col_names = dt << Get Column Group("Processes");
obj = dt << Explore Outliers(Y(Eval(col_names)));
obj << Quantile Range Outliers(Tail Quantile(0.25), Q(1.5));
obj << Change to Missing(ALL);
obj << Close Window;
// Run capability analysis
pc = dt << Process Capability(
Process Variables(Eval(col_names)),
Spec Limits Dialog("No (skip columns with no spec limits)"),
Moving Range Method(Average of Moving Ranges),
Overall Sigma Summary Report(1),
Select Out of Spec Values(1),
Goal Plot(0),
Capability Index Plot(0),
Capability Box Plots(0),
Process Performance Plot(0),
Order By("Overall Sigma Ppk Ascending"),
Invisible
);
dt_nogroup = Report(pc)[Outline Box("Process Capability")][Outline Box("Overall Sigma Capability Summary Report")][Table Box(1)] << Make Into Data Table;
dt_nogroup << Set Name("Capability Report");
pc << close window;
// Run capability analysis by wafer in a lot
pc = dt << Process Capability(
Process Variables(Eval(col_names)),
Spec Limits Dialog("No (skip columns with no spec limits)"),
Moving Range Method(Average of Moving Ranges),
Overall Sigma Summary Report(1),
Goal Plot(0),
Capability Index Plot(0),
Capability Box Plots(0),
Process Performance Plot(0),
Order By("Overall Sigma Ppk Ascending"),
By(:Wafer ID in lot ID),
Invisible
);
dt << Clear Select;
dt_wafer = (Report(pc[1]) << top parent)[Outline Box("Process Capability")][Outline Box("Overall Sigma Capability Summary Report")][Table Box(1)] << Make Combined Data Table;
pc << close window;
Write();
Vous devez d'abord essayer de créer le graphique vous-même, je vous suggère de joindre les valeurs Ppk "de référence" à vos "données" et de les utiliser comme tracés linéaires supplémentaires au-dessus de tout autre tracé.
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?@jthi Merci. Je suis sur JMP 16.2. J'obtiens ce qui suit lorsque j'essaie d'obtenir une table de données combinée à l'aide de votre script (j'obtiens la même chose avec le mien)

Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?Je n'ai plus accès à JMP16, vous devrez donc le découvrir vous-même ou quelqu'un d'autre devra intervenir. Si je me souviens bien, JMP16 ne crée pas de liste d'objets lorsque vous utilisez By mais plutôt un objet . À partir de là, vous devez trouver la bonne zone de tableau (choisissez d'abord avec les informations correctes) et vous devriez pouvoir y envoyer << Créer un tableau de données combinées ».
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?Est-ce que cette méthode fonctionnera ?
(pc << XPath( "//OutlineBox[text()='Process Capability']//TableBox" ))[1]
<< Make Combined Data Table;
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?@jthi Merci.
@Mark_Bailey Cela fonctionne
dt_wafer = Report( pc[1] )[Outline Box( "Overall Sigma Capability Summary Report" )][Table Box( 1 )] <<MAKE combined="" data="https://community.jmp.com/" table=""></MAKE>
Next I would like to produce a chart similar to the one below (or even better with Parameters in the Page option of Graph Builder) with the overall Ppk calculated (in table Capability Report) from the first part of the script as horizontal dashed line on y-axis for each parameter. I do not know how to get y-axis values from one table and use it on a chart produced from a different table so need some help on the JSL here.
<SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><span class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><img src="https://us.v-cdn.net/6038925/uploads/images/66723i4C71FBE8A07B4359/Neo_0-1722527733886.png" width="721" height="351" role="button" title="Neo_0-1722527733886.png" alt="Neo_0-1722527733886.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN>
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?Joignez les valeurs des données de référence. Renommez d'abord la colonne "Ppk" par exemple en "Ppk Ref", puis utilisez Update et faites correspondre avec Process

Créez ensuite le graphique et ajoutez deux colonnes à l'axe Y : Ppk et Ppk ref. Désactiver la référence Ppk à partir des points et Ppk à partir de la ligne

Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?@jthi Merci. Cela marche. Enfin, comment afficher la valeur Ppk Ref pour chaque processus sur l'axe y adjacent à la ligne horizontale ?
De plus, comment changer le titre de l'axe Y de tous les graphiques en quelque chose de commun (dites « Capacité ») via JSL ?
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?Avec les versions JMP plus récentes, c'est très simple, vous pouvez simplement activer l'étiquette pour la ligne (je ne sais pas si cela était déjà dans JMP16) :


Si cela n'existe pas dans JMP16, j'utiliserais des lignes de référence et ignorerais la mise à jour à partir de la référence Ppk de l'autre table (les stockerais plutôt dans un tableau associatif et l'utiliserais lors de la définition des valeurs de référence).
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?@jthi Oui, merci. J'ai trouvé le paramètre d'activation de l'étiquette dans mon JMP 16.
Ma deuxième question : comment changer le titre de l'axe Y de tous les graphiques (via « Page ») en quelque chose de commun (dites « Capacité ») via JSL ?
Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?J'irais avec XPath et j'essaierais de trouver les références correctes. Cela pourrait ne pas fonctionner dans tous les cas et cela pourrait nécessiter quelques ajustements.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(528, 2954),
Show Control Panel(0),
Variables(X(:height), Y(:weight), Page(:age)),
Elements(Points(X, Y, Legend(15)), Smoother(X, Y, Legend(16)))
);
tebs = Report(gb) << XPath("//TextEditBox");
tebs[4::N Items(tebs)::2] << Set Text("Capability");Re : Comment obtenir Ppk par paramètre et Cpk par tranche par paramètre après filtrage des valeurs aberrantes ?@jthi . Merci. J'ai plutôt opté pour Wrap qui fonctionne pour ce dont j'ai besoin du graphique. Dans ce cas, il n'y a qu'un seul axe y à gérer que je peux gérer sur JSL.