4.3.1 Control Charts

Control charts might be used to determine whether some kind of process is in control or not. Main types of Control charts available in MCharts are:

Setting ControlChart:

1
2
3
4
// Sets ControlChart object named chart, where
//    dataModel is instance of ChartDataModel
//    ControlChartType.P - sets chart's type
ControlChart chart = new ControlChart(dataModel, ControlChartType.P);

4.3.1.1 NP chart

NP-chart is a control chart used to show a number of defective (nonconforming) units in a sample or in a subgroup. Data in samples or subgroups should be of equal size. This chart inspects system stability: defective units in data samples or subgroups are found. For instance, everyday a fixed number of surveys are committed (for example, 100 every day) and a number of incomplete surveys would be plotted on np-chart. It would indicate this process' stability, as well as to display if there is a need of some kind of improvement.

Formulas

Center line: n{overline{p}}={sum{j=1}{m}{nonconf_{j}}}/{m}

UCL, LCL (Upper and Lower Control Limits)

UCL_{np}=n{overline{p}}+3sqrt{n{overline{p}}(1-{overline{p}})}

LCL_{np}=MAX({{0},{n{overline{p}}-3sqrt{n{overline{p}}(1-{overline{p}})}}})

{overline{p}}= {sum{j=1}{m}{nonconf_{j}}}/{{m}*{n}}

where:

Sample

For instance, factory produces 100000 radios per day, and checks 1000 radios per day. Below there is a table of defective radios found every day:

Date Defective radios
2009-5-1 61
2009-5-2 69
2009-5-3 50
2009-5-4 63
2009-5-5 59
2009-5-6 50
2009-5-7 60
2009-5-8 69
2009-5-9 65
2009-5-10 70
2009-5-11 71
2009-5-12 65
2009-5-13 64
2009-5-14 69
2009-5-15 53
2009-5-16 73
2009-5-17 60
2009-5-18 55
2009-5-19 45
2009-5-20 50

We want to draw an np-chart for this data.

Creating chart's data model:

1
2
3
4
5
6
7
8
9
/*
 * Creating data model
*/
ChartDataModel dataModel = new ChartDataModel();
// adding data - first parameter indicates KEY, second - VALUE
dataModel.addKeyValues(("2009-5-1"), new Object[] { 61 });
dataModel.addKeyValues(("2009-5-2"), new Object[] { 69 });
dataModel.addKeyValues(("2009-5-3"), new Object[] { 50 });
//.......

Creating chart:

1
2
3
4
5
/* Creates ControlChart object named chart, where
*    dataModel contains data which we want to plot
*    ControlChartType.NP is an enumeration used to determine chart's type
*    1000 - indicates size of sample  */
  ControlChart chart = new ControlChart(dataModel, ControlChartType.NP, 1000);

nP-Chart Demonstration

Figure 4.3.1.1.1 nP-Chart Demonstration

View Source

4.3.1.2 P chart

A p-chart is one of control charts used to observe the change of the process over time. It is used for data in subgroups of varying size and shows a proportion of nonconforming items (and not the actual count of them). The subgroups can be formed based on time period or other grouping criteria. P-charts help to determine whether the process is stable and predictable. Also it enables to monitor the effect of process improvements. For example, a quality insurance office counts a proportion of unresolved client reported bugs per development iteration. The subgroups varies on a total amount of client reports per iteration.

Formulas

The percent of items in the sample meeting the criteria of interest:

p_{j}={nonconf_{j}}/{n_j}

Center line: {overline{p}}={sum{j=1}{m}{nonconf_{j}}}/{sum{j=1}{m}{n_j}}

UCL, LCL (Upper and Lower Control Limits)

UCL={overline{p}}+3sqrt{{{overline{p}}(1-{overline{p}})}/{n_j}}

LCL_{np}=MAX({{0},{overline{p}}-3sqrt{{{overline{p}}(1-{overline{p}})}/{n_j}}})

where:

Sample

For instance, factory produces 1000000 clay bricks per day, and checks a varied number of bricks per day. Below there is a table of sizes of samples, defective bricks found every day:

Date Sample size Defected bricks
2009-5-15 150 2
2009-5-16 120 3
2009-5-17 130 5
2009-5-18 140 2
2009-5-19 150 7
2009-5-20 120 2
2009-5-21 201 5
2009-5-22 150 3
2009-5-23 140 12
2009-5-24 150 8
2009-5-25 120 6
2009-5-26 170 5
2009-5-27 186 10
2009-5-28 95 5
2009-5-29 101 8
2009-5-30 105 11
2009-5-31 110 8

