Com o pacote QCC podemos:
-Traçar gráficos de controle de qualidade Shewhart para dados contínuos, de atributos e de contagem;
-Traçar gráficos Cusum e EWMA para dados contínuos;
-Produzir gráficos de CEQ para dados multivaridados;
-Desenhar curvas características de operação;
-Realizar análises de capacidade de processo;
-Desenhar gráficos de Pareto e diagramas de causa e efeito.
options(htmltools.dir.version = FALSE)
# install.packages("qcc")
library(qcc)
## Package 'qcc' version 2.7
## Type 'citation("qcc")' for citing this R package in publications.
library(readxl)
Sobre Luca Scrucca (Desenvolvedor do pacote): https://luca-scr.github.io/
Sobre a versão 3.0 do pacote: https://luca-scr.github.io/qcc/
packageVersion("qcc")
## [1] '2.7'
data("circuit")
data("pistonrings")
Pacote circuit: “Número de não conformidades observadas em 26 amostras sucessivas de 100 placas de circuito impresso. As amostras 6 e 20 estão fora dos limites de controle. A amostra 6 foi examinada por um novo inspetor e ele não reconheceu vários tipos de não conformidades que poderiam estar presentes. Além disso, o número anormalmente grande de não conformidades na amostra 20 resultou de um problema de controle de temperatura na máquina de solda por onda, que foi posteriormente reparada. As últimas 20 amostras são amostras adicionais coletadas em unidades de inspeção (cada uma formada por 100 placas).”
Pacote pistonrings: Anéis de pistão para um motor automotivo são produzidos por um processo de forjamento. O diâmetro interno dos anéis fabricados pelo processo é medido em 25 amostras, cada uma de 5 peças, para a fase de controle I, quando amostras preliminares de um processo considerado ‘em controle’ são usadas para construir gráficos de controle. Em seguida, outras 15 amostras, novamente cada uma de 5 peças, são obtidas para a fase II.”
cat("
qcc
qcc.groups
ewma
process.capability
pareto.chart
limits.xbar
qcc.options
")
##
## qcc
## qcc.groups
## ewma
## process.capability
## pareto.chart
## limits.xbar
## qcc.options
library(qcc)
# #Estrutura do comando
# cause.and.effect(
# cause = list(),
# effect =
# )
# Criacao Macro e Micro
Efeito="Queda na quantidade de vendas"
cMarketing=c("Redes Sociais","GoogleMaps","ComunicaçãoEfetiva")
cConcorrencia=c("Novas Ideias","Aumento qtd de anuncios")
cColaboradores=c("Treinamentos","Transporte","Demora nas atividades")
cAvaliacoes=c("Comentarios Negativos","Atendimento demorado","Resolução lenta")
cAtendimento=c("Robos não efetivos","Resolução Ineficaz","Ausencia de treinamento")
cProcessos=c("Cadastro lento","Documentos e validação","Excesso de ferramentas")
Causas=c()
# fig.width = 12, fig.height = 12
cause.and.effect(
cause = list(Marketing=cMarketing,
Concorrencia=cConcorrencia,
Colaboradores=cColaboradores,
Avaliacoes=cAvaliacoes,
Atendimento=cAtendimento,
Processos=cProcessos),
effect = Efeito
)
cause.and.effect(
cause = list(
Mão_de_Obra = c(
"Operadores de Máquinas",
"Equipe de Contr. de Qualid.",
"Treinamen. de Novos Func."
),
Máquinas = c(
"Máquinas de Mistura",
"Equipamentos de Extrusão",
"Máquinas de Corte"
),
Métodos = c(
"Procedimentos de Mistura",
"Configurações de Extrusão",
"Processo de Secagem"
),
Materiais = c(
"Tipo/Quali. de Farinha",
"Aditivos Alimentares",
"Água de Processo"
),
Meio_Ambiente = c(
"Condiç. de Temp. e Umid.",
"Higiene da Fábrica",
"Controle de Pragas"
),
Manutenção = c(
"Programa de Manutenção Preventiva",
"Reparos Rápidos de Máquinas",
"Substituição de Peças"
)
),
effect = "Variação na Qualidade do Produto Final",
title = "Diagrama de Causa e Efeito - Produção de Macarrão"
)
exemplo.pareto <- c(20, 25, 25, 15, 10)
pareto.chart(exemplo.pareto,
names = c("M. obra", "Máquinas", "Mét.", "Materiais", "M. amb."),
ylab = "Porcentagem de causas",
xlab = "Causas")
##
## Pareto chart analysis for exemplo.pareto
## Frequency Cum.Freq. Percentage Cum.Percent.
## B 25.00000 25.00000 26.31579 26.31579
## C 25.00000 50.00000 26.31579 52.63158
## A 20.00000 70.00000 21.05263 73.68421
## D 15.00000 85.00000 15.78947 89.47368
## E 10.00000 95.00000 10.52632 100.00000
# Criando uma coluna com as medidas
dados <- rnorm(500, 100,25)
# Tamanho da amostra n = 5
sample_size <- 5
# quantidade de amostras
number_of_samples <- length(dados)/sample_size
# Associando medidas com amostras
sample <- rep(1:number_of_samples, each = sample_size)
# Criando um data frame com as informações
df <- data.frame(dados, sample)
# Agrupando as medidas e suas respectivas amostras
dados <-qcc.groups(dados, sample)
# Visualização inicial
head(dados)
## [,1] [,2] [,3] [,4] [,5]
## 1 110.00756 129.87265 97.28349 83.86098 71.15542
## 2 99.96911 69.30878 39.98839 69.43791 117.50025
## 3 132.68985 152.21936 92.95393 109.80140 90.61172
## 4 126.02119 95.14770 105.06342 66.71914 81.71886
## 5 117.88443 94.64737 119.42394 80.54621 132.43945
## 6 53.59686 123.02255 148.67190 72.11359 112.79700
xbar <- qcc(dados, type = "xbar")
xbar <- qcc(dados, type = "xbar",plot = F)
Caso não queira que o grafico seja plotado automaticamente, use plot = FALSE dentro do qcc
Podemos ver que a função qcc recebe um argumento type. O type pode receber as seguintes definições:
“xbar”: Gera um gráfico X¯em que as médias da amostra são plotadas para controlar o nível médio de uma variável de processo contínuo.
“xbar.one”: Gera um gráfico X¯sabendo que a amostra é de tamanho n=1.
“R”: Gera um gráfico R em que intervalos de amostra são plotados para controlar a variabilidade de uma variável de processo contínuo.
“S”: Gera um gráfico S em que os desvios padrão da amostra são plotado para controlar a variabilidade de uma variável de processo contínuo.
“p”: Gera um gráfico p em que a proporção de unidades não conformes é traçada. Limites de controle são baseados na disitribuição binomial.
“np”: Gera um gráfico np em que o número de não conformes unidades são plotadas. Limites de controle são baseados na distribuição binomial
“c”: Gera um gráfico c em que o número de defeituosos por unidade são plotados. Este gráfico assume que os defeitos do atributos de qualidade são raros, e os limites de controle são calculados com base na distribuição de Poisson.
“u”: Gera um gráfico u em que o número médio de defeituosos por unidade é plotado. A distribuição de Poisson é usada para calcular os limites de controle, mas, ao contrário do gráfico c, este gráfico não requer número constante de unidades.
warn.limits.2 = limits.xbar(xbar\(center, xbar\)std.dev, xbar$sizes, 2)
abline(h = warn.limits.2, lty = 2, col = “red”) abline(h = warn.limits.1, lty = 2, col = “yellow”)
warn.limits.2 = limits.xbar(xbar$center, xbar$std.dev, xbar$sizes, 2)
warn.limits.1 = limits.xbar(xbar$center, xbar$std.dev, xbar$sizes, 1)
xbar <- qcc(dados, type = "xbar",plot = F)
plot(xbar,restore.par = FALSE)
abline(h = warn.limits.2, lty = 2, col = "red")
abline(h = warn.limits.1, lty = 2, col = "yellow")
Se esta adicionando algo dentro do plot use restore.par = FALSE, exemplo as linhas
# Primeiramente salve a configuracao atual
old <- qcc.options()
qcc.options(old)
plot(xbar)
# Destacar pontos além dos limites de controle.
# beyond.limits = list(pch = "#FF5CAD")
# Destacar fundo do grafico
# bg.figure="#FF5CAD"
# Destacar margem do grafico
# bg.margin= "#D8BFD8"
qcc.options(bg.margin = "#D8BFD8",bg.figure="#FF5CAD")
xbar <- qcc(dados, type = "xbar",plot = F)
plot(xbar)
# save defaults
qcc.options(old)
qcc.options("cex.stats") # get a single parameter
## [1] 0.9
qcc.options("cex.stats"=1.2) # change parameters
qcc.options(bg.margin="azure2")
qcc.options("violating.runs" = list(pch = 15, col = "purple"))
qcc.options("beyond.limits" = list(pch = 15, col = "orangered"))
qcc(rnorm(100), type = "xbar.one", std.dev = 0.7) # see the results
## List of 11
## $ call : language qcc(data = rnorm(100), type = "xbar.one", std.dev = 0.7)
## $ type : chr "xbar.one"
## $ data.name : chr "rnorm(100)"
## $ data : num [1:100, 1] 1.3056 2.0939 0.9865 0.0915 0.0435 ...
## ..- attr(*, "dimnames")=List of 2
## $ statistics: Named num [1:100] 1.3056 2.0939 0.9865 0.0915 0.0435 ...
## ..- 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 0.0229
## $ std.dev : num 0.7
## $ nsigmas : num 3
## $ limits : num [1, 1:2] -2.08 2.12
## ..- attr(*, "dimnames")=List of 2
## $ violations:List of 2
## - attr(*, "class")= chr "qcc"
# restore old defaults
plot(xbar)
summary(xbar)
##
## Call:
## qcc(data = dados, type = "xbar", plot = F)
##
## xbar chart for dados
##
## Summary of group statistics:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 75.55225 93.76202 100.69979 101.52335 110.56504 129.35551
##
## Group sample size: 5
## Number of groups: 100
## Center of group statistics: 101.5233
## Standard deviation: 24.11046
##
## Control limits:
## LCL UCL
## 69.17578 133.8709
O tipo de gráfico de controle depende do tipo de dados e sua distribuição. Há uma árvore de decisão para a seleção do gráfico.
DiagrammeR::mermaid(
"graph TB
A(Select Control Chart)-->B{data type}
B --> |Discrete| C{Distribution}
B --> |Continuous| D{Sample Size}
C --> |Poisson| E{Sample Size}
C --> |Binominal| F{Frequency}
E --> |constant| G[c-chart]
E --> |variable| H[u-chart]
F --> |count| I[np-chart]
F --> |proportion| J[p-chart]
D --> |n = 1| K[x.one + R chart]
D --> |n = 2-10| L[x + R chart]
D --> |n > 10| M[x + S chart]
"
)
data(pistonrings) # Carregando dados
## Estatística descritiva dos dados
summary(pistonrings)
## diameter sample trial
## Min. :73.97 Min. : 1.00 Mode :logical
## 1st Qu.:74.00 1st Qu.:10.75 FALSE:75
## Median :74.00 Median :20.50 TRUE :125
## Mean :74.00 Mean :20.50
## 3rd Qu.:74.01 3rd Qu.:30.25
## Max. :74.04 Max. :40.00
dados_organizados <- qcc.groups(pistonrings$diameter, pistonrings$sample)
xbar_qcc <- qcc(dados_organizados[1:25,], newdata=dados_organizados[26:40,], type = "xbar")
r_qcc <- qcc(dados_organizados[1:25,], newdata=dados_organizados[26:40,], type = "R")
plot(r_qcc)
s_qcc <- qcc(dados_organizados[1:25,], newdata=dados_organizados[26:40,], type = "S")
plot(s_qcc)
Eles são úteis para detectar pequenas variações na média do processo.
set.seed(2024)
# cusum(dados,intervalo,decision desvio)
data(pistonrings)
pistao=pistonrings
attach(pistao)
## The following object is masked _by_ .GlobalEnv:
##
## sample
head(pistao)
## diameter sample trial
## 1 74.030 1 TRUE
## 2 74.002 1 TRUE
## 3 74.019 1 TRUE
## 4 73.992 1 TRUE
## 5 74.008 1 TRUE
## 6 73.995 2 TRUE
dim(diameter)
## NULL
diameter <- qcc.groups(pistao$diameter, pistao$sample)
dim(diameter)
## [1] 40 5
head(diameter)
## [,1] [,2] [,3] [,4] [,5]
## 1 74.030 74.002 74.019 73.992 74.008
## 2 73.995 73.992 74.001 74.011 74.004
## 3 73.988 74.024 74.021 74.005 74.002
## 4 74.002 73.996 73.993 74.015 74.009
## 5 73.992 74.007 74.015 73.989 74.014
## 6 74.009 73.994 73.997 73.985 73.993
q1 <- cusum(diameter[1:25,], decision.interval = 10, se.shift = 1)
q5 <- cusum(diameter[1:25,], decision.interval = 1, se.shift = 1)
ewma(dados_organizados[1:25,], newdata=dados_organizados[26:40,], lambda=0.2, nsigmas=3)
## List of 19
## $ call : language ewma(data = dados_organizados[1:25, ], lambda = 0.2, nsigmas = 3, newdata = dados_organizados[26:40, ])
## $ type : chr "ewma"
## $ data.name : chr "dados_organizados[1:25, ]"
## $ data : num [1:25, 1:5] 74 74 74 74 74 ...
## ..- attr(*, "dimnames")=List of 2
## $ statistics : Named num [1:25] 74 74 74 74 74 ...
## ..- attr(*, "names")= chr [1:25] "1" "2" "3" "4" ...
## $ sizes : Named int [1:25] 5 5 5 5 5 5 5 5 5 5 ...
## ..- attr(*, "names")= chr [1:25] "1" "2" "3" "4" ...
## $ center : num 74
## $ std.dev : num 0.00979
## $ newstats : Named num [1:15] 74 74 74 74 74 ...
## ..- attr(*, "names")= chr [1:15] "26" "27" "28" "29" ...
## $ newdata : num [1:15, 1:5] 74 74 74 74 74 ...
## ..- attr(*, "dimnames")=List of 2
## $ newsizes : Named int [1:15] 5 5 5 5 5 5 5 5 5 5 ...
## ..- attr(*, "names")= chr [1:15] "26" "27" "28" "29" ...
## $ newdata.name: chr "dados_organizados[26:40, ]"
## $ x : int [1:40] 1 2 3 4 5 6 7 8 9 10 ...
## $ y : Named num [1:40] 74 74 74 74 74 ...
## ..- attr(*, "names")= chr [1:40] "1" "2" "3" "4" ...
## $ sigma : Named num [1:40] 0.000875 0.001121 0.001253 0.001331 0.001378 ...
## ..- attr(*, "names")= chr [1:40] "1" "2" "3" "4" ...
## $ lambda : num 0.2
## $ nsigmas : num 3
## $ limits : num [1:40, 1:2] 74 74 74 74 74 ...
## ..- attr(*, "dimnames")=List of 2
## $ violations : Named int [1:4] 37 38 39 40
## ..- attr(*, "names")= chr [1:4] "37" "38" "39" "40"
## - attr(*, "class")= chr "ewma.qcc"
oc.curves.xbar(xbar_qcc)
data(pistonrings)
dados_organizados <- qcc.groups(pistonrings$diameter, pistonrings$sample)
xbar_qcc <- qcc(dados_organizados[1:25,], type = "xbar")
process.capability(xbar_qcc, spec.limits=c(73.95,74.05))
##
## Process Capability Analysis
##
## Call:
## process.capability(object = xbar_qcc, spec.limits = c(73.95, 74.05))
##
## Number of obs = 125 Target = 74
## Center = 74 LSL = 73.95
## StdDev = 0.009785 USL = 74.05
##
## Capability indices:
##
## Value 2.5% 97.5%
## Cp 1.703 1.491 1.915
## Cp_l 1.743 1.555 1.932
## Cp_u 1.663 1.483 1.844
## Cp_k 1.663 1.448 1.878
## Cpm 1.691 1.480 1.902
##
## Exp<LSL 0% Obs<LSL 0%
## Exp>USL 0% Obs>USL 0%
https://cran.r-project.org/web/packages/qcc/qcc.pdf
multivariate ellipseChart,9 mqcc, 14 stats.T2, 43 stats.T2.single, 44
# Ryan (2000, Table 9.2) data with p = 2 variables, m = 20 samples, n = 4 sample size:
X1 <- matrix(c(72, 56, 55, 44, 97, 83, 47, 88, 57, 26, 46,
49, 71, 71, 67, 55, 49, 72, 61, 35, 84, 87, 73, 80, 26, 89, 66,
50, 47, 39, 27, 62, 63, 58, 69, 63, 51, 80, 74, 38, 79, 33, 22,
54, 48, 91, 53, 84, 41, 52, 63, 78, 82, 69, 70, 72, 55, 61, 62,
41, 49, 42, 60, 74, 58, 62, 58, 69, 46, 48, 34, 87, 55, 70, 94,
49, 76, 59, 57, 46), ncol = 4)
X2 <- matrix(c(23, 14, 13, 9, 36, 30, 12, 31, 14, 7, 10,
11, 22, 21, 18, 15, 13, 22, 19, 10, 30, 31, 22, 28, 10, 35, 18,
11, 10, 11, 8, 20, 16, 19, 19, 16, 14, 28, 20, 11, 28, 8, 6,
15, 14, 36, 14, 30, 8, 35, 19, 27, 31, 17, 18, 20, 16, 18, 16,
13, 10, 9, 16, 25, 15, 18, 16, 19, 10, 30, 9, 31, 15, 20, 35,
12, 26, 17, 14, 16), ncol = 4)
X <- list(X1 = X1, X2 = X2)
q <- mqcc(X, type = "T2")
plot(q)
summary(q)
##
## Call:
## mqcc(data = X, type = "T2")
##
## T2 chart for X
##
## Summary of group statistics:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.12429 1.32496 2.50272 6.47013 5.34912 63.76042
##
## Number of variables: 2
## Number of groups: 20
## Group sample size: 4
##
## Center:
## X1 X2
## 60.3750 18.4875
##
## Covariance matrix:
## X1 X2
## X1 222.0333 103.11667
## X2 103.1167 56.57917
## |S|: 1929.414
##
## Control limits:
## LCL UCL
## 0 11.03976
ellipseChart(q)
ellipseChart(q, show.id = TRUE)
Sobre Luca Scrucca (Desenvolvedor do pacote): https://luca-scr.github.io/
Sobre a versão 3.0 do pacote: https://luca-scr.github.io/qcc/
Quality Control with R: https://www.qualitycontrolwithr.com/
Qcc_Documentation: https://cran.r-project.org/web/packages/qcc/qcc.pdf
R-Project: http://www.r-project.org
RStudio: http://www.rstudio.com
Easy R practice: http://tryr.codeschool.com/
List of colours with names: http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf
Recipes : http://www.cookbook-r.com/
Search documentation: http://www.rdocumentation.org/
Google R styleguide: http://google-styleguide.googlecode.com/svn/trunk/Rguide.xml
Book Six Sigma with R : www.sixsigmawithr.com
RMarkdown Book: https://bookdown.org/yihui/rmarkdown/
Rpubs: https://rpubs.com/WilliamIrineu
Shiny: https://william-irineu-alves-de-lima.shinyapps.io/Shiny_Xarb/