cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Register for our Discovery Summit 2024 conference, Oct. 21-24, where you’ll learn, connect, and be inspired.
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
22 REPLIES 22
jthi
Super User

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

I think that should work just fine. Are you sure you have any outliers in your data?

  1. Take much smaller dataset (just few Wafer ID in lot ID)
  2. Create some outliers to one column
  3. Run your script
  4. Verify it works
  5. Repeat with larger data

 

Notice that I have changed 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;
-Jarmo
Neo
Neo
Level VI

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

@jthi Thanks, I have a now used a smaller data set for the analysis (JSL below). I think there is no need to filter outliers on a Wafer ID in a lot ID basis as the outlier cells are rendered missing any way. What I need is a capability analysis on an outlier filtered data set.

 

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;

 

There I want to compare Ppk per parameter for the full data set vs capability of the same parameter on a Wafer ID in a lot ID basis. To this end, I have put together the script below by am struggling to make a combined data table (can do it interactively) from the second capability analysis.

 

Report( platform2)[Outline Box( "Process Capability" )][Outline Box( "Overall Sigma Capability Summary Report" )][Table Box( 1 )] <<
Make Combined Data Table;
platform2 << close window;

Finally, what I want is a plot of Capability (y-axis) vs Wafer ID in a lot ID (x-axis) generated from the combined data table with Parameter names in Page (on Graph Builder). Also, I need the Ppk calculated form the first capability analysis to be shown as a horizontal line for each parameter. Could I please get some help 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?

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
Neo
Neo
Level VI

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

@jthi Thanks. I am on JMP 16.2. I get the following when trying to get a combined data table using your script (I get same with mine)

Neo_0-1722501512810.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?

I don't have access to JMP16 anymore so you will have to figure that out yourself or someone else has to chime in. If I remember correctly, JMP16 doesn't create list of objects when you use By but rather one object. From there you have to find the correct table box (pick first with correct information) and you should be able to send << Make Combined Data Table to that.

-Jarmo

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

Will this way work?

(pc << XPath( "//OutlineBox[text()='Process Capability']//TableBox" ))[1]
	<< Make Combined Data Table;
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
jthi
Super User

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

Join the values from reference data. First rename the "Ppk" column for example to "Ppk Ref", then use Update and match with Process

jthi_0-1722532281196.png

Then create the graph and add two columns to Y-axis: Ppk and Ppk ref. Disable Ppk ref from points and Ppk from line

jthi_1-1722532369974.png

 

-Jarmo
Neo
Neo
Level VI

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

@jthi Thanks. This works. Finally, how do I show the Ppk Ref value for each process on the y-axis adjacent to the horizontal line?

Also, how to change the y-axis title for all charts (via "Page") to something common (Say "Capability") via JSL? 

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?

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