Vamos a utilizar los tiempos de espera en cola de los clientes (estudiantes) que han solicitado el reconocimiento de crĂ©ditos transversales en algĂºn momento a lo largo del curso 2015-16.

Leemos en primer lugar los datos y seleccionamos las variables ‘tpo.espera.min’, de los tiempos de espera en cola expresados en minutos, y ‘mes’, referido al mes en el que se ha presentado la solicitud.

# utilizamos un banco de datos de tiempos de espera en cola del curso 2016-17
datosbd=load("cegeca16.RData")

# Seleccionamos exclusivamente los tiempos de espera y el mes
datos=tiemposespera %>%
  select(tpo.espera.min,mes)%>%
  mutate(mes=factor(mes,levels=c("sept.","oct.","nov.","dic." , "ene." , "feb.","mar.","abr." ,"may.", "jun.",  "jul.")))%>%
  filter(tpo.espera.min != is.na(tpo.espera.min))
head(datos)
##   tpo.espera.min  mes
## 1              6 oct.
## 2             34 oct.
## 3              7 oct.
## 4             74 oct.
## 5             70 oct.
## 6              8 oct.

Para los tiempos de espera en cola calculamos una descriptiva global y otra por meses:

resumen=datos %>%
  summarise(media=mean(tpo.espera.min),min=min(tpo.espera.min),max=max(tpo.espera.min),total=n())
pander(resumen)
media min max total
27.83 1 155 3750
resumen.mes=datos %>%
  group_by(mes)%>%
  summarise(media=mean(tpo.espera.min),min=min(tpo.espera.min),max=max(tpo.espera.min),total=n())
pander(resumen.mes)
mes media min max total
sept. 66.646073 1 155 955
oct. 27.321932 1 95 497
nov. 10.112500 1 43 400
dic. 5.310559 1 23 161
ene. 8.662162 1 35 222
feb. 6.588983 1 30 236
mar. 6.292994 1 28 157
abr. 4.636364 1 32 99
may. 5.438596 1 105 114
jun. 12.290000 1 121 300
jul. 21.369458 1 75 609
# Y los visualizamos grĂ¡ficamente:
ggplot(datos,aes(mes,tpo.espera.min))+geom_boxplot(aes(colour=as.factor(mes)))

Se aprecia claramente que los meses de junio a noviembre tienen un comportamiento especialmente diferente al resto de meses. Veamos este comportamiento respecto a rendimiento/capacidad del sistema.

Creamos una funciĂ³n que nos calcula los Ă­ndices de capacidad bĂ¡sicos:

cap.fun=function(datos,lsl,usl){
  xbar=mean(datos)
  s=sd(datos)
  zu=(usl-xbar)/s
  zl=(lsl-xbar)/s
  pdfe=pnorm(zl)+1-pnorm(zu)
zbench=qnorm(pdfe)
zscore=min(c(zu,-zl))
Pp=(usl-lsl)/(6*s)
Ppk=min(c(zu/3,-zl/3 ))
return(data.frame(zl=zl,zu=zu,pdfe=pdfe,zbench=zbench,zscore=zscore,Pp=Pp,Ppk=Ppk))}

Y calculamos dichos Ă­ndices de capacidad de modo global con todos los datos:

lsl=0;usl=60
cap.global=cap.fun(datos$tpo.espera.min,lsl,usl)
pander(cap.global)
zl zu pdfe zbench zscore Pp Ppk
-0.8488 0.981 0.3613 -0.3551 0.8488 0.305 0.2829

y de modo especĂ­fico cada mes:

pormes=tapply(datos$tpo.espera.min,INDEX=as.factor(datos$mes),FUN=cap.fun,lsl=lsl,usl=usl)
pander(pormes)

Si ademĂ¡s definimos quĂ© entendemos por defecto, podemos calcular el rendimiento (YIELD) y todas las medidas relacionadas para cuantificar capacidad en tĂ©rminos del nĂºmero de defectos. Globalmente tenemos:

defectos=sum(datos$tpo.espera.min>usl)+sum(datos$tpo.espera.min<lsl)
opp=length(datos$tpo.espera.min)
pander(ss.ca.yield(defects = defectos, rework = 0, opportunities = opp))
Yield FTY RTY DPU DPMO
0.8443 0.8443 0.8443 584 155733

