1 Objetivo y variables

Comparar el tiempo necesario para limpiar piezas metálicas mediante tres métodos: A, B y C. Un menor tiempo representa mayor rapidez, siempre que se alcance el mismo criterio de limpieza.

Todos los datos son simulados para fines académicos. No representan mediciones reales ni permiten recomendar un método industrial real.

Elemento Definición
Factor independiente Método de limpieza: cualitativo nominal
Tratamientos Métodos A, B y C
Respuesta Tiempo de limpieza en segundos: cuantitativa continua
Unidad experimental Una pieza que recibe un método de forma independiente
Controles Material, dimensiones, producto dosificado y criterio de limpieza
Réplica Una pieza distinta que recibe el mismo tratamiento

El equipo se limpia o restablece entre aplicaciones para evitar arrastre. Se mantiene un procedimiento de medición uniforme. La selección de piezas disponibles sería por conveniencia; la asignación de tratamientos, en cambio, se realiza al azar. Muestreo y asignación aleatoria son procesos distintos.

2 Ejemplo 1: DCA

2.1 Planteamiento y organización

Se dispone de 18 piezas similares de un mismo lote, con igual tipo y cantidad de suciedad. Se asignan aleatoriamente seis piezas a cada método. No se forman bloques porque no se identifica una fuente conocida de heterogeneidad que sea necesario controlar.

H₀: μA = μB = μC. Los métodos tienen el mismo tiempo medio.
H₁: al menos una media es diferente.
Nivel de significación: α = 0.05.

El modelo es \(Y_{ij}=\mu+\tau_i+\varepsilon_{ij}\): media general, efecto del método y error aleatorio.

medias <- c(A=120,B=105,C=90)
dca <- data.frame(pieza=paste0('P',1:18),
                  metodo=factor(sample(rep(c('A','B','C'),each=6))))
dca$tiempo <- round(medias[as.character(dca$metodo)]+rnorm(18,0,8),1)
dca$orden <- sample(1:18)
dca <- dca[order(dca$orden),]
knitr::kable(dca,row.names=FALSE,caption='Asignación y orden de ejecución del DCA')
Asignación y orden de ejecución del DCA
pieza metodo tiempo orden
P7 B 89.3 1
P1 C 92.9 2
P16 C 96.7 3
P15 B 91.5 4
P2 C 93.2 5
P10 C 81.5 6
P12 C 81.8 7
P3 A 120.9 8
P8 A 125.6 9
P18 B 95.9 10
P9 A 116.2 11
P4 B 100.6 12
P5 A 134.3 13
P14 B 100.0 14
P13 C 84.2 15
P17 B 106.2 16
P11 A 118.3 17
P6 A 124.0 18
knitr::kable(resumir(dca),caption='Estadísticas descriptivas del DCA')
Estadísticas descriptivas del DCA
Metodo n Media DE
A 6 123.217 6.4484
B 6 97.250 6.2765
C 6 88.383 6.6481

Las medias teóricas y las desviaciones usadas para generar datos son decisiones de simulación; no son resultados de observaciones reales.

2.2 Distribución de tiempos

par(mar=c(4.5,4.5,2,1))
boxplot(tiempo~metodo,dca,col=colores,xlab='Método',ylab='Tiempo (segundos)',main='DCA: distribución por método')
stripchart(tiempo~metodo,dca,vertical=TRUE,method='jitter',pch=19,add=TRUE)

2.3 Modelo, supuestos y ANOVA

modelo_dca <- aov(tiempo~metodo,data=dca)
summary(modelo_dca)
##             Df Sum Sq Mean Sq F value  Pr(>F)    
## metodo       2   3932    1966    47.1 3.4e-07 ***
## Residuals   15    626      42                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
shapiro.test(residuals(modelo_dca))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo_dca)
## W = 0.932, p-value = 0.21
fligner.test(tiempo~metodo,data=dca)
## 
##  Fligner-Killeen test of homogeneity of variances
## 
## data:  tiempo by metodo
## Fligner-Killeen:med chi-squared = 0.626, df = 2, p-value = 0.73

