設備參數設定與發生不良類型分析 (二)

情境: 另解 回上頁

    • 某製程需要有兩種機台 (甲與乙) 共同操作。

    • 生產時,甲機台有兩項參數可調整 (FactorX1, FactorY1)。

    • 生產時,乙機台有兩項參數可調整 (FactorX2, FactorY2)。

    • 機台參數調整後,導至製成品發生三種變異 (A, B, C)。

問題

    • 是否可以在產生時,藉由機台參數之設定,便可預判製成品變異種類?

輸出

A B C 訓練.1 1 0.0 0.0 訓練.2 1 0.0 0.0 訓練.3 1 0.0 0.0 訓練.7 1 0.0 0.0 訓練.8 1 0.0 0.0 訓練.9 1 0.0 0.0 訓練.10 1 0.0 0.0 訓練.11 1 0.0 0.0 訓練.13 1 0.0 0.0 訓練.14 1 0.0 0.0 訓練.15 1 0.0 0.0 訓練.16 1 0.0 0.0 訓練.18 1 0.0 0.0 訓練.20 1 0.0 0.0 訓練.22 1 0.0 0.0 訓練.23 1 0.0 0.0 訓練.24 1 0.0 0.0 訓練.26 1 0.0 0.0 訓練.27 1 0.0 0.0 訓練.29 1 0.0 0.0 訓練.30 1 0.0 0.0 訓練.32 1 0.0 0.0 訓練.33 1 0.0 0.0 訓練.36 1 0.0 0.0 訓練.37 1 0.0 0.0 訓練.38 1 0.0 0.0 訓練.39 1 0.0 0.0 訓練.40 1 0.0 0.0 訓練.41 1 0.0 0.0 訓練.42 1 0.0 0.0 訓練.43 1 0.0 0.0 訓練.44 1 0.0 0.0 訓練.45 1 0.0 0.0 訓練.47 1 0.0 0.0 訓練.48 1 0.0 0.0 訓練.49 1 0.0 0.0 訓練.50 1 0.0 0.0 訓練.51 0 1.0 0.0 訓練.52 0 1.0 0.0 訓練.53 0 1.0 0.0 訓練.54 0 1.0 0.0 訓練.55 0 1.0 0.0 訓練.56 0 1.0 0.0 訓練.57 0 1.0 0.0 訓練.58 0 1.0 0.0 訓練.59 0 1.0 0.0 訓練.60 0 1.0 0.0 訓練.61 0 1.0 0.0 訓練.62 0 1.0 0.0 訓練.64 0 1.0 0.0 訓練.65 0 1.0 0.0 訓練.67 0 1.0 0.0 訓練.68 0 1.0 0.0 訓練.72 0 1.0 0.0 訓練.73 0 1.0 0.0 訓練.74 0 1.0 0.0 訓練.75 0 1.0 0.0 訓練.76 0 1.0 0.0 訓練.77 0 1.0 0.0 訓練.80 0 1.0 0.0 訓練.82 0 1.0 0.0 訓練.83 0 1.0 0.0 訓練.84 0 0.2 0.8 訓練.85 0 1.0 0.0 訓練.87 0 1.0 0.0 訓練.88 0 1.0 0.0 訓練.91 0 1.0 0.0 訓練.93 0 1.0 0.0 訓練.95 0 1.0 0.0 訓練.96 0 1.0 0.0 訓練.97 0 1.0 0.0 訓練.98 0 1.0 0.0 訓練.100 0 1.0 0.0 訓練.101 0 0.0 1.0 訓練.104 0 0.0 1.0 訓練.105 0 0.0 1.0 訓練.106 0 0.0 1.0 訓練.107 0 0.0 1.0 訓練.108 0 0.0 1.0 訓練.109 0 0.0 1.0 訓練.110 0 0.0 1.0 訓練.111 0 0.0 1.0 訓練.115 0 0.0 1.0 訓練.116 0 0.0 1.0 訓練.117 0 0.0 1.0 訓練.118 0 0.0 1.0 訓練.119 0 0.0 1.0 訓練.120 0 0.2 0.8 訓練.121 0 0.0 1.0 訓練.122 0 0.0 1.0 訓練.123 0 0.0 1.0 訓練.124 0 0.0 1.0 訓練.125 0 0.0 1.0 訓練.127 0 0.0 1.0 訓練.129 0 0.0 1.0 訓練.130 0 0.2 0.8 訓練.132 0 0.0 1.0 訓練.133 0 0.0 1.0 訓練.134 0 0.2 0.8 訓練.135 0 0.2 0.8 訓練.136 0 0.0 1.0 訓練.138 0 0.0 1.0 訓練.139 0 0.0 1.0 訓練.141 0 0.0 1.0 訓練.142 0 0.0 1.0 訓練.144 0 0.0 1.0 訓練.145 0 0.0 1.0 訓練.146 0 0.0 1.0 訓練.148 0 0.0 1.0 訓練.149 0 0.0 1.0 訓練.150 0 0.0 1.0