AnĂ¡lisis de capacidad con ‘qcc’

Utilizando la librerĂ­a ‘qcc’ realizamos el anĂ¡lisis de capacidad con todos los datos disponibles, considerando posibles diferencias entre los meses del curso:

cap <- qcc.groups(datos$tpo.espera.min, datos$mes)
q <- qcc(cap, type="xbar", nsigmas=3, plot=TRUE)
plot(q)

lsl=0;usl=60
target=30
process.capability(q, spec.limits=c(lsl,usl),target=target)

## 
## Process Capability Analysis
## 
## Call:
## process.capability(object = q, spec.limits = c(lsl, usl), target = target)
## 
## Number of obs = 3750         Target = 30
##        Center = 27.83           LSL = 0
##        StdDev = 22.63           USL = 60
## 
## Capability indices:
## 
##        Value    2.5%   97.5%
## Cp    0.4418  0.4318  0.4518
## Cp_l  0.4099  0.3980  0.4218
## Cp_u  0.4737  0.4610  0.4864
## Cp_k  0.4099  0.3958  0.4240
## Cpm   0.4398  0.4298  0.4498
## 
## Exp<LSL 11%   Obs<LSL 0%
## Exp>USL 7.8%  Obs>USL 16%

Separamos en particular el mes de septiembre y repetimos el anĂ¡lisis de capacidad con idĂ©nticos objetivos y lĂ­mites de especificaciĂ³n, pero diferenciando por dĂ­as (laborables):

datos.sep=tiemposespera%>%
  select(fecha,mes,tpo.espera.min)%>%
  filter(mes=="sept.")%>%
  mutate(fecha=factor(fecha,levels=as.character(unique(fecha[mes=="sept."]))))

cap <- qcc.groups(datos.sep$tpo.espera.min, datos.sep$fecha)
q <- qcc(cap, type="xbar", nsigmas=3, plot=TRUE)
plot(q)

lsl=0;usl=60
target=30
process.capability(q, spec.limits=c(lsl,usl),target=target)

## 
## Process Capability Analysis
## 
## Call:
## process.capability(object = q, spec.limits = c(lsl, usl), target = target)
## 
## Number of obs = 960          Target = 30
##        Center = 66.3            LSL = 0
##        StdDev = 27.58           USL = 60
## 
## Capability indices:
## 
##          Value      2.5%     97.5%
## Cp     0.36260   0.34637   0.37882
## Cp_l   0.80133   0.76641   0.83624
## Cp_u  -0.07613  -0.05821  -0.09406
## Cp_k  -0.07613  -0.05477  -0.09749
## Cpm    0.21936   0.20682   0.23189
## 
## Exp<LSL 0.81%     Obs<LSL 0%
## Exp>USL 59%   Obs>USL 55%

Quitamos ahora los meses crĂ­ticos, de junio a noviembre (ambos incluidos) y enero:

datos.p=datos %>%
  filter(mes %in% c( "dic.", "feb.", "mar.", "abr.", "may.")) %>%
  mutate(mes=factor(mes,levels=unique(mes)))

cap <- qcc.groups(datos.p$tpo.espera.min, datos.p$mes)
q <- qcc(cap, type="xbar", nsigmas=3, plot=TRUE)
plot(q)

lsl=0;usl=60
target=30
process.capability(q, spec.limits=c(lsl,usl),target=target)

## 
## Process Capability Analysis
## 
## Call:
## process.capability(object = q, spec.limits = c(lsl, usl), target = target)
## 
## Number of obs = 767          Target = 30
##        Center = 5.837           LSL = 0
##        StdDev = 6.129           USL = 60
## 
## Capability indices:
## 
##        Value    2.5%   97.5%
## Cp    1.6317  1.5500  1.7134
## Cp_l  0.3175  0.2936  0.3414
## Cp_u  2.9459  2.8206  3.0713
## Cp_k  0.3175  0.2890  0.3459
## Cpm   0.4012  0.3732  0.4291
## 
## Exp<LSL 17%   Obs<LSL 0%
## Exp>USL 0%    Obs>USL 0.13%