Shapiro evalúa normalidad de residuos y Fligner igualdad de varianzas. Un p menor que 0.05 aporta evidencia contra el supuesto correspondiente; un p mayor no demuestra su cumplimiento. La independencia se justifica mediante el procedimiento experimental.

par(mfrow=c(1,2),mar=c(4.5,4.5,3,1))
qqnorm(residuals(modelo_dca),main='DCA: Q-Q de residuos',pch=19);qqline(residuals(modelo_dca),col='red')
plot(fitted(modelo_dca),residuals(modelo_dca),pch=19,xlab='Ajustados',ylab='Residuos',main='DCA: residuos vs. ajustados');abline(h=0,lty=2)

par(mfrow=c(1,1))
TukeyHSD(modelo_dca,'metodo')
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = tiempo ~ metodo, data = dca)
## 
## $metodo
##         diff     lwr       upr   p adj
## B-A -25.9667 -35.654 -16.27972 0.00001
## C-A -34.8333 -44.520 -25.14639 0.00000
## C-B  -8.8667 -18.554   0.82028 0.07529

Conclusión DCA: p = 3.409e-07 . Se rechaza H₀: hay evidencia de diferencias entre tiempos medios.

Si el ANOVA es significativo y los supuestos son razonables, Tukey identifica parejas diferentes mediante p ajustado < 0.05. Un ANOVA significativo no implica que todas las parejas difieran.

3 Ejemplo 2: DBA

3.1 Planteamiento y organización

Ahora las piezas proceden de seis lotes cuya suciedad puede presentar distinta adherencia. Cada lote constituye un bloque; dentro de un lote las piezas son similares. Se toman tres piezas distintas por lote y se asignan al azar A, B y C entre ellas.

Hay 18 unidades, tres tratamientos, seis bloques y seis réplicas por tratamiento. Cada bloque contiene los tres tratamientos, asignados aleatoriamente a piezas diferentes.

Hipótesis principal sobre métodos:
H₀: μA = μB = μC, ajustando por bloque.
H₁: al menos una media de tratamiento difiere.

Hipótesis adicional sobre bloques:
H₀: todos los efectos de bloque son cero.
H₁: al menos un efecto de bloque no es cero.

Modelo: \(Y_{ij}=\mu+\tau_i+\beta_j+\varepsilon_{ij}\). El término \(\beta_j\) representa el lote. Se supone aditividad: el efecto del método no cambia según el lote. Con una observación por combinación no se estima por separado la interacción método–lote y el error.

dba <- do.call(rbind,lapply(1:6,function(i)
  data.frame(bloque=paste0('Lote',i),pieza=paste0('L',i,'P',1:3),metodo=sample(c('A','B','C')))))
dba$metodo <- factor(dba$metodo)
dba$bloque <- factor(dba$bloque)
efectos <- setNames(c(-20,-12,-4,4,12,20),paste0('Lote',1:6))
dba$tiempo <- round(medias[as.character(dba$metodo)]+efectos[as.character(dba$bloque)]+rnorm(18,0,6),1)
dba$orden <- sample(1:18)
dba <- dba[order(dba$orden),]
knitr::kable(dba,row.names=FALSE,caption='Asignación dentro de bloques y orden de ejecución')
Asignación dentro de bloques y orden de ejecución
bloque pieza metodo tiempo orden
Lote6 L6P3 C 110.0 1
Lote6 L6P1 A 131.4 2
Lote5 L5P1 B 115.6 3
Lote5 L5P2 C 96.6 4
Lote4 L4P1 C 96.5 5
Lote3 L3P1 B 104.0 6
Lote1 L1P3 B 82.2 7
Lote6 L6P2 B 128.7 8
Lote4 L4P3 A 123.1 9
Lote2 L2P3 C 70.0 10
Lote1 L1P2 A 98.5 11
Lote4 L4P2 B 113.8 12
Lote2 L2P1 B 88.4 13
Lote3 L3P2 A 123.4 14
Lote3 L3P3 C 89.8 15
Lote2 L2P2 A 120.9 16
Lote1 L1P1 C 80.1 17
Lote5 L5P3 A 127.6 18
knitr::kable(with(dba,table(bloque,metodo)),caption='Una pieza por método en cada bloque')
Una pieza por método en cada bloque
A B C
Lote1 1 1 1
Lote2 1 1 1
Lote3 1 1 1
Lote4 1 1 1
Lote5 1 1 1
Lote6 1 1 1
knitr::kable(resumir(dba),caption='Descripción sin ajustar por bloque')
Descripción sin ajustar por bloque
Metodo n Media DE
A 6 120.82 11.558
B 6 105.45 17.588
C 6 90.50 14.017

La dispersión descriptiva mezcla diferencias entre lotes y error; no es la dispersión residual ajustada del modelo.

3.2 Comparación dentro de bloques

tabla <- with(dba,tapply(tiempo,list(bloque,metodo),mean))
par(mar=c(4.5,4.5,2,1))
matplot(1:3,t(tabla),type='b',pch=1:6,lty=1,col=hcl.colors(6,'Dark 3'),xaxt='n',xlab='Método',ylab='Tiempo (segundos)',main='DBA: comparación dentro de cada lote')
axis(1,at=1:3,labels=c('A','B','C'))
legend('topright',legend=rownames(tabla),col=hcl.colors(6,'Dark 3'),pch=1:6,lty=1,cex=.7,bty='n')

Cada línea representa un lote, pero sus puntos corresponden a piezas diferentes. No son mediciones repetidas de una misma pieza.

3.3 Modelo, supuestos y comparaciones

modelo_dba <- aov(tiempo~metodo+bloque,data=dba)
summary(modelo_dba)
##             Df Sum Sq Mean Sq F value  Pr(>F)    
## metodo       2   2757    1379    29.5 6.4e-05 ***
## bloque       5   2729     546    11.7 0.00065 ***
## Residuals   10    468      47                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
shapiro.test(residuals(modelo_dba))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo_dba)
## W = 0.959, p-value = 0.59
TukeyHSD(modelo_dba,'metodo')
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = tiempo ~ metodo + bloque, data = dba)
## 
## $metodo
##        diff     lwr      upr   p adj
## B-A -15.367 -26.190  -4.5429 0.00768
## C-A -30.317 -41.140 -19.4929 0.00005
## C-B -14.950 -25.774  -4.1262 0.00909

La fila metodo responde la pregunta principal y la fila bloque evalúa diferencias entre lotes. La homogeneidad se examina gráficamente sobre los residuos del modelo que incorpora bloques; comparar solamente tiempos crudos puede mezclar la variación entre lotes.

par(mfrow=c(2,2),mar=c(4.5,4.5,3,1))
qqnorm(residuals(modelo_dba),pch=19,main='DBA: Q-Q');qqline(residuals(modelo_dba),col='red')
plot(fitted(modelo_dba),residuals(modelo_dba),pch=19,xlab='Ajustados',ylab='Residuos',main='DBA: residuos vs. ajustados');abline(h=0,lty=2)
boxplot(residuals(modelo_dba)~dba$metodo,col=colores,xlab='Método',ylab='Residuos',main='Dispersión por método')
plot(dba$orden,residuals(modelo_dba),pch=19,xlab='Orden de ejecución',ylab='Residuos',main='Residuos por orden');abline(h=0,lty=2)

par(mfrow=c(1,1))

El gráfico por orden ayuda a detectar patrones temporales, pero no demuestra independencia.

Conclusión DBA: p = 6.413e-05 . Se rechaza H₀: existen diferencias entre tiempos medios de los métodos, controlando los lotes.

4 Consideraciones finales

El DCA compara métodos aplicados a piezas inicialmente similares. El DBA incorpora los lotes para controlar una fuente conocida de variación. Las conclusiones estadísticas de cada experimento se presentan en sus respectivas secciones y deben interpretarse junto con los diagnósticos del modelo.

Los datos son simulados y los escenarios son diferentes; no se comparan directamente sus errores para demostrar la superioridad de un diseño. Los resultados no constituyen evidencia experimental sobre métodos industriales reales.