We want to draw a p-chart for this data.

Creating chart's data model:

1
2
3
4
5
6
7
8
9
// Creating data model
ChartDataModel dataModel = new ChartDataModel();
 
// adding data - first parameter indicates KEY, second - VALUE
// (first number is sample size and second - number of defected items)
dataModel.addKeyValues(("2009-5-15"), new Object[] { 150, 2 });
dataModel.addKeyValues(("2009-5-16"), new Object[] { 120, 3 });
dataModel.addKeyValues(("2009-5-17"), new Object[] { 130, 5 });
//.......

Creating chart:

1
2
3
4
// Creates ControlChart object named chart, where
//   dataModel contains data which we want to plot
//   ControlChartType.P is an enumeration used to determine chart's type
ControlChart chart = new ControlChart(dataModel, ControlChartType.P);

P-Chart Demonstration

Figure 4.3.1.2.1 P-Chart Demonstration

View Source

4.3.1.3 C chart

A c-chart is one of control charts used to observe how the process, measured by the number of defects or other type of incidents per item or per group of items, changes over time. These defects or incidents can be described as existence of some undesirable characteristic or as lack or some desirable characteristic. C-charts help to determine whether the process is stable and predictable. Also it enables to monitor the effect of process improvements. The c-chart is particularly useful for complex items when the whole item can not be described as defected or not. In order to use this chart, the possible defects or incidents have to be identified prior to data collection.

Formulas

Center line: {overline{c}}={sum{j=1}{m}{nonconf_{j}}}/{m}

UCL, LCL (Upper and Lower Control Limits)

UCL={overline{c}}+3sqrt{overline{c}}

LCL=MAX{{0},{overline{c}}-3sqrt{overline{c}}}

where:

Sample

For instance, factory produces can openers. Below there is a table of sizes of samples, defective can openers found every day:

Date Defective openers
2009-5-1 27
2009-6-2 26
2009-6-3 32
2009-6-4 27
2009-6-5 23
2009-6-6 23
2009-6-7 31
2009-6-8 26
2009-6-9 22
2009-6-10 29
2009-6-11 31
2009-6-12 28
2009-6-13 22
2009-6-14 26
2009-6-15 31
2009-6-16 29
2009-6-17 23
2009-6-18 25
2009-6-19 33
2009-6-20 27

We want to draw a c-chart for this data.

Creating chart's data model:

1
2
3
4
5
6
7
8
9
10
/*
 * Creating data model
*/
ChartDataModel dataModel = new ChartDataModel();
// adding data - first parameter indicates KEY, second - VALUE (number of defected items)
dataModel.addKeyValues(("2009-6-1"), new Object[] { 27 });
dataModel.addKeyValues(("2009-6-2"), new Object[] { 26 });
dataModel.addKeyValues(("2009-6-3"), new Object[] { 32 });
dataModel.addKeyValues(("2009-6-4"), new Object[] { 27 });
//.......

Creating chart:

1
2
3
4
/* Creates ControlChart object named chart, where
*    dataModel contains data which we want to plot
*    ControlChartType.C is an enumeration used to determine chart's type */
  ControlChart chart = new ControlChart(dataModel, ControlChartType.C);

C-Chart Demonstration

Figure 4.3.1.3.1 C-Chart Demonstration

View Source

4.3.1.4 U chart

A u-chart is one of control charts used to observe how the process, measured by the number of defects or other type of incidents per subgroup, changes over time. The subgroups are of varying size. These defects or incidents can be described as existence of some undesirable characteristic or as lack or some desirable characteristic. U-charts help to determine whether the process is stable and predictable. Also, it enables to monitor the effect of process improvements. The U-chart is particularly useful for complex items when the whole item can not be described as defected or not. In order to use this chart, the possible defects or incidents have to be identified prior to data collection.

Formulas

The average count of occurrence of a criteria of interest in sample of items:

u_j={nonconf_j}/n_j

Center line: {overline{u}}={sum{j=1}{m}{nonconf_{j}}}/{m}

UCL, LCL (Upper and Lower Control Limits)

UCL={overline{u}}+3sqrt{{overline{u}}/{n_j}}

LCL=MAX delim{[}{{0},{overline{u}}-3sqrt{{overline{u}}/{n_j}}}{]}

where:

Sample

For instance, factory produces 100000 mixers per day, and checks a varied number of mixers per day. Below there is a table of sizes of samples, defective mixers found every day:

