Introduction

This report analyzes semiconductor PCM (Parametric Control Monitor) data using statistical process control tools. The goal is to evaluate the stability and capability of a selected PCM characteristic across 14 wafers and 5 measurement sites per wafer. A small set of rows in the dataset contain specification limits (LSL, Target, and USL), while the remaining rows contain actual PCM measurements.

The analysis uses X-bar and R control charts to check whether the process is stable, and a capability study (Cp, Cpk, and Cpm) to measure how well the process fits within the specification limits. The focus of this report is on PCM15, but the structure applies to any PCM parameter in the dataset.

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
## Warning: package 'tidyr' was built under R version 4.4.3
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.

Data Preparation

This section loads the dataset, identifies PCM measurement columns, separates specification rows from measurement rows, and extracts the specification limits for the selected PCM. The data is then reshaped into a wafer-by-site format so that each wafer forms a subgroup for control chart analysis.

# 1) Load the CSV
dat <- read.csv(
  "C:/Users/rijul/Desktop/IE 4331 Seminconductor/Semiconductor_PCM_with_specs_and_targets.csv",
  stringsAsFactors = FALSE
)

# 2) Confirm structure
names(dat)[1:15]
##  [1] "X"      "LOT."   "WAFER." "SITE."  "DATE"   "TIME"   "PCM1"   "PCM2"  
##  [9] "PCM3"   "PCM4"   "PCM5"   "PCM6"   "PCM7"   "PCM8"   "PCM9"
pcm_cols <- grep("^PCM[0-9]+$", names(dat), value = TRUE)
length(pcm_cols)   
## [1] 50
pcm_cols[1:10]      
##  [1] "PCM1"  "PCM2"  "PCM3"  "PCM4"  "PCM5"  "PCM6"  "PCM7"  "PCM8"  "PCM9" 
## [10] "PCM10"
length(pcm_cols)    
## [1] 50
spec_labels <- c("USL", "LSL", "Target")
spec_idx <- apply(
  dat,
  1,
  function(r) any(trimws(as.character(r)) %in% spec_labels, na.rm = TRUE)
)

spec_rows    <- dat[spec_idx, , drop = FALSE]
measure_rows <- dat[!spec_idx, , drop = FALSE]

