#library(qicharts2)
setwd("~/Dropbox/DOCUMENTOS_ASUN/SIXSIGMA/CURSO 23-24")
library(ggplot2)
library(dplyr)
##
## 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(ggQC)
library(gridExtra)
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
theme_set(theme_minimal())
#load("~/Dropbox/DOCUMENTOS_ASUN/SIXSIGMA/CURSOS PREVIOS/CURSO 19-20/datos_cep.RData")
#write.csv(datos_cep)
Se te van a plantear tres retos:
Utiliza la documentación y ayudas proporcionadas en RECURSOS, e intenta llegar el/la primero/a.
La actividad consiste en leer la información proporcionada, los retos planteados, ejecutar la sintaxis y resolver, con los resultados obtenidos.
Recursos de apoyo y material complementario-plantillas de la unidad CONTROLAR: diapos etapa CONTROLAR, diapos CEP y apuntes.
Para resolver la actividad a continuación con R utiliza, como soporte para los gráficos de control en R, la librería ggQC y consulta los ejemplos y viñetas que proporciona en rcontrolcharts.com.
Otras librerías interesantes para trabajar el control de calidad en R son cep, qcc y qicharts2, que ofrecen diversas funcionalidades. Consulta A quick tour of qcc, by Luca Scrucca. También dispones de Control charts with qicharts for R, by Jacob Anhoej.
Usa las librerías habituales ggplot2, dplyr y gridExtra para cálculos y gráficos. Consulta los tutoriales de ggplot2 en STHDA.COM.
Te pueden resultar útiles la interpretaciones en Implementation and Interpretation of Control Charts in R, by Kamal Kumar.
Carga los datos ejecutando el siguiente chunk:
github_url="https://github.com/asunmayoral/datalabs/raw/master/datos_cep.RData"
load(url(github_url))
Todo empezó en una reunión en la octava planta, en la que estaban el presidente, la vicepresidenta y …. alguien más, recién entrado en la empresa. Un nuevo fichaje de la vicepresidenta, estadística como tú, pretende ascender rápidamente en tu empresa. En ese camino tú eres un obstáculo importante, al ser el/la responsable del departamento de Estadística. Tu jefe, presionado por la vicepresidenta, ha decidido plantearos una serie de retos, aprovechando que estáis inmersos en la finalización de un proyecto de mejora. Habrás de demostrar tu valía para mantener tu puesto como jefe de proyectos en el área de estadística, y superar con éxito todos los retos.
Estás en la última fase de un proyecto de mejora relativo a la calidad de ciertos tornillos que se fabrican en la empresa. En particular, una de las variables objetivo es la longitud del tornillo. El objetivo de calidad es fabricar tornillos de 5mm de longitud, con un rango de tolerancia de +/-0.05mm.
Después de leer los apuntes, responde este formulario sobre conceptos teóricos. Puedes responderlo tantas veces como quieras, hasta lograr la mejor puntuación.
Se habla de variación por causas comunes al ruido o variación aleatoria que está presente en todos los procesos, es causada por fenómenos que siempre están presentes en el sistema y hacen que el proceso sea predecible dentro de los límites.
3.1 Tras la implantación del proyecto de mejora que has desarrollado junto con tu equipo, se tomó una primera muestra con 50 mediciones de tornillos. Descubre, mediante gráficos de control, si dicha muestra estaba bajo control (observaciones individuales) y/o tenía valores consecutivos inconsistentes (rangos).
Ayuda: Consulta rcontrolcharts.com.
Para contestar esta pregunta, graficamos bd1, con el fin de identificar variaciones en la longitud de los tornillos (gráfico con observaciones individuales XmR) e inconsistencias entre tornillos consecutivos (gráfico de rangos mR). Fíjate en el centro y límites para extraer conclusiones.
INDV=ggplot(bd1,aes(x=fecha,y=tornillos))
XmR <- INDV + geom_point() + geom_line() +
stat_QC(method = "XmR", auto.label = T, label.digits = 2)
mR <- INDV + ylab("mR") +
stat_QC(method = "mR", auto.label = T, label.digits = 2)
grid.arrange(XmR, mR, ncol=1)
3.2. Queremos confirmar a continuación, con los datos en bd1, la capacidad del proceso para cumplir las especificaciones de calidad. Grafica y calcula los índices de capacidad y concluye sobre la capacidad del sistema.
Ayuda: Consulta rcontrolcharts.com.
target=5
lsl=target-0.05
usl=target+0.05
g1=ggplot(bd1,aes(x=tornillos))+
geom_histogram(fill="blue",bins = 10)+
geom_vline(xintercept=target)+
stat_QC_Capability(LSL=lsl,USL=usl,method="XmR",show.cap.summary="")
g2=ggplot(bd1,aes(x=tornillos))+
geom_density()+
geom_vline(xintercept=target)+
stat_QC_Capability(LSL=lsl,USL=usl,show.cap.summary="all",
cap.summary.size = 2.5, method="XmR")
grid.arrange(g1,g2,ncol=1)
Las causas especiales de variación, o variación no aleatoria, se presenta en algunos procesos causados por fenómenos que no son habituales en el sistema y provocan incertidumbre en la predicción.
Las reglas más comunes para la identificación de variaciones especiales son:
la regla de las 3sigmas de Shewart, que identifica todos los puntos a 3 desviaciones típicas de la media o valor central;
las reglas de Western Electric:
3.3 Se ha recogido una segunda muestra de longitudes de tornillo (disponible en bd2) y se desea averiguar si hay variaciones fuera de lo normal o inconsistencias en la secuencia de mediciones de la longitud de los tornillos. Si hay variación especial, identifica de qué tipo es conforme a las reglas de Western Electric.
Ayuda Consulta rcontrolcharts.com.
# Graficamos en busca de irregularidades
XmR.violations1 <-
ggplot(bd2,
aes(x=fecha,y=tornillos, group = 1)) +
stat_qc_violations(method = "XmR",
violation_point.color="red",
point.size=0.5,
line.color="grey",show.facets=c(1:2)) +
theme(axis.text.x = element_text(angle = 45, vjust=0.2,size=6))
XmR.violations2 <-
ggplot(bd2,
aes(x=fecha,y=tornillos, group = 1)) +
stat_qc_violations(method = "XmR",
point.size=0.5,
violation_point.color="red",
line.color="grey",show.facets=c(3:4)) +
theme(axis.text.x = element_text(angle = 45, vjust=0.5,size=6))
grid.arrange(XmR.violations1,XmR.violations2,ncol=1)
### Límites de control globales y específicos
Hemos de tener en cuenta que, si no especificamos nada, los límites de control se calculan con todos los datos disponibles. Es posible que tengamos lotes diferentes fabricados bajo condiciones distintas), por lo que será conveniente graficarlos de forma diferenciada, y utilizar límites de control específicos para cada lote.
3.3 Tu contrincante, muy sutilmente le propuso a la vicepresidenta probar tres aleaciones diferentes en el proceso de fabricación sin comentarte nada. Te pasan a continuación los muestreos bajo estos tres procesos de producción (en bd3), para ver si identificas TU PROPUESTA. Estudia si hay variaciones sistemáticas en cada uno de estos tres procesos y si se mantienen o no bajo control.
En la base de datos bd3 tienes los resultados de tres procesos diferentes de producción con 3 aleaciones ligeramente distintas. Se miden muestras de tornillos en cada uno de los tres procesos (datos individualizados: una muestra=un tornillo), y se identifican con la aleación. Vamos a graficar de forma conjunta primero, y diferenciada después, los tres procesos, para saber qué está ocurriendo.
Ayuda. Consulta rcontrolcharts.com.
g1=ggplot(bd3,aes(x=proceso,y=tornillos))+
geom_boxplot()
# Con todos los datos sin distinción
INDV <- ggplot(bd3, aes(x=fecha, y = tornillos))
g2 <- INDV + geom_point() + geom_line() +
ylab("XmR") +xlab("")+
stat_QC(method = "XmR", auto.label = T, label.digits = 2)
grid.arrange(g1,g2,nrow=2)
Reflexiona qué está pasando con la variabilidad y con las medias para
cada una de las aleaciones.
INDV <- ggplot(bd3, aes(x=fecha, y = tornillos))
XmR <- INDV + geom_point() + geom_line() +
ylab("XmR") +xlab("")+
stat_QC(method = "XmR", auto.label = T, label.digits = 2) +
facet_grid(.~proceso) +
theme(axis.text.x = element_text(angle = 45, vjust=0.05,size=7))
mR <- INDV +
stat_QC(method = "mR", auto.label = T, label.digits = 2) +
ylab("mR") +xlab("")+
facet_grid(.~proceso) +
theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust=0.5,size=7))
grid.arrange(XmR, mR, ncol=1)
En ocasiones se opta por un muestreo por lotes: en cada momento de muestreo se selecciona un lote de varias unidades y se miden todas las unidades de ese lote. En ese caso, procede utilizar los valores promedios observados en cada lote, así como la variabilidad en el lote. En base a estas mediciones, se valorará si el proceso está bajo control o no.
3.5 ¿Qué molde recomendarías utilizar a la empresa?
Con el fin de testar 3 moldes hechos con distinto material, se han fabricado tornillos con los tres y muestreado en semanas consecutivas, a razón de 3 mediciones por semana para cada molde (disponibles en bd4). Queremos elegir el mejor molde respecto de estabilidad y cumplimiento de los objetivos de calidad.
Disponemos de 50 tandas de 3 tornillos (cada muestra contiene tres mediciones), elaborados con 3 moldes distintos (variable “molde”).
Ayuda. Consulta rcontrolcharts.com XbarR y Rbar.
# Descripción de bd4
head(bd4)
## tornillos fecha molde run_id
## 1 4.994502 2018-11-18 M1 1
## 2 5.008394 2018-11-18 M1 2
## 3 5.006239 2018-11-18 M1 3
## 4 5.031477 2018-11-25 M1 1
## 5 4.970335 2018-11-25 M1 2
## 6 5.014761 2018-11-25 M1 3
summary(bd4)
## tornillos fecha molde run_id
## Min. :4.895 Min. :2018-11-18 M1:150 1:150
## 1st Qu.:4.957 1st Qu.:2019-02-10 M2:150 2:150
## Median :4.983 Median :2019-05-08 M3:150 3:150
## Mean :4.983 Mean :2019-05-08
## 3rd Qu.:5.006 3rd Qu.:2019-08-04
## Max. :5.086 Max. :2019-10-27
nlotes=150/3
# Creamos una variable para reconocer los lotes
bd4$lotes=factor(rep(paste0("L",1:nlotes),rep(3,nlotes)), levels=paste0("L",1:nlotes))
# Gráficos de control por lotes y moldes
# Medias por lote
ggplot(bd4,aes(x=lotes,y=tornillos,group=1))+
stat_summary(fun.y = mean, geom = "point") +
stat_summary(fun.y = mean, geom = "line") +
stat_QC()+ stat_QC_labels(digits=2) +
# Show Individuals
geom_point(alpha= 1/5) +
stat_QC(n=1, color.qc_limits = "orange") +
stat_QC_labels(n=1, color.qc_limits = "orange",digits=2)+
facet_wrap(vars(molde),nrow=3)+ ylab("Xbar")+
theme(axis.text.x = element_text(angle = 90))
## Warning: The `fun.y` argument of `stat_summary()` is deprecated as of ggplot2 3.3.0.
## ℹ Please use the `fun` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Rangos por lotes
ggplot(bd4,aes(x=lotes,y=tornillos,group=1))+
stat_summary(fun.y = QCrange, geom = "point") +
stat_summary(fun.y = QCrange, geom = "line") +
stat_QC(method="rBar",auto.label = T,label.digits = 2) +
facet_wrap(vars(molde),nrow=3)+ ylab("Rbar")+
theme(axis.text.x = element_text(angle = 90))
# Gráfico de Control de medias por lotes conjunto
ggplot(bd4,aes(x=lotes,y=tornillos,group=1,color=molde))+
stat_summary(fun.y = mean, geom = "point") +
stat_summary(fun.y = mean, geom = "line") +
stat_QC()+ stat_QC_labels(digits=2) +
# Show Individuals
geom_point(alpha= 1/5) +
stat_QC(n=3, color.qc_limits = "orange") +
stat_QC_labels(n=1, color.qc_limits = "orange",digits=2)+
ylab("Xbar")+
theme(axis.text.x = element_text(angle = 90))
# Gráfico de Control de medias por lotes conjunto
ggplot(bd4,aes(x=lotes,y=tornillos,group=1,color=molde))+
stat_summary(fun.y = mean, geom = "point") +
stat_summary(fun.y = mean, geom = "line") +
stat_QC()+ stat_QC_labels(digits=2) +
# Show Individuals
geom_point(alpha= 1/5) +
stat_QC(n=3, color.qc_limits = "orange") +
stat_QC_labels(n=1, color.qc_limits = "orange",digits=2)+
ylab("Xbar")+
facet_grid(~molde)+
theme(axis.text.x = element_text(angle = 90,size=5),
legend.position = "none")
En ocasiones nuestras mediciones consistirán en el número de defectos o la proporción de defectos en diversos lotes muestreados. En ese caso hemos de utilizar los gráficos de control p-np.
3.6 Identifica el mejor molde en función de la proporción de tornillos defectuosos
Ahora, en lugar de las longitudes de los tornillos, se anota cuántos tornillos son defectuosos en una caja de 100 unidades (disponibles en bd5). Se muestrean 30 cajas de tornillos hechos con dos moldes diferentes. Nos interesa identificar el mejor molde en función del estudio de control del número y la proporción de tornillos defectuosos.
Ayuda Consulta los gráficos n y p en rcontrolcharts.com.
# Descripción de bd5
head(bd5)
## id Num_tornillos_def n molde p
## 1 1 0 100 M1 0
## 2 2 0 100 M1 0
## 3 3 0 100 M1 0
## 4 4 0 100 M1 0
## 5 5 0 100 M1 0
## 6 6 0 100 M1 0
bd5 %>%
group_by(molde) %>%
summarise(defectos_por100=mean(Num_tornillos_def),prop_defectos=mean(p))
## # A tibble: 2 × 3
## molde defectos_por100 prop_defectos
## <fct> <dbl> <dbl>
## 1 M1 0.767 0.00767
## 2 M2 9.83 0.0983
#Basic n chart + facetting
ggplot(data = bd5, aes(id, Num_tornillos_def )) +
geom_point(aes(color=molde)) + geom_line(aes(color=molde)) +
stat_QC(method = "np", n=100, auto.label = T, label.digits = 2)+
scale_color_manual(values=c("#38A3E1", "#BBD032"))+
facet_wrap(.~molde)+
ylab("Num.tornillos defectuosos")
#basic p-chart + facetting
ggplot(data =bd5, aes(id, y=p,n=100)) +
geom_point(aes(color=molde),size=1) + geom_line(aes(color=molde)) +
stat_QC(method = "p", auto.label = T, label.digits = 2)+
scale_color_manual(values=c("#38A3E1", "#BBD032"))+
facet_wrap(.~molde)+
ylab("Prop.tornillos defectuosos")