Date Sample size Defected mixers
2009-6-1 500 27
2009-6-2 680 26
2009-5-17 130 32
2009-5-18 140 27
2009-5-19 150 27
2009-5-20 120 23
2009-5-21 201 23
2009-5-22 150 31
2009-5-23 140 26
2009-5-24 150 22
2009-5-25 120 29
2009-5-26 170 31
2009-5-27 186 28
2009-5-28 95 5
2009-5-29 101 8
2009-5-30 105 11
2009-5-31 110 8

We want to draw a u-chart for this data.

Creating chart's data model:

1
2
3
4
5
6
7
8
9
// Creating data model
ChartDataModel dataModel = new ChartDataModel();
 
// adding data - first parameter indicates KEY, second - VALUE
// (first number is sample size and second - number of defected items)
dataModel.addKeyValues(("2009-6-1"), new Object[] {500, 27 });
dataModel.addKeyValues(("2009-6-2"), new Object[] {680, 26 });
dataModel.addKeyValues(("2009-6-3"), new Object[] {536, 32 });
//.......

Creating chart:

1
2
3
4
// Creates ControlChart object named chart, where
//   dataModel contains data which we want to plot
//   ControlChartType.U is an enumeration used to determine chart's type
ControlChart chart = new ControlChart(dataModel, ControlChartType.U);

U-Chart Demonstration

Figure 4.3.1.4.1 U-Chart Demonstration

View Source

4.3.1.5 XBar&S (XBar Sigma) chart

An X-bar and s (sigma) chart is a pair of control charts for variables data. The chart should be used with subgroup size of 11 or more – the chart shows the stability and predictability of the system. Also it enables to monitor the effect of process improvements. Standard deviation is used for the chart. This gives a more effective measure of process spread, as each individual reading of the parameter is used for variability calculation. The chart, actually, consists of two separate charts: X-bar (process location over time, based on average of series of observations) and Sigma chart (variation between observations of series over time).

Formulas

X-bar chart: UCL and LCL (Upper and Lower Control Limits)

UCL_{xbar}={overline{overline{x}}}+3{sigma_{x}/root{}{n}}

LCL_{xbar}={overline{overline{x}}}-3{sigma_{x}/root{}{n}}

where:

Average (X-bar):

{overline{x}}=1/n{sum{i=1}{n}{x_{i}}}

where:

Average of subgroups (X-doublebar):

{overline{overline{x}}}=1/{m*n}sum{j=1}{m}{sum{i=1}{n}{x_{i}}}

where:

When the subgroup size is n=1 this equation simplifies to {overline{overline{x}}}=1/m{sum{j=1}{m}{x_{j}}}

Process Sigma based on Sigma chart

sigma_{x}=delim{lbrace}{matrix{2}{1}{{{overline{S}}/{c_{4}}, when n is constant} {{{sum{j=1}{m}{g_{j}S_{j}}}/{sum{j=1}{m}{h_{j}}}, when n is not constant}}}}{rbrace}

where:

Average Sigma

overline{S}=delim{lbrace}{matrix{2}{1}{{{1/m}{sum{j=1}{m}{S_{j}}}, when n is constant} {{c_{4}sigma_{x}}, when n is not constant}}}{rbrace}

where:

Sigma chart calculations:

The subgroup standard deviation:

S_{j}=root{}{{{sum{i=1}{n}{(x_{i}-overline{x}_{j})^2}}/{n-1}}}

where:

UCL and LCL (Upper and Lower Control Limits):

UCL_{S}=overline(S}+3{overline{S}}/{c_4}root{}{1-{c_4}^2}

LCL_{S}=MIN delim{[}{0, overline{S}-3{overline{S}}/{c_4}root{}{1-{c_4}^2}}{]}

where:

Sample

For instance, factory produces 100000 camshafts per day, and checks diameter of a fixed number of camshafts every day. Below there is a table of sample number and measurements:

Sample Part 1 Part 2
1 0.180 0.189
2 0.185 0.188
3 0.180 0.182
4 0.182 0.181
5 0.188 0.183
6 0.181 0.184
7 0.182 0.185
8 0.186 0.188
9 0.181 0.185
10 0.185 0.182
11 0.179 0.186
12 0.181 0.181
13 0.182 0.182
14 0.181 0.188
15 0.180 0.183
16 0.183 0.182
17 0.181 0.182
18 0.182 0.188
19 0.181 0.186
20 0.180 0.184
21 0.183 0.182
22 0.181 0.187
23 0.182 0.183
24 0.181 0.187
25 0.183 0.186
26 0.181 0.189
27 0.182 0.184

