cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Try the Materials Informatics Toolkit, which is designed to easily handle SMILES data. This and other helpful add-ins are available in the JMP® Marketplace
Choose Language Hide Translation Bar
Neo
Neo
Level VI

How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

I have put together the following JSL to first filter the outliers in the data and then get the Ppk, but I note that my script is incorrect as when I filter the outliers by excluding all rows, I exclude non-outliers data points for other process parameters.  

For defining outliers, my preferred criteria is anything outside Q1/Q3 +/- 1.5xIQR is an outlier, which is what (I think) I use below.

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" );

I can colour outlier cells per parameter but do not know how to exclude them for Capability Analysis. I need some help here.

 

Secondly, for each wafer in a lot, I would like to calculate the Cpk for each process parameter after outlier filtering,  to get a Cpk trend plot by wafer for each process parameter. How to do this via JSL (using the example data set I have got in my script)?

When it's too good to be true, it's neither
3 ACCEPTED SOLUTIONS

Accepted Solutions
jthi
Super User

Re: How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

What is the problem when you try to create the combined data table? Have you checked what platform2 contains?

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();

You have to first try to create the graph yourself, I would suggest you join the "reference" Ppk values to your "data" and use those as extra line plots on top of any other plots.

-Jarmo

View solution in original post

Neo
Neo
Level VI

Re: How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

@jthi Thanks.

@Mark_Bailey  This works 

dt_wafer = Report( pc[1] )[Outline Box( "Overall Sigma Capability Summary Report" )][Table Box( 1 )] <<Make Combined Data Table;

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. 

Neo_0-1722527733886.png

 

When it's too good to be true, it's neither

View solution in original post

jthi
Super User

Re: How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

With newer JMP versions very easy, you can just enable label for the line (not sure if this was already in JMP16):

jthi_0-1722590420785.pngjthi_1-1722590430493.png

If that doesn't exist in JMP16, then I would use reference lines and skip the updating from reference Ppk from the other table (store them to associative array instead and use that when setting the reference values).

-Jarmo

View solution in original post

22 REPLIES 22
Neo
Neo
Level VI

Re: How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

For the first (Ppk) part of my question, would swapping 

obj << Exclude Rows(ALL);

by

obj << Change to Missing(ALL);

do the job?

 

When it's too good to be true, it's neither
jthi
Super User

Re: How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

Because you have wide format table, you will have to change them to missing (use missing value codes or modify data) OR stack your data to be able to exclude rows.

 

Have you tried if << Change to missing does what you are looking for?

jthi_0-1721995174830.png

 

-Jarmo
Neo
Neo
Level VI

Re: How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

@jthi I think we crossed. Change to missing gives me negative Ppk for some parameters - is this expected?

Neo_0-1721995598735.png

 

When it's too good to be true, it's neither
jthi
Super User

Re: How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

Create a single column with outliers which you can calculate the Ppk for manually (and with JMP). Change the outliers to missing, repeat calculations. Are they correct?

 

If I just take the first parameter and check what it looks like

jthi_0-1721995873803.png

I would say someone should somehow react to that. You can also pretty easily see why there are negative capability values (mean is outside of the specs).

-Jarmo
Neo
Neo
Level VI

Re: How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

@jthi Thanks. My understanding was that Ppk's cannot be negative while Cpk's can, hence I was doubting my "Change to Missing" step. I will check my understanding. One more thing before I proceed to the second part of my question - am I applying the outlier filtering criteria (i.e. filter outside Q1/Q3 +/- 1.5xIQR) correctly? 

When it's too good to be true, it's neither
jthi
Super User

Re: How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

JMP documentation has best answers to questions like that, if you can just find the correct places. Sometimes it can be fairly difficult.

 

In this case, most likely here Predictive and Specialized Modeling > Explore Outliers > Overview of Explore Outliers > Quantile Ra... or here Predictive and Specialized Modeling > Explore Outliers > The Explore Outliers Report > Quantile Rang... 

jthi_0-1721996996702.png

 

-Jarmo
Neo
Neo
Level VI

Re: How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

@jthi Thanks, Coming to the second part of my question now.

For each wafer in a lot, I would like to calculate the Cpk for each process parameter after outlier filtering,  to get a Cpk trend plot by wafer for each process parameter.

So, this is not the capability of a parameter for all the wafers in a data table but the capability of the parameter for one wafer in a given lot.

How to do this via JSL on the same data set I have here?

When it's too good to be true, it's neither
jthi
Super User

Re: How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

Shouldn't grouping variables get you that table using :lot_id, :wafer and/or :wafer in lot as needed? And then you can create a graph from that table

-Jarmo
Neo
Neo
Level VI

Re: How to get Ppk per parameter and Cpk per wafer per parameter post outlier filtering?

@jthi Thanks. If I use

 

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

I get the Explore Outliers Platform window where I have the deal with the wafers individually. How do I then use 

 

obj << Change to Missing(ALL);

 

to go to the next step i.e. Capability Analysis per "Wafer ID in lot ID"?

 

When it's too good to be true, it's neither