#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)

El caso de los tornillos

Objetivos de aprendizaje

  • Conocer todas las tareas a desarrollar en la última etapa CONTROLAR de un proyecto de mejora.
  • Implementar el control estadístico del proceso para un proceso bajo control, e identificar situaciones en las que intervienen variaciones especiales.
  • Reflexionar sobre las diferencias entre proceso bajo control y proceso capaz.

Metodología

Se te van a plantear tres retos:

  • RETO1. Sobre fundamentos en la última etapa de un proyecto de mejora.
  • RETO2. Sobre fundamentos del control estadístico de los procesos.
  • RETO3. En el que podrás demostrar tu dominio del CEP con R.

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

  • 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))

Contexto

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.

Reto 1. Conceptos de CONTROL

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.

Reto 2. Análisis CEP

Variación común en variables continuas

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)

Capacidad del proceso bajo control

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)

Variación especial en variables continuas

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:

    1. al menos 1 punto fuera de los límites 3sigma
    2. al menos 2 puntos consecutivos más allá de los límites 2sigma
    3. al menos 4 puntos consecutivos más allá de los límites 1sigma
    4. al menos 8 puntos consecutivos a un lado de la línea central.

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)

Control de calidad por lotes para datos continuos

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")

Control de calidad con datos categóricos

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")