1 Instalación de programas y librerias

Para realizar un informe de este tipo debemos instalar los programas R y RStudio, ambos de carácter gratuito. A continuación se indica las páginas webs donde podremos descargarnos los archivos ejecutables de estos programas y realizar la instalación en nuestro ordenador.

1.3 Instalación y descarga de la libreria qcc

Instale en R/RStudio la libreria qcc. A continuación debe cargarla mediante la siguiente orden:

library("qcc")
## Package 'qcc' version 2.7
## Type 'citation("qcc")' for citing this R package in publications.

2 Gráfico de control de la fracción defectuosa

2.1 Ejercicio 4.1

Se utilizará el siguiente código para la obtención de los datos denominados orangejuice:

data(orangejuice)
attach(orangejuice)
orangejuice
##    sample  D size trial
## 1       1 12   50  TRUE
## 2       2 15   50  TRUE
## 3       3  8   50  TRUE
## 4       4 10   50  TRUE
## 5       5  4   50  TRUE
## 6       6  7   50  TRUE
## 7       7 16   50  TRUE
## 8       8  9   50  TRUE
## 9       9 14   50  TRUE
## 10     10 10   50  TRUE
## 11     11  5   50  TRUE
## 12     12  6   50  TRUE
## 13     13 17   50  TRUE
## 14     14 12   50  TRUE
## 15     15 22   50  TRUE
## 16     16  8   50  TRUE
## 17     17 10   50  TRUE
## 18     18  5   50  TRUE
## 19     19 13   50  TRUE
## 20     20 11   50  TRUE
## 21     21 20   50  TRUE
## 22     22 18   50  TRUE
## 23     23 24   50  TRUE
## 24     24 15   50  TRUE
## 25     25  9   50  TRUE
## 26     26 12   50  TRUE
## 27     27  7   50  TRUE
## 28     28 13   50  TRUE
## 29     29  9   50  TRUE
## 30     30  6   50  TRUE
## 31     31  9   50 FALSE
## 32     32  6   50 FALSE
## 33     33 12   50 FALSE
## 34     34  5   50 FALSE
## 35     35  6   50 FALSE
## 36     36  4   50 FALSE
## 37     37  6   50 FALSE
## 38     38  3   50 FALSE
## 39     39  7   50 FALSE
## 40     40  6   50 FALSE
## 41     41  2   50 FALSE
## 42     42  4   50 FALSE
## 43     43  3   50 FALSE
## 44     44  6   50 FALSE
## 45     45  5   50 FALSE
## 46     46  4   50 FALSE
## 47     47  8   50 FALSE
## 48     48  5   50 FALSE
## 49     49  6   50 FALSE
## 50     50  7   50 FALSE
## 51     51  5   50 FALSE
## 52     52  6   50 FALSE
## 53     53  3   50 FALSE
## 54     54  5   50 FALSE

2.1.1 Apartado b)

Guardamos en vectores los datos que necesitamos

DATOS.LIMITES <- orangejuice[1:30, 2]
SIZE.LIMITES  <- orangejuice[1:30, 3]
RESUL <- qcc(DATOS.LIMITES, size=SIZE.LIMITES, type="p")

2.1.2 Apartado c)

Para eliminar datos de las posiciones 15 y 23

D2              <- DATOS.LIMITES[-c(15,23)]
SIZE2           <- SIZE.LIMITES[-c(15,23)]
RESUL2 <- qcc(D2, size=SIZE2, type="p")

2.1.3 Apartado d)

DATOS.RESTO  <- orangejuice[31:54, 2]
SIZE.RESTO   <- orangejuice[31:54, 3]
RESUL3 <- qcc(D2,size=SIZE2, type="p", newdata=DATOS.RESTO, newsizes=SIZE.RESTO)
plot(RESUL3)

plot(RESUL3, chart.all=FALSE)

2.1.4 Apartado e)

El contraste de hipótesis se puede resolver en R con la función CONTRASTE.4.5.c. Esta función no se puede utilizar en RMarkdown dado que contiene la función interactiva menu, pero puede utilizar en la consola de R o RStudio.

