Introduction

In semiconductor manufacturing, consistent electrical properties of silicon wafers are essential for producing high-quality chips, and resistivity is one of the key metrics. To maintain process stability, resistivity is monitored through retrospective analysis and online process monitoring.

This report uses two datasets: one with 30 subgroups of 5 measurements each for retrospective analysis, and another with new production runs for online monitoring.


Methodology

The analysis starts by preparing the retrospective dataset and making control charts, then refining the limits until they are stable. These limits are applied to online data to check for issues, and corrective actions are suggested if problems appear. The steps are as follows:

  1. Import the retrospective dataset (30 subgroups, each with 5 measurements).
  2. Generate initial X-bar and R charts.
  3. Identify & remove out-of-control points iteratively.
  4. Recalculate limits until the process is stable.
  5. Apply final limits to online dataset
  6. Track online data for out of control points and suggest improvements.


Retrospective Analysis

The retrospective dataset was imported, consisting of 30 subgroups with 5 measurements each. The X-bar chart were produced using the qcc library to visualize subgroup averages and assess process stability.

Retrospective_Data <- read.csv("~/Downloads/retrospective_resistivity.csv",header=FALSE)

# install.packages("qcc")
library(qcc)
## Package 'qcc' version 2.7
## Type 'citation("qcc")' for citing this R package in publications.
qcc(Retrospective_Data,
    type="xbar",
    sizes=5)

## List of 11
##  $ call      : language qcc(data = Retrospective_Data, type = "xbar", sizes = 5)
##  $ type      : chr "xbar"
##  $ data.name : chr "Retrospective_Data"
##  $ data      : num [1:30, 1:5] 10.25 9.88 9.77 9.72 10.73 ...
##   ..- attr(*, "dimnames")=List of 2
##  $ statistics: Named num [1:30] 10.23 10.22 9.57 9.64 9.93 ...
##   ..- attr(*, "names")= chr [1:30] "1" "2" "3" "4" ...
##  $ sizes     : num [1:30] 5 5 5 5 5 5 5 5 5 5 ...
##  $ center    : num 9.96
##  $ std.dev   : num 0.499
##  $ nsigmas   : num 3
##  $ limits    : num [1, 1:2] 9.29 10.63
##   ..- attr(*, "dimnames")=List of 2
##  $ violations:List of 2
##  - attr(*, "class")= chr "qcc"

Subgroups 6 and 16 were identified as out-of-control since their averages fall outside the calculated control limits.

To refine the control limits, subgroup 6 was removed from the dataset since it exceeded the upper control limit. The revised data were then used to recalculate the X-bar chart.

Retrospective_Data2 <- Retrospective_Data[-6,]

qcc(Retrospective_Data2,
    type="xbar",
    sizes=5)

## List of 11
##  $ call      : language qcc(data = Retrospective_Data2, type = "xbar", sizes = 5)
##  $ type      : chr "xbar"
##  $ data.name : chr "Retrospective_Data2"
##  $ data      : num [1:29, 1:5] 10.25 9.88 9.77 9.72 10.73 ...
##   ..- attr(*, "dimnames")=List of 2
##  $ statistics: Named num [1:29] 10.23 10.22 9.57 9.64 9.93 ...
##   ..- attr(*, "names")= chr [1:29] "1" "2" "3" "4" ...
##  $ sizes     : num [1:29] 5 5 5 5 5 5 5 5 5 5 ...
##  $ center    : num 9.89
##  $ std.dev   : num 0.505
##  $ nsigmas   : num 3
##  $ limits    : num [1, 1:2] 9.22 10.57
##   ..- attr(*, "dimnames")=List of 2
##  $ violations:List of 2
##  - attr(*, "class")= chr "qcc"

Since subgroup 16 remained below the lower control limit, it was also removed from the dataset. After excluding both subgroups 6 and 16, the recalculated X-bar chart showed all remaining points within the control limits, indicating a stable process.

Retrospective_Data3 <- Retrospective_Data[-c(6, 16), ]

qcc(Retrospective_Data3,
    type="xbar",
    sizes=5)

## List of 11
##  $ call      : language qcc(data = Retrospective_Data3, type = "xbar", sizes = 5)
##  $ type      : chr "xbar"
##  $ data.name : chr "Retrospective_Data3"
##  $ data      : num [1:28, 1:5] 10.25 9.88 9.77 9.72 10.73 ...
##   ..- attr(*, "dimnames")=List of 2
##  $ statistics: Named num [1:28] 10.23 10.22 9.57 9.64 9.93 ...
##   ..- attr(*, "names")= chr [1:28] "1" "2" "3" "4" ...
##  $ sizes     : num [1:28] 5 5 5 5 5 5 5 5 5 5 ...
##  $ center    : num 9.97
##  $ std.dev   : num 0.501
##  $ nsigmas   : num 3
##  $ limits    : num [1, 1:2] 9.29 10.64
##   ..- attr(*, "dimnames")=List of 2
##  $ violations:List of 2
##  - attr(*, "class")= chr "qcc"