We want to draw a XBar&S for this data.

Creating chart's data model:

1
2
3
4
5
6
7
8
9
/*
 * Creating data model
*/
ChartDataModel  dataModel = new ChartDataModel();
dataModel.addKeyValues(("1"), new Object[] { 0.180,0.189});
dataModel.addKeyValues(("2"), new Object[] { 0.185,0.188 });
dataModel.addKeyValues(("3"), new Object[] { 0.180,0.182 });
dataModel.addKeyValues(("4"), new Object[] { 0.182,0.181 });
//.......

Creating chart:

1
2
3
4
5
6
7
8
9
10
/* Creates ControlChart object named chart, where
*    dataModel contains data which we want to plot
*    ControlChartType.Sigma is an enumeration used to determine chart's type */
  ControlChart chart = new ControlChart(dataModel, ControlChartType.Sigma);
 
/* Creates ControlChart object named chart2, where
*    dataModel contains data which we want to plot
*    ControlChartType.X is an enumeration used to determine chart's type */
  ControlChart chart2 = new ControlChart(dataModel, ControlChartType.X);
 

XBar Sigma Demonstration

Figure 4.3.1.5.1 XBar Sigma Demonstration

View Source

4.3.1.6 XBar&R (XBar Range) chart

An X-bar and R (range) chart is a pair of control charts for variables data. The chart should be used with a subgroups size of two or more – the chart shows the stability and predictability of the system. Also it enables to monitor the effect of process improvements. The chart, actually, consists of two separate charts: X-bar (process location over time, based on average of series of observations) and Range chart (the change of range of subgroups over time).

Formulas

X-bar chart: UCL and LCL (Upper and Lower Control Limits)

UCL_{xbar}={overline{overline{x}}}+3{sigma_{x}/root{}{n}}

LCL_{xbar}={overline{overline{x}}}-3{sigma_{x}/root{}{n}}

where:

Average (X-bar):

{overline{x}}=1/n{sum{i=1}{n}{x_{i}}}

where:

Average of subgroups (X-doublebar):

{overline{overline{x}}}=1/{m*n}sum{j=1}{m}{sum{i=1}{n}{x_{i}}}

where:

When the subgroup size is n=1 this equation simplifies to {overline{overline{x}}}=1/m{sum{j=1}{m}{x_{j}}}

Process Sigma based on Range chart

sigma_{x}=delim{lbrace}{matrix{2}{1}{{{overline{R}}/{d_{2}}, when n is constant} {{{sum{j=1}{m}{e_{j}R_{j}}}/{sum{j=1}{m}{f_{j}}}, when n is not constant}}}}{rbrace}

where:

Average Range

overline{R}=delim{lbrace}{matrix{2}{1}{{{1/m}{sum{j=1}{m}{R_{j}}}, when n is constant} {{d_{2}sigma_{x}}, when n is not constant}}}{rbrace}

where:

Range chart calculations:

Plotted statistic:

R_{j}=MAX delim{[}{x_1,x_2,...,x_n}{]}-MIN delim{[}{x_1,x_2,...,x_n}{]}, where x_1, x_2, ... are the n observations in subgroup j

UCL and LCL (Upper and Lower Control Limits):

UCL_{R}=overline(R}+3d_3sigma_x

LCL_{R}=MAX delim{[}{0, overline{R}-3d_3sigma_x}{]}

where:

Sample

For instance, factory produces 100000 camshafts per day, and checks diameter of a fixed number of camshafts every day. Below there is a table of sample number and measurements:

Sample Part 1 Part 2
1 0.180 0.189
2 0.185 0.188
3 0.180 0.182
4 0.182 0.181
5 0.188 0.183
6 0.181 0.184
7 0.182 0.185
8 0.186 0.188
9 0.181 0.185
10 0.185 0.182
11 0.179 0.186
12 0.181 0.181
13 0.182 0.182
14 0.181 0.188
15 0.180 0.183
16 0.183 0.182
17 0.181 0.182
18 0.182 0.188
19 0.181 0.186
20 0.180 0.184
21 0.183 0.182
22 0.181 0.187
23 0.182 0.183
24 0.181 0.187
25 0.183 0.186
26 0.181 0.189
27 0.182 0.184

We want to draw a XBar&R for this data.

Creating chart's data model:

