cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
Choose Language Hide Translation Bar
View Original Published Thread

Normality and Capability

MichaH
Level III

Hi,

1) in Minitab I am able to test multiple variables for normality, can I do the same in JMP? - see picture - Prob_normality

2) In Minitab I can have Before and After, can I replicate for JMP? - see CPK Before and After

3) In CPk na Minitab you can see PPM for nonconformance instead of %, can I get also PPM instead?

 

Thank you

 

Michal

12 REPLIES 12
txnelson
Super User


Re: Normality and Capability

If you want to replicate the Minitab report form, here is a very ruff, hardcoded version.  It could be quite easily be put into a generic format and added as a JMP Addin.  But I will leave that to your efforts

txnelson_0-1721066734343.png

This is using only JSL, taking the objects from the output I previously provided, and then reformatting into the Minitab form.  It needs a bunch of cleanup, and genericizing.

Here is the first pass at the code

Names Default To Here( 1 );
dt = Current Data Table();
dis = dt << Distribution( invisible,
	SendToByGroup( {:Before After == "Hole - Before"} ),
	Continuous Distribution( Column( :Measurement ), Process Capability( Use Column Property Specs ) ),
	By( :Before After ),
	Group Options( Layout( "Horizontal List" ) ),
	SendToByGroup(
		{:Before After == "Hole - Before"},
		SendToReport(
			Dispatch( {"Measurement", "Process Capability", "Measurement Capability", "Nonconformance"},
				"Observed PPM", NumberColBox,
				{Visibility( "Visible" )}
			)
		)
	),
	SendToByGroup(
		{:Before After == "Hole - After"},
		SendToReport(
			Dispatch( {"Measurement", "Process Capability", "Measurement Capability", "Histogram"},
				"Process Capability Analysis Histogram", FrameBox,
				{DispatchSeg( CustomStreamSeg( 1 ), {Font} )}
			),
			Dispatch( {"Measurement", "Process Capability", "Measurement Capability", "Nonconformance"},
				"Observed PPM", NumberColBox,
				{Visibility( "Visible" )}
			)
		)
	)
);

// Build the report

// Set the Histograms to the same axis
theMin = Min(
	Report( Dis[1] )["Histogram", AxisBox( 1 )] << get min,
	Report( Dis[2] )["Histogram", AxisBox( 1 )] << get min
);
theMax = Max(
	Report( Dis[1] )["Histogram", AxisBox( 1 )] << get max,
	Report( Dis[2] )["Histogram", AxisBox( 1 )] << get max
);
Report( Dis[1] )["Histogram", AxisBox( 1 )] << Min( theMin );
Report( Dis[1] )["Histogram", AxisBox( 1 )] << Max( theMax );
Report( Dis[2] )["Histogram", AxisBox( 1 )] << Min( theMin );
Report( Dis[2] )["Histogram", AxisBox( 1 )] << Max( theMax );
Summarize( dt, baGroups = by( :Before After ) );
nw = New Window( "Report",
	Outline Box( "Before/After Capability Comparison for " || baGroups[1] || " vs. " || baGroups[2],
		V List Box(
			H List Box(
				Text Box( "Before: " || baGroups[1] ),
				Spacer Box( size( 200, 0 ) ),
				Text Box( "Process Performance Report" )
			),
			Text Box( "After: " || baGroups[2] )
		),
		Spacer Box( size( 0, 5 ) ),
		Lineup Box( N Col( 2 ),
			Outline Box( "Capability Histogram",
				lub1 = Lineup Box( N Col( 1 ),
					H List Box( Spacer Box( size( 60, 0 ) ), Text Box( "Are the data inside the limits?" ) )
				)
			
			),
			V List Box(
				obPC = Outline Box( "Process Characterization" ),
				Spacer Box( size( 0, 15 ) ),
				obCS = Outline Box( "Capability Statistics" )
			)
		)
	)
);
lub1 << Append( Report( Dis[1] )["Histogram", framebox( 1 )] );
lub1 << Append(
	Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
		Text Box( "                                          Before" )
	)
);
lub1 << Append(
	Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
		Report( Dis[1] )["Histogram", framebox( 2 )]
	)
);
lub1 << Append(
	Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
		Text Box( "                                          After" )
	)
);
lub1 << Append(
	Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
		Report( Dis[2] )["Histogram", framebox( 2 )]
	)
);
lub1 << Append(
	Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
		Report( Dis[1] )["Histogram", axisbox( 1 )]
	)
);

// Build Process Characterization table