A B C 測試.4 1 0.0 0.0 測試.5 1 0.0 0.0 測試.6 1 0.0 0.0 測試.12 1 0.0 0.0 測試.17 1 0.0 0.0 測試.19 1 0.0 0.0 測試.21 1 0.0 0.0 測試.25 1 0.0 0.0 測試.28 1 0.0 0.0 測試.31 1 0.0 0.0 測試.34 1 0.0 0.0 測試.35 1 0.0 0.0 測試.46 1 0.0 0.0 測試.63 0 1.0 0.0 測試.66 0 1.0 0.0 測試.69 0 1.0 0.0 測試.70 0 1.0 0.0 測試.71 0 0.0 1.0 測試.78 0 0.0 1.0 測試.79 0 1.0 0.0 測試.81 0 1.0 0.0 測試.86 0 1.0 0.0 測試.89 0 1.0 0.0 測試.90 0 1.0 0.0 測試.92 0 1.0 0.0 測試.94 0 1.0 0.0 測試.99 0 1.0 0.0 測試.102 0 0.0 1.0 測試.103 0 0.0 1.0 測試.112 0 0.0 1.0 測試.113 0 0.0 1.0 測試.114 0 0.0 1.0 測試.126 0 0.0 1.0 測試.128 0 0.0 1.0 測試.131 0 0.0 1.0 測試.137 0 0.0 1.0 測試.140 0 0.0 1.0 測試.143 0 0.0 1.0 測試.147 0 0.0 1.0

程式碼