1
2
3
4
5
6
7
8
9
/*
 * Creating data model
*/
ChartDataModel  dataModel = new ChartDataModel();
dataModel.addKeyValues(("1"), new Object[] { 0.180,0.189});
dataModel.addKeyValues(("2"), new Object[] { 0.185,0.188 });
dataModel.addKeyValues(("3"), new Object[] { 0.180,0.182 });
dataModel.addKeyValues(("4"), new Object[] { 0.182,0.181 });
//.......

Creating chart:

1
2
3
4
5
6
7
8
9
10
/* Creates ControlChart object named chart, where
*    dataModel contains data which we want to plot
*    ControlChartType.Range is an enumeration used to determine chart's type */
  ControlChart chart = new ControlChart(dataModel, ControlChartType.Range);
 
/* Creates ControlChart object named chart2, where
*    dataModel contains data which we want to plot
*    ControlChartType.X is an enumeration used to determine chart's type */
  ControlChart chart2 = new ControlChart(dataModel, ControlChartType.X);
 

XBar Range Demonstration

Figure 4.3.1.6.1 XBar Range Demonstration

View Source

4.3.1.7 IMR (individual/moving-range) chart

IMR (or Individuals and Moving Range) chart is a pair of control charts for processes with a subgroup size of one. IMR charts help to determine whether the process is stable and predictable and to observe how the system changes over time. The separate charts illustrates different information: individual (X) chart displays individual measurements and moving range (MR) shows variability between two sequential points. The charts also enable to monitor the effect of process improvements.

Formulas

Individual(X) chart: UCL and LCL (Upper and Lower Control Limits)

UCL_{x}={overline{x}}+3{sigma_{x}}

LCL_{x}={overline{x}}-3{sigma_{x}}

where:

Average (X-bar):

{overline{x}}=1/n{sum{i=1}{n}{x_{i}}}

where:

Average of subgroups (X-doublebar):

{overline{overline{x}}}=1/{m*n}sum{j=1}{m}{sum{i=1}{n}{x_{i}}}

where:

When the subgroup size is n=1 this equation simplifies to {overline{overline{x}}}=1/m{sum{j=1}{m}{x_{j}}}

Process Sigma based on Moving Range chart

sigma_{x}={overline{MR}}/{d_{2}}

where:

Moving Range chart calculations:

Plotted statistic:

The moving ranges between successive subgroups in an Individual-X Chart

MR_{j}= delim{|}{x_j-x_{j-1}}{|}

Center line:

overline{MR}= 1/{m-1}{sum{j=1}{m}{MR_j}}

where:

UCL and LCL (Upper and Lower Control Limits):

UCL_{MR}=overline(MR}+3d_3sigma_x

LCL_{MR}=MAX delim{[}{0, overline{MR}-3d_3sigma_x}{]}

where:

Sample

For instance, factory is producing very high quality single-pipe steam radiators. Radiator height was observed.

Sample Height in
1 28.570
2 28.575
3 28.570
4 28.572
5 28.578
6 28.571
7 28.572
8 28.576
9 28.571
10 28.575
11 28.569
12 28.571
13 28.572
14 28.571
15 28.570
16 28.573
17 28.571
18 28.572
19 28.571
20 28.570
21 28.573
22 28.571
23 28.572
24 28.571
25 28.573
26 28.571
27 28.572

We want to draw a IMR chart for this data.

Creating chart's data model:

1
2
3
4
5
6
7
8
9
10
/*
 * Creating data model
*/
ChartDataModel  dataModel = new ChartDataModel();
dataModel.addKeyValues(("1"), new Object[] { 28.570 });
dataModel.addKeyValues(("2"), new Object[] { 28.575 });
dataModel.addKeyValues(("3"), new Object[] { 28.570 });
dataModel.addKeyValues(("4"), new Object[] { 28.572 });
dataModel.addKeyValues(("5"), new Object[] { 28.578 });
//.......

Creating chart:

1
2
3
4
5
6
7
8
9
10
/* Creates ControlChart object named chart, where
*    dataModel contains data which we want to plot
*    ControlChartType.MovingRange is an enumeration used to determine chart's type */
  ControlChart chart = new ControlChart(dataModel, ControlChartType.MovingRange);
 
/* Creates ControlChart object named chart2, where
*    dataModel contains data which we want to plot 
*    ControlChartType.Individuals is an enumeration used to determine chart's type */
  ControlChart chart2 = new ControlChart(dataModel, ControlChartType.Individuals);
 

IMR Chart Demonstration

Figure 4.3.1.7.1 IMR Chart Demonstration

View Source