CONTRASTE <- function(D1, n1, D2, n2, ALPHA = 0.05)
{

P.GORRO1    <- mean( D1 / n1)

P.GORRO2    <- mean( D2 / n2)

m1              <- length(D1)

m2              <- length(D2)

n1              <- n1[1]*m1

n2              <- n2[1]*m2

P.GORRO     <- (n1*P.GORRO1+n2*P.GORRO2)/(n1+n2)

Q.GORRO     <- 1 - P.GORRO

Zexp            <- (P.GORRO1 - P.GORRO2) / sqrt(P.GORRO * Q.GORRO*(1/n1+1/n2))


TIPO            <- menu(c("Bilateral", "Cola izquierda", "Cola derecha"))

if (TIPO ==1) 
{
Zcritico    <- qnorm(1-ALPHA/2)
if (abs(Zexp) > Zcritico ) 
CONCLUSION <- 
"Se rechaza H0. Las proporciones de articulos defectuosos son diferentes"
else                                 
CONCLUSION <- 
"NO se rechaza H0. Las proporciones de articulos defectuosos son iguales"       
}
else if (TIPO ==2)
{
Zcritico    <- qnorm(ALPHA)
if (Zexp < Zcritico )      
CONCLUSION <- "Se rechaza H0. 
La proporción actual de artículos defectuosos es mayor que la anterior"
else                                 
CONCLUSION <- "NO se rechaza H0. 
La proporción actual de artículos defectuosos NO es mayor que la anterior"      
}
else if (TIPO ==3)
{
Zcritico    <- qnorm(1-ALPHA)
if (Zexp > Zcritico )      
CONCLUSION <- "Se rechaza H0. 
La proporción actual de artículos defectuosos es menor que la anterior"
else                                 
CONCLUSION <- "NO se rechaza H0. 
La proporción actual de artículos defectuosos NO es menor que la anterior"      
}

list(Zexp= Zexp, Zcritico =Zcritico, Conclusion = CONCLUSION)

}  ## Fin de la Función

En el siguiente ejemplo puede comprobar cómo utilizar el contraste anterior. Recuerde que debe usar la consola de R o RStudio, pero no en RMarkdown:

DATOS1 <- orangejuice[1:30,2]
SIZES1 <- orangejuice[1:30,3]


DATOS2 <- orangejuice[31:54,2]
SIZES2 <- orangejuice[31:54,3]


CONTRASTE(DATOS1, SIZES1, DATOS2, SIZES2)

2.1.5 Apartado f)

RESUL4 <- qcc(DATOS.RESTO, size= SIZE.RESTO, type="p")

2.1.6 Apartado g)

Cargamos los datos:

data(orangejuice2)
attach(orangejuice2)
## The following objects are masked from orangejuice:
## 
##     D, sample, size, trial
orangejuice2
##    sample  D size trial
## 1      31  9   50  TRUE
## 2      32  6   50  TRUE
## 3      33 12   50  TRUE
## 4      34  5   50  TRUE
## 5      35  6   50  TRUE
## 6      36  4   50  TRUE
## 7      37  6   50  TRUE
## 8      38  3   50  TRUE
## 9      39  7   50  TRUE
## 10     40  6   50  TRUE
## 11     41  2   50  TRUE
## 12     42  4   50  TRUE
## 13     43  3   50  TRUE
## 14     44  6   50  TRUE
## 15     45  5   50  TRUE
## 16     46  4   50  TRUE
## 17     47  8   50  TRUE
## 18     48  5   50  TRUE
## 19     49  6   50  TRUE
## 20     50  7   50  TRUE
## 21     51  5   50  TRUE
## 22     52  6   50  TRUE
## 23     53  3   50  TRUE
## 24     54  5   50  TRUE
## 25     55  8   50 FALSE
## 26     56  7   50 FALSE
## 27     57  5   50 FALSE
## 28     58  6   50 FALSE
## 29     59  4   50 FALSE
## 30     60  5   50 FALSE
## 31     61  2   50 FALSE
## 32     62  3   50 FALSE
## 33     63  4   50 FALSE
## 34     64  7   50 FALSE
## 35     65  6   50 FALSE
## 36     66  5   50 FALSE
## 37     67  5   50 FALSE
## 38     68  3   50 FALSE
## 39     69  7   50 FALSE
## 40     70  9   50 FALSE
## 41     71  6   50 FALSE
## 42     72 10   50 FALSE
## 43     73  4   50 FALSE
## 44     74  3   50 FALSE
## 45     75  5   50 FALSE
## 46     76  8   50 FALSE
## 47     77 11   50 FALSE
## 48     78  9   50 FALSE
## 49     79  7   50 FALSE
## 50     80  3   50 FALSE
## 51     81  5   50 FALSE
## 52     82  2   50 FALSE
## 53     83  1   50 FALSE
## 54     84  4   50 FALSE
## 55     85  5   50 FALSE
## 56     86  3   50 FALSE
## 57     87  7   50 FALSE
## 58     88  6   50 FALSE
## 59     89  4   50 FALSE
## 60     90  4   50 FALSE
## 61     91  6   50 FALSE
## 62     92  8   50 FALSE
## 63     93  5   50 FALSE
## 64     94  6   50 FALSE

