This report analyzes defect data from a semiconductor fabrication facility using an np control chart. In the photolithography stage of wafer production, quality engineers inspected \(n = 200\) wafers per lot across \(k = 50\) consecutive lots. The number of defective wafers in each lot was recorded during a period believed to represent a stable, in-control process.
The goal is to use the qcc package in R to construct an
np control chart, verify process stability, and establish control limits
for ongoing monitoring.
# install.packages("qcc")
library(qcc)
The defect counts below represent the number of defective wafers (out of \(n = 200\) sampled) for each of the \(k = 50\) lots:
defects <- c(8, 7, 11, 3, 6, 11, 4, 4, 5, 8, 8, 6, 7, 6, 10, 7, 9, 5, 6, 8,
8, 10, 4, 11, 4, 11, 6, 6, 9, 5, 4, 7, 5, 7, 8, 5, 10, 9, 7, 9,
4, 9, 4, 7, 11, 8, 10, 8, 7, 5)
n <- 200 # sample size per lot
k <- 50 # number of lots
For an np control chart, the estimated fraction defective is:
\[ \hat{p} = \frac{\sum_{i=1}^{k} D_i}{k \cdot n} \]
where \(D_i\) is the number of defectives in lot \(i\), \(k\) is the number of lots, and \(n\) is the sample size per lot.
The control limits for the np chart are defined as:
\[ UCL = n\hat{p} + 3\sqrt{n\hat{p}(1 - \hat{p})} \]
\[ CL = n\hat{p} \]
\[ LCL = \max\left(0,\ n\hat{p} - 3\sqrt{n\hat{p}(1 - \hat{p})}\right) \]
p_hat <- sum(defects) / (k * n)
np_bar <- n * p_hat
UCL <- np_bar + 3 * sqrt(np_bar * (1 - p_hat))
LCL <- max(0, np_bar - 3 * sqrt(np_bar * (1 - p_hat)))
cat("Estimated p-hat: ", round(p_hat, 4), "\n")
## Estimated p-hat: 0.0357
cat("Center Line (np-bar): ", round(np_bar, 4), "\n")
## Center Line (np-bar): 7.14
cat("UCL: ", round(UCL, 4), "\n")
## UCL: 15.0118
cat("LCL: ", round(LCL, 4), "\n")
## LCL: 0
The qcc object for the np control chart is constructed
below using the qcc package with
nsigmas = 3:
np_chart <- qcc(data = defects, type = "np", sizes = n, nsigmas = 3,
title = "np Control Chart – Semiconductor Wafer Defects",
xlab = "Lot Number", ylab = "Number of Defective Wafers")
summary(np_chart)
##
## Call:
## qcc(data = defects, type = "np", sizes = n, nsigmas = 3, title = "np Control Chart – Semiconductor Wafer Defects", xlab = "Lot Number", ylab = "Number of Defective Wafers")
##
## np chart for defects
##
## Summary of group statistics:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.00 5.00 7.00 7.14 9.00 11.00
##
## Group sample size: 200
## Number of groups: 50
## Center of group statistics: 7.14
## Standard deviation: 2.623948
##
## Control limits:
## LCL UCL
## 0 15.01184
The np control chart constructed from \(k = 50\) lots of \(n = 200\) wafers each reveals the following:
These control limits can now be adopted as Phase II (prospective) control limits to monitor future lots. Any future lot with a defect count exceeding 16 defective wafers should trigger an investigation into potential assignable causes.
# install.packages("qcc")
library(qcc)
# Data: number of defective wafers per lot (n = 200, k = 50 lots)
defects <- c(8, 7, 11, 3, 6, 11, 4, 4, 5, 8, 8, 6, 7, 6, 10, 7, 9, 5, 6, 8,
8, 10, 4, 11, 4, 11, 6, 6, 9, 5, 4, 7, 5, 7, 8, 5, 10, 9, 7, 9,
4, 9, 4, 7, 11, 8, 10, 8, 7, 5)
n <- 200
k <- 50
# Manually compute control limits
p_hat <- sum(defects) / (k * n)
np_bar <- n * p_hat
UCL <- np_bar + 3 * sqrt(np_bar * (1 - p_hat))
LCL <- max(0, np_bar - 3 * sqrt(np_bar * (1 - p_hat)))
cat("p_hat:", round(p_hat, 4), "\n")
cat("Center Line (np-bar):", round(np_bar, 4), "\n")
cat("UCL:", round(UCL, 4), "\n")
cat("LCL:", round(LCL, 4), "\n")
# np control chart using qcc
np_chart <- qcc(data = defects, type = "np", sizes = n, nsigmas = 3,
title = "np Control Chart – Semiconductor Wafer Defects",
xlab = "Lot Number", ylab = "Number of Defective Wafers")
summary(np_chart)