The final control limits were established after removing subgroups 6 and 16, which were outside the acceptable range. With these exclusions, the X-bar chart shows all remaining subgroups are within control, indicating a stable process.

The R chart displays the variability in the ranges of the subgroups after removing the out-of-control points from subgroups 6 and 16.

Retrospective_Data3 <- Retrospective_Data[-c(6, 16), ]

qcc(Retrospective_Data3,
    type="R",
    sizes=5)

## List of 11
##  $ call      : language qcc(data = Retrospective_Data3, type = "R", sizes = 5)
##  $ type      : chr "R"
##  $ data.name : chr "Retrospective_Data3"
##  $ data      : num [1:28, 1:5] 10.25 9.88 9.77 9.72 10.73 ...
##   ..- attr(*, "dimnames")=List of 2
##  $ statistics: Named num [1:28] 0.879 1.024 1.078 0.863 1.445 ...
##   ..- attr(*, "names")= chr [1:28] "1" "2" "3" "4" ...
##  $ sizes     : num [1:28] 5 5 5 5 5 5 5 5 5 5 ...
##  $ center    : num 1.17
##  $ std.dev   : num 0.501
##  $ nsigmas   : num 3
##  $ limits    : num [1, 1:2] 0 2.47
##   ..- attr(*, "dimnames")=List of 2
##  $ violations:List of 2
##  - attr(*, "class")= chr "qcc"

The R chart shows that all subgroup ranges fall within the control limits, confirming that the process variation is stable.


Online Process Monitoring

The online process monitoring step involves plotting the new data on the X-bar and R charts using the established control limits. By comparing the new points to these limits, it can be determined if the process remains stable or shows signs of shifting out of control. Any points outside the limits should be investigated for potential causes and corrective actions.

An X-bar and R chart is generated from the online data and then plotting them against established control limits. These charts are used together to monitor both the process mean and the variation over time.

Online_Data <- read.csv("~/Downloads/online_resistivity.csv",header=FALSE)

qcc(data=Online_Data,
    type="xbar",
    sizes=5,
    center=9.966048,
    std.dev = 0.501233)

## List of 11
##  $ call      : language qcc(data = Online_Data, type = "xbar", sizes = 5, center = 9.966048, std.dev = 0.501233)
##  $ type      : chr "xbar"
##  $ data.name : chr "Online_Data"
##  $ data      : num [1:10, 1:5] 10.13 9.64 9.51 10.21 9.56 ...
##   ..- attr(*, "dimnames")=List of 2
##  $ statistics: Named num [1:10] 10.04 10.11 10.11 10.21 9.88 ...
##   ..- attr(*, "names")= chr [1:10] "1" "2" "3" "4" ...
##  $ sizes     : num [1:10] 5 5 5 5 5 5 5 5 5 5
##  $ center    : num 9.97
##  $ std.dev   : num 0.501
##  $ nsigmas   : num 3
##  $ limits    : num [1, 1:2] 9.29 10.64
##   ..- attr(*, "dimnames")=List of 2
##  $ violations:List of 2
##  - attr(*, "class")= chr "qcc"
qcc(data=Online_Data,
    type="R",
    sizes=5,
    center=1.165868,
    std.dev = 0.501233)

## List of 11
##  $ call      : language qcc(data = Online_Data, type = "R", sizes = 5, center = 1.165868, std.dev = 0.501233)
##  $ type      : chr "R"
##  $ data.name : chr "Online_Data"
##  $ data      : num [1:10, 1:5] 10.13 9.64 9.51 10.21 9.56 ...
##   ..- attr(*, "dimnames")=List of 2
##  $ statistics: Named num [1:10] 0.513 1.529 1.067 1.325 0.615 ...
##   ..- attr(*, "names")= chr [1:10] "1" "2" "3" "4" ...
##  $ sizes     : num [1:10] 5 5 5 5 5 5 5 5 5 5
##  $ center    : num 1.17
##  $ std.dev   : num 0.501
##  $ nsigmas   : num 3
##  $ limits    : num [1, 1:2] 0 2.47
##   ..- attr(*, "dimnames")=List of 2
##  $ violations:List of 2
##  - attr(*, "class")= chr "qcc"

The X-bar and R charts both show that all points fall within the established control limits, indicating the process mean and variation are stable. With no signs of out-of-control points, the process is operating consistently. This confirms that the process remains in statistical control.