Realizamos el gráfico de control solicitado:

RESUL5 <- qcc(DATOS.RESTO,     size=SIZE.RESTO, type="p",
     newdata=orangejuice2[25:64,2], newsizes = orangejuice2[25:64,3]   )

3 Gráfico de control del número de artículos defectuosos

3.1 Ejercicio 4.2

3.1.1 Apartado b)

Guardamos en vectores los datos que necesitamos

DATOS.LIMITES <- orangejuice[1:30, 2]
SIZE.LIMITES  <- orangejuice[1:30, 3]
RESUL <- qcc(DATOS.LIMITES, size=SIZE.LIMITES, type="np")

3.1.2 Apartado c)

Para eliminar datos de las posiciones 15 y 23

D2              <- DATOS.LIMITES[-c(15,23)]
SIZE2           <- SIZE.LIMITES[-c(15,23)]
RESUL2 <- qcc(D2, size=SIZE2, type="np")

3.1.3 Apartado d)

DATOS.RESTO  <- orangejuice[31:54, 2]
SIZE.RESTO   <- orangejuice[31:54, 3]
RESUL3 <- qcc(D2,size=SIZE2,type="np", newdata=DATOS.RESTO, newsizes=SIZE.RESTO)

plot(RESUL3, chart.all=FALSE)

3.1.4 Apartado f)

RESUL4 <- qcc(DATOS.RESTO, size= SIZE.RESTO, type="np")

3.1.5 Apartado g)

Cargarmos los nuevos datos:

data(orangejuice2)
attach(orangejuice2)
## The following objects are masked from orangejuice2 (pos = 3):
## 
##     D, sample, size, trial
## The following objects are masked from orangejuice:
## 
##     D, sample, size, trial
orangejuice2
##    sample  D size trial
## 1      31  9   50  TRUE
## 2      32  6   50  TRUE
## 3      33 12   50  TRUE
## 4      34  5   50  TRUE
## 5      35  6   50  TRUE
## 6      36  4   50  TRUE
## 7      37  6   50  TRUE
## 8      38  3   50  TRUE
## 9      39  7   50  TRUE
## 10     40  6   50  TRUE
## 11     41  2   50  TRUE
## 12     42  4   50  TRUE
## 13     43  3   50  TRUE
## 14     44  6   50  TRUE
## 15     45  5   50  TRUE
## 16     46  4   50  TRUE
## 17     47  8   50  TRUE
## 18     48  5   50  TRUE
## 19     49  6   50  TRUE
## 20     50  7   50  TRUE
## 21     51  5   50  TRUE
## 22     52  6   50  TRUE
## 23     53  3   50  TRUE
## 24     54  5   50  TRUE
## 25     55  8   50 FALSE
## 26     56  7   50 FALSE
## 27     57  5   50 FALSE
## 28     58  6   50 FALSE
## 29     59  4   50 FALSE
## 30     60  5   50 FALSE
## 31     61  2   50 FALSE
## 32     62  3   50 FALSE
## 33     63  4   50 FALSE
## 34     64  7   50 FALSE
## 35     65  6   50 FALSE
## 36     66  5   50 FALSE
## 37     67  5   50 FALSE
## 38     68  3   50 FALSE
## 39     69  7   50 FALSE
## 40     70  9   50 FALSE
## 41     71  6   50 FALSE
## 42     72 10   50 FALSE
## 43     73  4   50 FALSE
## 44     74  3   50 FALSE
## 45     75  5   50 FALSE
## 46     76  8   50 FALSE
## 47     77 11   50 FALSE
## 48     78  9   50 FALSE
## 49     79  7   50 FALSE
## 50     80  3   50 FALSE
## 51     81  5   50 FALSE
## 52     82  2   50 FALSE
## 53     83  1   50 FALSE
## 54     84  4   50 FALSE
## 55     85  5   50 FALSE
## 56     86  3   50 FALSE
## 57     87  7   50 FALSE
## 58     88  6   50 FALSE
## 59     89  4   50 FALSE
## 60     90  4   50 FALSE
## 61     91  6   50 FALSE
## 62     92  8   50 FALSE
## 63     93  5   50 FALSE
## 64     94  6   50 FALSE