nrow(spec_rows)
## [1] 3
nrow(measure_rows)
## [1] 70
spec_rows   
##         X LOT. WAFER. SITE. DATE TIME        PCM1     PCM2        PCM3
## 71    USL          NA    NA           0.009173779 74.22111 0.004880995
## 72    LSL          NA    NA           0.006368221 54.57180 0.003965863
## 73 Target          NA    NA           0.007849575 64.05749 0.004467099
##         PCM4        PCM5     PCM6        PCM7     PCM8        PCM9    PCM10
## 71 126.51533 0.002577805 227.6964 0.001710144 326.2291 0.001303463 432.1314
## 72  99.66375 0.002171052 193.6106 0.001538427 289.9696 0.001165395 378.7194
## 73 115.03557 0.002341591 212.6071 0.001633062 311.0399 0.001239390 401.9382
##           PCM11    PCM12    PCM13     PCM14      PCM15     PCM16        PCM17
## 71 0.0010469330 529.7991 1132.558 26.478419 -0.8122365 1.1939760 1.384630e-05
## 72 0.0009423813 475.4693 1010.294  5.042095 -2.4230492 0.4236525 3.277005e-07
## 73 0.0009926687 501.8296 1070.757 16.312247 -1.5620054 0.8252239 8.248952e-06
##            PCM18     PCM19         PCM20     PCM21         PCM22    PCM23
## 71 -0.0003236199 2644.8684 -0.0001439084 4211.3891 -8.088724e-05 6470.633
## 72 -0.0022623801  500.2064 -0.0016620630  294.6397 -1.080941e-03  540.140
## 73 -0.0011977299 1664.9423 -0.0008556373 2524.3710 -5.317625e-04 3741.267
##            PCM24     PCM25         PCM26     PCM27         PCM28     PCM29
## 71 -0.0001110670 8955.7937 -6.966755e-05 10599.078 -9.843982e-05 12195.452
## 72 -0.0007546759  457.6965 -6.247039e-04  1146.981 -4.800173e-04  1899.939
## 73 -0.0004549238 5213.8209 -3.589505e-04  6195.076 -2.979475e-04  7016.222
##        PCM30     PCM31      PCM32    PCM33        PCM34         PCM35     PCM36
## 71 22697.208 1826.9959  -6.906653 5.039886 0.0040545863 -0.0001012769 10379.326
## 72  3955.937  233.0227 -10.159432 3.493143 0.0007682708 -0.0006114088  1104.634
## 73 12424.833 1103.4228  -8.488142 4.337370 0.0026487738 -0.0003574927  6542.399
##            PCM37       PCM38         PCM39     PCM40         PCM41     PCM42
## 71 -2.871637e-05 20071.53953 -1.583066e-05 34887.695 -8.582558e-06 58091.649
## 72 -3.811408e-04   -53.30695 -2.076722e-04  1903.849 -1.449689e-04 -4519.602
## 73 -1.778620e-04  9102.28513 -1.129460e-04 18389.188 -7.747921e-05 22497.575
##            PCM43     PCM44         PCM45      PCM46      PCM47     PCM48
## 71 -1.442708e-05 78672.671 -5.013352e-06 88175.0841 178643.972 2952.5201
## 72 -1.024758e-04 -8278.224 -8.932379e-05  -914.9252   6404.598  175.8334
## 73 -5.120150e-05 41719.180 -4.298998e-05 44134.6193  81572.243 1557.5804
##         PCM49     PCM50 Unnamed..55 Unnamed..56 Unnamed..57 Unnamed..58
## 71 -0.3658308 1.5802222          NA          NA          NA          NA
## 72 -3.4115406 0.3085493          NA          NA          NA          NA
## 73 -2.0363228 1.0362574          NA          NA          NA          NA
##    Unnamed..59 Unnamed..60 Unnamed..61 Unnamed..62 Unnamed..63 Unnamed..64
## 71          NA          NA          NA          NA          NA          NA
## 72          NA          NA          NA          NA          NA          NA
## 73          NA          NA          NA          NA          NA          NA
##    Unnamed..65 Unnamed..66 Unnamed..67 Unnamed..68 Unnamed..69 Unnamed..70
## 71          NA          NA          NA          NA          NA          NA
## 72          NA          NA          NA          NA          NA          NA
## 73          NA          NA          NA          NA          NA          NA
##    Unnamed..71 Unnamed..72 Unnamed..73 Unnamed..74 Unnamed..75 Unnamed..76
## 71          NA          NA          NA          NA          NA          NA
## 72          NA          NA          NA          NA          NA          NA
## 73          NA          NA          NA          NA          NA          NA
##    Unnamed..77 Unnamed..78 Unnamed..79 Unnamed..80 Unnamed..81 Unnamed..82
## 71          NA          NA          NA          NA          NA          NA
## 72          NA          NA          NA          NA          NA          NA
## 73          NA          NA          NA          NA          NA          NA
##    Unnamed..83 Unnamed..84 Unnamed..85 Unnamed..86 Unnamed..87 Unnamed..88
## 71          NA          NA          NA          NA          NA          NA
## 72          NA          NA          NA          NA          NA          NA
## 73          NA          NA          NA          NA          NA          NA
##    Unnamed..89 Unnamed..90 Unnamed..91 Unnamed..92 Unnamed..93 Unnamed..94
## 71          NA          NA          NA          NA          NA          NA
## 72          NA          NA          NA          NA          NA          NA
## 73          NA          NA          NA          NA          NA          NA
##    Unnamed..95 Unnamed..96 Unnamed..97 Unnamed..98 Unnamed..99 Unnamed..100
## 71          NA          NA          NA          NA          NA           NA
## 72          NA          NA          NA          NA          NA           NA
## 73          NA          NA          NA          NA          NA           NA
##    Unnamed..101 Unnamed..102 Unnamed..103 Unnamed..104 Unnamed..105
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..106 Unnamed..107 Unnamed..108 Unnamed..109 Unnamed..110
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..111 Unnamed..112 Unnamed..113 Unnamed..114 Unnamed..115
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..116 Unnamed..117 Unnamed..118 Unnamed..119 Unnamed..120
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..121 Unnamed..122 Unnamed..123 Unnamed..124 Unnamed..125
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..126 Unnamed..127 Unnamed..128 Unnamed..129 Unnamed..130
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..131 Unnamed..132 Unnamed..133 Unnamed..134 Unnamed..135
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..136 Unnamed..137 Unnamed..138 Unnamed..139 Unnamed..140
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..141 Unnamed..142 Unnamed..143 Unnamed..144 Unnamed..145
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..146 Unnamed..147 Unnamed..148 Unnamed..149 Unnamed..150
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..151 Unnamed..152 Unnamed..153 Unnamed..154 Unnamed..155
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..156 Unnamed..157 Unnamed..158 Unnamed..159 Unnamed..160
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..161 Unnamed..162 Unnamed..163 Unnamed..164 Unnamed..165
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..166 Unnamed..167 Unnamed..168 Unnamed..169 Unnamed..170
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..171 Unnamed..172 Unnamed..173 Unnamed..174 Unnamed..175
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..176 Unnamed..177 Unnamed..178 Unnamed..179 Unnamed..180
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..181 Unnamed..182 Unnamed..183 Unnamed..184 Unnamed..185
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..186 Unnamed..187 Unnamed..188 Unnamed..189 Unnamed..190
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..191 Unnamed..192 Unnamed..193 Unnamed..194 Unnamed..195
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..196 Unnamed..197 Unnamed..198 Unnamed..199 Unnamed..200
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..201 Unnamed..202 Unnamed..203 Unnamed..204 Unnamed..205
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..206 Unnamed..207 Unnamed..208 Unnamed..209 Unnamed..210
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..211 Unnamed..212 Unnamed..213 Unnamed..214 Unnamed..215
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..216 Unnamed..217 Unnamed..218 Unnamed..219 Unnamed..220
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..221 Unnamed..222 Unnamed..223 Unnamed..224 Unnamed..225
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..226 Unnamed..227 Unnamed..228 Unnamed..229 Unnamed..230
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..231 Unnamed..232 Unnamed..233 Unnamed..234 Unnamed..235
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..236 Unnamed..237 Unnamed..238 Unnamed..239 Unnamed..240
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..241 Unnamed..242 Unnamed..243 Unnamed..244 Unnamed..245
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..246 Unnamed..247 Unnamed..248 Unnamed..249 Unnamed..250
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..251 Unnamed..252 Unnamed..253 Unnamed..254 Unnamed..255
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..256 Unnamed..257 Unnamed..258 Unnamed..259 Unnamed..260
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..261 Unnamed..262 Unnamed..263 Unnamed..264 Unnamed..265
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..266 Unnamed..267 Unnamed..268 Unnamed..269 Unnamed..270
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..271 Unnamed..272 Unnamed..273 Unnamed..274 Unnamed..275
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..276 Unnamed..277 Unnamed..278 Unnamed..279 Unnamed..280
## 71           NA           NA           NA           NA           NA
## 72           NA           NA           NA           NA           NA
## 73           NA           NA           NA           NA           NA
##    Unnamed..281 Unnamed..282 Unnamed..283
## 71           NA           NA           NA
## 72           NA           NA           NA
## 73           NA           NA           NA
measure_rows <- measure_rows[
  rowSums(!is.na(measure_rows[pcm_cols])) > 0,
  ,
  drop = FALSE
]

