2015-01-09

SPCチャートの作成

SPC, Statistical Process Control (統計的工程管理)とは、製造工程などにおいて安定した品質の製品を作り込むために、品質を左右する重要な 測定値などのパラメータを管理図を用いて管理する活動です。管理図について、教科書的な説明は省略させていただきます。ご興味のある方は、参考サイト [1][2][3] をご覧になってください。

ということで、今回は、SPC で利用する管理図を R で作成してみます。一言で管理図といってもいろいろな種類がありますが、Xbar-R 管理図を作成するサンプルを紹介します。Xbar は平均(MEAN)、R は範囲(RANGE) を意味します。具体的には、製造工程のロットについて、ある測定を何点か実施し、その平均値と範囲(最大値と最小値の差)をロットの処理順にプロットするチャートになります。

ここでは、平均と範囲のトレンドを、R の plot を利用してひとつのプロットにまとめてみました。x 軸には、処理順にロット番号(LOT ID)、y 軸については、平均と範囲についてそれぞれ左右の二軸を使います。plot には二軸に対応した二つのデータ群を自動的に書き分けるような機能はありませんので、プロットを重ね合わせることによって二軸のプロットを実現しています。

なお、それぞれの軸の目盛の付け方には改善の余地があります。汎用的な目盛処理を加えようとすると結構手間が掛かるように感じたので、最大値と最小値のみを目盛に表示するに留めました。

今回も、ファイル選択ダイアログを加えました。例に使用したデータは、sample_spc.csv.zip からダウンロードできるようにしてあります。ご興味があれば、展開してご利用下さい。

require("tcltk")

###############################################################################
# spc.XbarR
###############################################################################
spc.XbarR <- function(tbl, x.col = "LOTID", y.col, y2.col) {
  gTitle <- "Xbar-R chart sample"
  
  # spce to adjust vertical position of y axis label
  pad.label <- "                                       "
  
  # adjust right margin for y2 axis label
  par(oma = c(0, 0, 0, 2))

  # MEAN ######################################################################
  y_max <- max(tbl[, y.col])
  y_min <- min(tbl[, y.col])
  y_min0 <- 2 * y_min - y_max

  plot(c(1, nrow(tbl)), c(y_min0, y_max),
       type = "n", xaxt = "n",  yaxt = "n",
       xlab = "LOT ID", ylab = "",
       main = gTitle, cex.main = 1)
  
  y.label <- paste(pad.label, "MEAN")
  mtext(y.label, side = 2, line = 2)
  axis(2, c(y_min, y_max), c(y_min, y_max))
  points(1:nrow(tbl), tbl[, y.col], type='o', pch = 15, cex = 1, lty = 1, col = "blue")
  
  # enable plot overlay
  par(new = TRUE)
  
  # RANGE #####################################################################
  y2_max <- max(tbl[, y2.col])
  y2_min <- 0
  y2_max0 <- 2 * y2_max

  plot(c(1, nrow(tbl)), c(y2_min, y2_max0),
       type = "n", xaxt = "n", yaxt = "n", axes = FALSE,
       xlab = "", ylab = "",
       main = "", cex.main = 1)
  
  y2.label <- paste("RANGE", pad.label)
  mtext(y2.label, side = 4, line = 2)
  axis(4, c(y2_min, y2_max), c(y2_min, y2_max))
  points(1:nrow(tbl), tbl[, y2.col], type='o', pch = 1, cex = 1, lty = 2, col = "red")

  # X-AXIS ####################################################################
  axis(1, 1:nrow(tbl), tbl[, x.col], las = 2, cex.axis = 0.75)
  
}

###############################################################################
# open.png
###############################################################################
open.png <- function(img.name, pic.width = 640, pic.height = 400) {
  png(filename = img.name, width = pic.width, height = pic.height,
      units = "px", pointsize = 14, bg = "white", res = NA)
}

###############################################################################
# MAIN
###############################################################################

# READ CSV DATA
file.name <-tclvalue(tkgetOpenFile(filetypes="{{CSV} {.csv}}", title = "Open CSV file"))
tbl.data <- read.csv(file.name, header = T, as.is = T)

# first column is always LOTID
# rest of columns are measurement data
n.col <- ncol(tbl.data)
list.meas <- c(2:n.col)

# calculation for mean and range
for (r in 1:nrow(tbl.data)) {
  tbl.data[r, "Xbar"] <- mean(as.numeric(tbl.data[r, list.meas]))
  tbl.data[r, "R"] <- max(as.numeric(tbl.data[r, list.meas])) - min(as.numeric(tbl.data[r, list.meas]))
}

# generate Xbar-R chart
spc.XbarR(tbl.data, "LOTID", "Xbar", "R")

# generate PNG FILE
open.png("sample_spc.png", 1000, 400)
spc.XbarR(tbl.data, "LOTID", "Xbar", "R")
dev.off()

# ---
# END PROGRAM

Fedora での実行例です。

$ R

R version 3.1.2 (2014-10-31) -- "Pumpkin Helmet"
...
(省略)
...
 'q()' と入力すれば R を終了します。 

> source("spc.R")
 要求されたパッケージ tcltk をロード中です 
> 

スクリプトを実行するとファイル選択ダイアログが表示されます。

画面に表示される Xbar-R チャートです。管理図というと、規格値 (LSL, USL)、管理限界値 (LCL, UCL)、さらに工程能力指数 (Cp, Cpk) を書き加えておくと実用的なのですが、作り込みに時間がかかるので、今回は簡単なサンプルということで省略しています。

カレントディレクトリに PNG 形式で保存された Xbar-R チャートです。今回は、横軸の LOT ID が識別できるように横幅を長くして出力しています。

参考サイト

  1. 実践! IE:現場視点の品質管理(14):品質管理に必須の統計的手法「X-R管理図」「P管理図」の作り方 (1/3) - MONOist(モノイスト)
  2. IBM Knowledge Center - 統計的工程管理
  3. JIS Z 9021:1998 シューハート管理図

 

0 件のコメント: