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.
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.
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
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")
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")
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)
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)
RESUL4 <- qcc(DATOS.RESTO, size= SIZE.RESTO, type="p")
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] )
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")
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")
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)
RESUL4 <- qcc(DATOS.RESTO, size= SIZE.RESTO, type="np")
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] )
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
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")
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")
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
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")
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)
X <- c(5,7,6,9,5,8,7,6,7,11,8,7,6,5,8,7)
RESUL <- qcc(X, type="c")