nrow(measure_rows)
## [1] 70
get_spec_value <- function(label, pcm_name) {
  if (nrow(spec_rows) == 0) return(NA_real_)
  
  # Which rows contain the label anywhere?
  row_idx <- apply(
    spec_rows,
    1,
    function(r) any(trimws(as.character(r)) == label, na.rm = TRUE)
  )
  
  if (!any(row_idx, na.rm = TRUE)) return(NA_real_)
  
  # Extract the PCM column for those rows
  raw_vals <- spec_rows[row_idx, pcm_name, drop = TRUE]
  
  # Convert to numeric
  num_vals <- suppressWarnings(as.numeric(raw_vals))
  num_vals <- num_vals[!is.na(num_vals)]
  
  if (length(num_vals) == 0) return(NA_real_)
  
  num_vals[1]
}

test_pcm <- "PCM1"

LSL_vals <- get_spec_value("LSL",    test_pcm)
USL_vals <- get_spec_value("USL",    test_pcm)
TGT_vals <- get_spec_value("Target", test_pcm)

LSL_vals
## [1] 0.006368221
USL_vals
## [1] 0.009173779
TGT_vals
## [1] 0.007849575
test_pcm <- "PCM1"

Control Chart Analysis

X-bar and R charts are generated using the qcc package. The X-bar chart checks whether the wafer means are stable over time, while the R chart evaluates stability in the variation between measurement sites within each wafer. Subgroups consist of 5 site measurements for all 14 wafers.

