R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

Part 1: Defect Detection in Semiconductor Wafer Production

In semiconductor manufacturing, defects such as dust particles, contamination, or misalignment can affect chip yield. A C-Chart is used here to monitor the number of defects per wafer.

Retrospective Analysis (100 wafers)

library(qcc)
## Warning: package 'qcc' was built under R version 4.4.3
## Package 'qcc' version 2.7
## Type 'citation("qcc")' for citing this R package in publications.
retro <- read.csv("C:/Users/rijul/Downloads/wafer_defect_retrospective.csv", header = FALSE)
colnames(retro) <- "Defect_Count"

qcc1 <- qcc(data = retro$Defect_Count, type = "c", title = "C-Chart for Retrospective Data")

LCL <- qcc1$limits[1]
UCL <- qcc1$limits[2]
retro2 <- subset(retro, Defect_Count >= LCL & Defect_Count <= UCL)

set.seed(123)
online <- data.frame(Defect_Count = rpois(30, mean(retro2$Defect_Count)))

qcc(data = retro2$Defect_Count, type = "c", newdata = online$Defect_Count, title = "C-Chart with Online Data")

## List of 15
##  $ call        : language qcc(data = retro2$Defect_Count, type = "c", newdata = online$Defect_Count,      title = "C-Chart with Online Data")
##  $ type        : chr "c"
##  $ data.name   : chr "retro2$Defect_Count"
##  $ data        : int [1:100, 1] 3 1 7 3 4 2 1 4 4 1 ...
##   ..- attr(*, "dimnames")=List of 2
##  $ statistics  : Named int [1:100] 3 1 7 3 4 2 1 4 4 1 ...
##   ..- attr(*, "names")= chr [1:100] "1" "2" "3" "4" ...
##  $ sizes       : int [1:100] 1 1 1 1 1 1 1 1 1 1 ...
##  $ center      : num 3
##  $ std.dev     : num 1.73
##  $ newstats    : Named int [1:30] 2 4 2 5 6 0 3 5 3 3 ...
##   ..- attr(*, "names")= chr [1:30] "101" "102" "103" "104" ...
##  $ newdata     : int [1:30, 1] 2 4 2 5 6 0 3 5 3 3 ...
##  $ newsizes    : int [1:30] 1 1 1 1 1 1 1 1 1 1 ...
##  $ newdata.name: chr "online$Defect_Count"
##  $ nsigmas     : num 3
##  $ limits      : num [1, 1:2] 0 8.2
##   ..- attr(*, "dimnames")=List of 2
##  $ violations  :List of 2
##  - attr(*, "class")= chr "qcc"

Part 2: Monitoring the Percent of Defective Microchips

Manufacturers test batches of microchips using optical, X-ray, and electrical inspection systems.
An np-Chart monitors the number of defective chips per subgroup of 50.

Retrospective Analysis (100 subgroups)

retro <- read.csv("C:/Users/rijul/Downloads/retrospective_semiconductor_np_chart (1).csv", header = FALSE)
online <- read.csv("C:/Users/rijul/Downloads/online_monitoring_semiconductor_np_chart (1).csv", header = FALSE)

colnames(retro) <- "Defectives"
colnames(online) <- "Defectives"

sizes_retro <- rep(50, nrow(retro))
sizes_online <- rep(50, nrow(online))

qcc1 <- qcc(data = retro$Defectives, sizes = sizes_retro, type = "np", title = "np-Chart for Retrospective Data")

LCL <- qcc1$limits[1]
UCL <- qcc1$limits[2]
retro2 <- subset(retro, Defectives >= LCL & Defectives <= UCL)

qcc(data = retro2$Defectives, sizes = rep(50, nrow(retro2)), type = "np",
    newdata = online$Defectives, newsizes = rep(50, nrow(online)),
    title = "np-Chart with Online Monitoring Data")

## List of 15
##  $ call        : language qcc(data = retro2$Defectives, type = "np", sizes = rep(50, nrow(retro2)),      newdata = online$Defectives, newsi| __truncated__
##  $ type        : chr "np"
##  $ data.name   : chr "retro2$Defectives"
##  $ data        : int [1:99, 1] 5 4 4 4 2 5 2 5 3 5 ...
##   ..- attr(*, "dimnames")=List of 2
##  $ statistics  : Named int [1:99] 5 4 4 4 2 5 2 5 3 5 ...
##   ..- attr(*, "names")= chr [1:99] "1" "2" "3" "4" ...
##  $ sizes       : num [1:99] 50 50 50 50 50 50 50 50 50 50 ...
##  $ center      : num 3.98
##  $ std.dev     : num 1.91
##  $ newstats    : Named int [1:50] 7 8 1 8 2 10 6 8 1 4 ...
##   ..- attr(*, "names")= chr [1:50] "100" "101" "102" "103" ...
##  $ newdata     : int [1:50, 1] 7 8 1 8 2 10 6 8 1 4 ...
##  $ newsizes    : num [1:50] 50 50 50 50 50 50 50 50 50 50 ...
##  $ newdata.name: chr "online$Defectives"
##  $ nsigmas     : num 3
##  $ limits      : num [1, 1:2] 0 9.72
##   ..- attr(*, "dimnames")=List of 2
##  $ violations  :List of 2
##  - attr(*, "class")= chr "qcc"

Interpretation

The np-chart helps ensure that the proportion of defective microchips remains stable over time.
Points outside control limits signal possible issues in the manufacturing process that require investigation.

Summary