Realizamos el gráfico de control:

RESUL5 <- qcc(DATOS.RESTO,     size=SIZE.RESTO, type="np",
     newdata=orangejuice2[25:64,2], newsizes = orangejuice2[25:64,3]   )

4 Gráfico de control de disconformidades (c-chart)

4.1 Ejercicio 4.3

Se obtienen los datos con la siguiente orden:

data(circuit)
attach(circuit)
## The following objects are masked from orangejuice2 (pos = 3):
## 
##     size, trial
## The following objects are masked from orangejuice2 (pos = 4):
## 
##     size, trial
## The following objects are masked from orangejuice:
## 
##     size, trial
circuit
##     x size trial
## 1  21  100  TRUE
## 2  24  100  TRUE
## 3  16  100  TRUE
## 4  12  100  TRUE
## 5  15  100  TRUE
## 6   5  100  TRUE
## 7  28  100  TRUE
## 8  20  100  TRUE
## 9  31  100  TRUE
## 10 25  100  TRUE
## 11 20  100  TRUE
## 12 24  100  TRUE
## 13 16  100  TRUE
## 14 19  100  TRUE
## 15 10  100  TRUE
## 16 17  100  TRUE
## 17 13  100  TRUE
## 18 22  100  TRUE
## 19 18  100  TRUE
## 20 39  100  TRUE
## 21 30  100  TRUE
## 22 24  100  TRUE
## 23 16  100  TRUE
## 24 19  100  TRUE
## 25 17  100  TRUE
## 26 15  100  TRUE
## 27 16  100 FALSE
## 28 18  100 FALSE
## 29 12  100 FALSE
## 30 15  100 FALSE
## 31 24  100 FALSE
## 32 21  100 FALSE
## 33 28  100 FALSE
## 34 20  100 FALSE
## 35 25  100 FALSE
## 36 19  100 FALSE
## 37 18  100 FALSE
## 38 21  100 FALSE
## 39 16  100 FALSE
## 40 22  100 FALSE
## 41 19  100 FALSE
## 42 12  100 FALSE
## 43 14  100 FALSE
## 44  9  100 FALSE
## 45 16  100 FALSE
## 46 21  100 FALSE

4.1.1 Apartado a)

X1          <- circuit[1:26, 1]
SIZE1       <- circuit[1:26, 2]
# Opción 1 
RESUL <- qcc(X1,     size=SIZE1, type="c")

# Opción 2 
RESUL <- qcc(X1,                 type="c")

5 4.4 Gráfico de control del número de defectos por unidad de inspección (u-chart)

Se utilizará el siguiente código para la obtención de los datos denominados pcmanufact:

data(pcmanufact)
attach(pcmanufact)
## The following objects are masked from circuit:
## 
##     size, x
## The following object is masked from orangejuice2 (pos = 4):
## 
##     size
## The following object is masked from orangejuice2 (pos = 5):
## 
##     size
## The following object is masked from orangejuice:
## 
##     size
pcmanufact
##     x size
## 1  10    5
## 2  12    5
## 3   8    5
## 4  14    5
## 5  10    5
## 6  16    5
## 7  11    5
## 8   7    5
## 9  10    5
## 10 15    5
## 11  9    5
## 12  5    5
## 13  7    5
## 14 11    5
## 15 12    5
## 16  6    5
## 17  8    5
## 18 10    5
## 19  7    5
## 20  5    5
X1          <- pcmanufact[, 1]
SIZE1       <- pcmanufact[, 2]
RESUL <- qcc(X1,     size=SIZE1, type="u")

6 Otros gráficos

6.1 Gráfico de pareto

DEFECTOS            <- c(80,27,66,94,33)
names(DEFECTOS) <- c("TIPO.A", "TIPO.B", "TIPO.C", "TIPO.D", "TIPO.E")
DEFECTOS
## TIPO.A TIPO.B TIPO.C TIPO.D TIPO.E 
##     80     27     66     94     33
pareto.chart(DEFECTOS)