df_pcm <- data.frame(
  WAFER = measure_rows$WAFER.,
  SITE  = measure_rows$SITE.,
  VALUE = measure_rows[[test_pcm]]
)

df_pcm <- df_pcm[!is.na(df_pcm$WAFER) &
                   !is.na(df_pcm$SITE) &
                   !is.na(df_pcm$VALUE), ]

head(df_pcm)
##   WAFER SITE   VALUE
## 1     1    1 0.00793
## 2     1    2 0.00791
## 3     1    3 0.00776
## 4     1    4 0.00810
## 5     1    5 0.00799
## 6     2    1 0.00779
df_pcm <- df_pcm[order(df_pcm$WAFER, df_pcm$SITE), ]

wide_pcm <- df_pcm %>%
  tidyr::pivot_wider(
    id_cols    = WAFER,
    names_from = SITE,
    values_from = VALUE
  ) %>%
  arrange(WAFER)

head(wide_pcm)
## # A tibble: 6 × 6
##   WAFER     `1`     `2`     `3`     `4`     `5`
##   <int>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
## 1     1 0.00793 0.00791 0.00776 0.0081  0.00799
## 2     2 0.00779 0.00788 0.00765 0.00798 0.0078 
## 3     3 0.00797 0.00803 0.00782 0.00822 0.00804
## 4     4 0.0077  0.00773 0.00761 0.00804 0.00774
## 5     5 0.00778 0.00801 0.0077  0.00808 0.00788
## 6     6 0.00776 0.00786 0.00768 0.00814 0.00787
x_mat <- as.matrix(wide_pcm[, -1, drop = FALSE])
mode(x_mat) <- "numeric"

dim(x_mat)      
## [1] 14  5
x_mat[1:5, ]    
##            1       2       3       4       5
## [1,] 0.00793 0.00791 0.00776 0.00810 0.00799
## [2,] 0.00779 0.00788 0.00765 0.00798 0.00780
## [3,] 0.00797 0.00803 0.00782 0.00822 0.00804
## [4,] 0.00770 0.00773 0.00761 0.00804 0.00774
## [5,] 0.00778 0.00801 0.00770 0.00808 0.00788
qcc_xbar <- qcc(x_mat, type = "xbar")  # Plot X-Bar

qcc_R <- qcc(x_mat, type = "R")        # Plot R-Bar

test_pcm <- "PCM1"  

LSL_vals  
## [1] 0.006368221
USL_vals  
## [1] 0.009173779
TGT_vals  
## [1] 0.007849575

Capability Analysis

Using the extracted specification limits (LSL, Target, USL), a process capability study is performed. Capability indices Cp, Cpk, and Cpm measure how consistent and centered the PCM data is relative to the specification limits. This helps determine whether the process is capable of meeting engineering requirements.

process.capability(                           # Plot Capability Plot
  object = qcc_xbar,
  spec.limits = c(LSL_vals,USL_vals),
  target = TGT_vals
)  

## 
## Process Capability Analysis
## 
## Call:
## process.capability(object = qcc_xbar, spec.limits = c(LSL_vals,     USL_vals), target = TGT_vals)
## 
## Number of obs = 70           Target = 0.00785
##        Center = 0.007771        LSL = 0.006368
##        StdDev = 0.0002073       USL = 0.009174
## 
## Capability indices:
## 
##       Value   2.5%  97.5%
## Cp    2.256  1.880  2.631
## Cp_l  2.256  1.933  2.578
## Cp_u  2.256  1.933  2.578
## Cp_k  2.256  1.871  2.640
## Cpm   2.109  1.739  2.479
## 
## Exp<LSL 0%    Obs<LSL 0%
## Exp>USL 0%    Obs>USL 0%

Results

For PCM15, the X-bar chart shows that most wafer means fall within the control limits, but two wafers (7 and 14) fall below the lower limit, indicating possible issues that may require investigation. The R chart shows no points outside the control limits, although there are a couple of minor run-rule violations that indicate non-random variation.

The capability analysis shows very strong values for PCM15. The Cp and Cpk values are both approximately 1.95, which indicates excellent process capability. The Cpm value of about 1.81 suggests the process is also well-centered relative to the target. No observations fall outside the specification limits.

Overall, PCM15 displays strong stability and high capability, with only a few isolated control chart exceptions.