beforePCList = Report( Dis[1] )["Process Summary", Number Col Box( 1 )] << get;
Remove From( beforePCList, 1, 2 );
Remove From( beforePCList, 5, 1 );
Insert Into( beforePCList, 1, 2 );
afterPCList = Report( Dis[2] )["Process Summary", Number Col Box( 1 )] << get;
Remove From( afterPCList, 1, 2 );
Remove From( afterPCList, 5, 1 );
Insert Into( afterPCList, 1, 2 );
changeList = {., .};
Insert Into( changeList, beforePCList[3] - afterPCList[3] );
Insert Into( changeList, beforePCList[4] - afterPCList[4] );
Insert Into( changeList, beforePCList[5] - afterPCList[5] );
obPC << append(
	Table Box(
		String Col Box( "", {"Total N", "Subgroup size", "Mean", "STDev(within)", "StDev(overall)"} ),
		Number Col Box( "Before", beforePCList ),
		Number Col Box( "After", afterPCList ),
		Number Col Box( "Change", changeList )
	)
);

beforeCSList = {.};
Insert Into( beforeCSList, (Report( Dis[1] )["Overall Sigma Capability", Number Col Box( 1 )] << get)[4] );
Insert Into( beforeCSList, (Report( Dis[1] )["Overall Sigma Capability", Number Col Box( 1 )] << get)[1] );
Insert Into( beforeCSList, . );
Insert Into( beforeCSList, (Report( Dis[1] )["Nonconformance", Number Col Box( 1 )] << get)[3] );
Insert Into( beforeCSList, (Report( Dis[1] )["Nonconformance", Number Col Box( 3 )] << get)[3] );
Insert Into( beforeCSList, (Report( Dis[1] )["Nonconformance", Number Col Box( 4 )] << get)[3] );
Insert Into( beforeCSList, beforeCSList[6] * 1000000 );
Insert Into( beforeCSList, . );
Insert Into( beforeCSList, (Report( Dis[1] )["Within Sigma Capability", Number Col Box( 1 )] << get)[4] );
Insert Into( beforeCSList, (Report( Dis[1] )["Within Sigma Capability", Number Col Box( 1 )] << get)[1] );
Insert Into( beforeCSList, . );
Insert Into( beforeCSList, (Report( Dis[1] )["Nonconformance", Number Col Box( 2 )] << get)[3] );
Insert Into( beforeCSList, Round( beforeCSList[13] * 1000000, 0 ) );

afterCSList = {.};
Insert Into( afterCSList, (Report( Dis[2] )["Overall Sigma Capability", Number Col Box( 1 )] << get)[4] );
Insert Into( afterCSLIST, (Report( Dis[2] )["Overall Sigma Capability", Number Col Box( 1 )] << get)[1] );
Insert Into( afterCSLIST, . );
Insert Into( afterCSLIST, (Report( Dis[2] )["Nonconformance", Number Col Box( 1 )] << get)[3] );
Insert Into( afterCSLIST, (Report( Dis[2] )["Nonconformance", Number Col Box( 3 )] << get)[3] );
Insert Into( afterCSLIST, (Report( Dis[2] )["Nonconformance", Number Col Box( 4 )] << get)[3] );
Insert Into( afterCSLIST, afterCSLIST[6] * 1000000 );
Insert Into( afterCSLIST, . );
Insert Into( afterCSLIST, (Report( Dis[2] )["Within Sigma Capability", Number Col Box( 1 )] << get)[4] );
Insert Into( afterCSLIST, (Report( Dis[2] )["Within Sigma Capability", Number Col Box( 1 )] << get)[1] );
Insert Into( afterCSLIST, . );
Insert Into( afterCSLIST, (Report( Dis[2] )["Nonconformance", Number Col Box( 2 )] << get)[3] );
Insert Into( afterCSLIST, Round( afterCSLIST[13] * 1000000, 0 ) );
change = Matrix( beforeCSList ) - Matrix( afterCSList );
obcs << append(
	Table Box(
		String Col Box( "",
			{"Actual (overall)", "    Pp", "    Ppk", "    Z Bench", "    % Out of spec (obs)",
			"    % Out of spec (exp)", "    PPM (DPMO) (obs)", "    PPM (DPMO) (exp)", "Potential (within)",
			"    Cp", "    Cpk", "    Z Bench", "    % Out of spec (exp)", "    PM (DPMO) (exp)"}
		),
		Number Col Box( "Before", beforeCSList ),
		Number Col Box( "After", afterCSList ),
		Number Col Box( "Change", change )
	)
);

dis << close window;
Jim
txnelson
Super User


Re: Normality and Capability

Maybe this will help.....attached is your data table in JMP.  I have added a Value Order column property to the Before After column, and the Spec Limits column property to the Measurement column.  The output display below can be regenerated by running the Before-After table script attached to the Data Table

txnelson_0-1721052303667.png

 

Jim
MichaH
Level III


Re: Normality and Capability

Hi Jim,

thank you a lot. Good help.