##         
## Pareto chart analysis for DEFECTOS
##          Frequency Cum.Freq. Percentage Cum.Percent.
##   TIPO.D  94.00000  94.00000   31.33333     31.33333
##   TIPO.A  80.00000 174.00000   26.66667     58.00000
##   TIPO.C  66.00000 240.00000   22.00000     80.00000
##   TIPO.E  33.00000 273.00000   11.00000     91.00000
##   TIPO.B  27.00000 300.00000    9.00000    100.00000

6.2 Diagrama de causa y efecto

cause.and.effect(
    cause = list(
        Maquinaria = c("Mal ajuste","Piezas desgastadas"), 
        Trabajador = c("Falta de atención", "Inexperiencia", "Cansancio"), 
       Materiales = "Mala Calidad",
      Medición   = c("Instrumentos", "Inspectores") 
               ),  
    effect="Defecto de tipo B")

7 Relación de Ejercicios

7.1 Ejercicio 4.5

7.1.1 Apartado a)

7.1.2 Apartado b)

7.1.3 Apartado c)

A continuación se guarda en el objeto DEFECTUOSOS en número de unidades defectuosas en cada lote, y en el objeto SIZES los tamaños de los lotes. Con la función qcc se obtiene el gráfico de control para la proporción de artículos defectuosos.

DEFECTUOSOS     <- c(3,5,9,10,19,21,4,3,1,1,0,0,2,0,1,4,2,3,1,0)
SIZES <- rep(100, 20)
RESULTADOS <- qcc(DEFECTUOSOS, size=SIZES, type="p")

El contraste de hipótesis se puede resolver en R con la función CONTRASTE.4.5.c. Esta función no se puede utilizar en RMarkdown dado que contiene la función interactiva menu, pero puede utilizar en la consola de R o RStudio.

CONTRASTE.4.5.c <- function(DEFECTUOSOS, SIZE.LOTE, P.0, ALPHA = 0.05)
{
NUMERO.LOTES <- length(DEFECTUOSOS)
P.GORRO  <- sum(DEFECTUOSOS)/(NUMERO.LOTES*SIZE.LOTE)
Q.0     <- 1 - P.0
Zexp            <- (P.GORRO - P.0) / sqrt( (P.0 * Q.0)/(NUMERO.LOTES*SIZE.LOTE)  )
TIPO            <- menu(c("Bilateral", "Cola izquierda", "Cola derecha"))

if (TIPO ==1) 
{
Zcritico    <- qnorm(1-ALPHA/2)
if (abs(Zexp) > Zcritico ) 
CONCLUSION <- paste("Se rechaza H0. 
La proporción de articulos defectuosos es distinta de ", P.0, sep="")
else                         
CONCLUSION <- paste("NO se rechaza H0. 
La proporción de articulos defectuosos es ", P.0, sep="")       
}
else if (TIPO ==2)
{
Zcritico    <- qnorm(ALPHA)
if (Zexp < Zcritico )      
CONCLUSION <- paste("Se rechaza H0. 
La proporción de artículos defectuosos es menor de ", P.0, sep="")
else                         
CONCLUSION <- paste("NO se rechaza H0. 
La proporción de artículos defectuosos NO es menor de ", P.0, sep="")       
}
else if (TIPO ==3)
{
Zcritico    <- qnorm(1-ALPHA)
if (Zexp > Zcritico )      
CONCLUSION <- paste("Se rechaza H0. 
La proporción de artículos defectuosos es mayor de ", P.0, sep="") 
else                         
CONCLUSION <- paste("NO se rechaza H0. 
La proporción de artículos defectuosos NO es mayor de ", P.0, sep="")   
}

list(Zexp= Zexp, Zcritico =Zcritico, Conclusion = CONCLUSION)

}  ## Fin de la Función



DEFECTUOSOS     <- c(3,5,9,10,19,21,4,3,1,1,0,0,2,0,1,4,2,3,1,0)

CONTRASTE.4.5.c(DEFECTUOSOS, SIZE.LOTE=100, P.0=0.03, ALPHA = 0.05)

7.2 Ejercicio 4.8

X           <- c(5,7,6,9,5,8,7,6,7,11,8,7,6,5,8,7)
RESUL <- qcc(X,                 type="c")