library(rpart) rm(list=ls()) sink("RE-6.log") RE.TRAIN <- NULL RE.TEST <- NULL RE.Summary <- NULL RE.NumFields <- NULL LoadData <- function(csvFile='RE.csv') { RE.Data <- read.csv(csvFile) } SummaryData <- function(RE=RE.Data) { options(digits=1) fieldNames <- colnames(RE) i = 0 for (fieldName in fieldNames) { i = i + 1 if (class(RE[, fieldName]) == 'numeric') { assign('RE.NumFields', c(RE.NumFields, i), envir = .GlobalEnv) Summary.Field <- c(summary(RE[, fieldName]), sd(RE[, fieldName])) if (is.null(RE.Summary)) { assign('RE.Summary', Summary.Field, envir = .GlobalEnv) } else { assign('RE.Summary', rbind(RE.Summary, Summary.Field), envir = .GlobalEnv) } } } i = 1 for (fieldName in fieldNames) { if (class(RE[, fieldName]) == 'numeric') { rownames(RE.Summary)[i] <- fieldName i = i + 1 } } colnames(RE.Summary)[7] <- 'StdDev.' RE.Summary } CoVarianceData <- function(RE=RE.Data) { options(digits=2) if (is.null(RE.NumFields)) { fieldNames <- colnames(RE) i = 0 for (fieldName in fieldNames) { i = i + 1 if (class(RE[, fieldName]) == 'numeric') { assign('RE.NumFields', c(RE.NumFields, i), envir = .GlobalEnv) } } } cov(RE[, RE.NumFields]) } CoRelationData <- function(RE=RE.Data) { options(digits=2) if (is.null(RE.NumFields)) { fieldNames <- colnames(RE) i = 0 for (fieldName in fieldNames) { i = i + 1 if (class(RE[, fieldName]) == 'numeric') { assign('RE.NumFields', c(RE.NumFields, i), envir = .GlobalEnv) } } } cor(RE[, RE.NumFields]) } SampleData <- function(TrainPortion=0.8, RE=RE.Data) { sampleSeed <- floor(unclass(Sys.time())) set.seed(sampleSeed) TempData <- sample(2, nrow(RE), replace=TRUE, prob=c(TrainPortion, 1 - TrainPortion)) assign('RE.TRAIN', RE[TempData==1, ], envir = .GlobalEnv) assign('RE.TEST', RE[TempData==2, ], envir = .GlobalEnv) } DicisionTree <- function(linearModel, factorField='Failure') { RE.Model <- linearModel RE.TREE <- rpart(RE.Model, data=RE.TRAIN, control=rpart.control(minsplit = 10), method='class') RE.OPT <- which.min(RE.TREE$cptable[, 'xerror']) RE.CP <- RE.TREE$cptable[RE.OPT, 'CP'] RE.PRUNE <- prune(RE.TREE, cp=RE.CP) S <- predict(RE.PRUNE, newdata=RE.TRAIN) rownames(S) <- paste('\u8a13\u7df4', rownames(S), sep='.') T <- predict(RE.PRUNE, newdata=RE.TEST) rownames(T) <- paste('\u6e2c\u8a66', rownames(T), sep='.') RE.DECISION <- rbind(S, T) print (RE.DECISION) chartName <- paste('DT2', 'RE', sep='-') fileName <- paste(chartName, 'png', sep='.') png(fileName, width=2048, height=2048) plot(RE.PRUNE) dev.off() } PlotCharts <- function(RE=RE.Data) { fieldNames <- colnames(RE) if (is.null(RE.NumFields)) { i = 0 for (fieldName in fieldNames) { i = i + 1 if (class(RE[, fieldName]) == 'numeric') { assign('RE.NumFields', c(RE.NumFields, i), envir = .GlobalEnv) } } } for (fieldID in RE.NumFields) { fieldName <- fieldNames[fieldID] chartName <- paste('HIST', 'RE', fieldName, sep='-') fileName <- paste(chartName, 'png', sep='.') png(fileName, width=1024, height=768) par(mfrow=c(1, 2)) hist(RE[, fieldName], xlab=fieldName, main='\u76f4\u65b9\u5716') plot(density(RE[, fieldName]), main='\u5bc6\u5ea6\u5716') dev.off() } chartName <- paste('COR', 'RE', sep='-') fileName <- paste(chartName, 'png', sep='.') png(fileName, width=4096, height=4096) pairs(RE) dev.off() } PlotScatterChart <- function(xFieldName, yFieldName, factorField='Failure', RE=RE.Data) { Plot.Legend <- as.numeric(RE.Data[, factorField]) Plot.NumLegend <- max(Plot.Legend) Plot.Colors <- rainbow(Plot.NumLegend) Plot.Char <- seq(1, Plot.NumLegend+1, 1) chartName <- paste('XY', 'RE', xFieldName, yFieldName, sep='-') fileName <- paste(chartName, 'png', sep='.') png(fileName, width=1024, height=960) plot(RE.Data[, xFieldName], RE.Data[, yFieldName], col=Plot.Colors, pch=Plot.Legend, cex=1, main='\u6563\u5e03\u5716', xlab=xFieldName, ylab=yFieldName) legend("topright", col=Plot.Colors, pch=Plot.Char, cex=1, legend=unique(RE.Data[, factorField])) dev.off() } ## Main jobTask = c(FALSE, TRUE, FALSE) RE.Data <- LoadData() if (jobTask[1]) { SummaryData(RE.Data) CoRelationData(RE.Data) CoVarianceData(RE.Data) } if (jobTask[2]) { SampleData(0.7) DicisionTree(Failure ~ FactorX1 + FactorY1 + FactorX2 + FactorY2) } if (jobTask[3]) { PlotCharts() PlotScatterChart('FactorX1', 'FactorY1') PlotScatterChart('FactorX2', 'FactorY2') } sink()