🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊
Lote / Día | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | A = 8 | B = 7 | D = 1 | C = 7 | E = 3 |
2 | C = 11 | E = 2 | A = 7 | D = 3 | B = 8 |
3 | B = 4 | A = 9 | C = 10 | E = 1 | D = 5 |
4 | D = 6 | C = 8 | E = 6 | B = 6 | A = 10 |
5 | E = 4 | D = 2 | B = 3 | A = 8 | C = 8 |
📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊
🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
H0: Los catalizadores no tienen efecto sobre el tiempo de reacción.
H1: Al menos un catalizador tiene efecto sobre el tiempo de reacción.
H0: \(\mu_A = \mu_B = \mu_C = \mu_D = \mu_E\)
H1: Al menos un catalizador tiene efecto sobre el tiempo de reacción.
H0: Los lotes no tienen efecto sobre el tiempo de reacción.
H1: Al menos un lote tiene efecto sobre el tiempo de reacción.
H0: Los días no tienen efecto sobre el tiempo de reacción.
H1: Al menos un día tiene efecto sobre el tiempo de reacción.
📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊
🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
# Datos
Lote = factor(rep(1:5, each=5))
Día = factor(rep(1:5, times=5))
Catalizador = factor(c("A","B","D","C","E",
"C","E","A","D","B",
"B","A","C","E","D",
"D","C","E","B","A",
"E","D","B","A","C"))
Tiempo = c(8,7,1,7,3,
11,2,7,3,8,
4,9,10,1,5,
6,8,6,6,10,
4,2,3,8,8)
datos = data.frame(Lote, Día, Catalizador, Tiempo)
datos
🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
# Análisis de varianza
modelo = aov(Tiempo ~ Lote + Día + Catalizador, data=datos)
summary(modelo)
## Df Sum Sq Mean Sq F value Pr(>F)
## Lote 4 15.44 3.86 1.235 0.347618
## Día 4 12.24 3.06 0.979 0.455014
## Catalizador 4 141.44 35.36 11.309 0.000488 ***
## Residuals 12 37.52 3.13
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
El valor p del catalizador es 0.0005, por lo que se rechaza la hipótesis nula y se concluye que al menos un catalizador tiene efecto sobre el tiempo de reacción.
El valor p del lote es 0.3476, por lo que no se rechaza la hipótesis nula y se concluye que no evidencia en la muestra de que los lotes tengan efecto sobre el tiempo de reacción.
El valor p del lote es 0.455, por lo que no se rechaza la hipótesis nula y se concluye que no evidencia en la muestra de el Día tengan efecto sobre el tiempo de reacción.
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
# Boxplot para Catalizador con colores
boxplot(Tiempo ~ Catalizador, data=datos, main="Boxplot de Tiempo por Catalizador", xlab="Catalizador", ylab="Tiempo", col=c("red2", "blue2", "yellow2", "orange2","green2"))
# Boxplot para Catalizador con colores
boxplot(Tiempo ~ Lote, data=datos, main="Boxplot de Tiempo por Catalizador", xlab="Lote", ylab="Tiempo", col=c("red2", "blue2", "yellow2", "orange2","green2"))
# Boxplot para Catalizador con colores
boxplot(Tiempo ~ Día, data=datos, main="Boxplot de Tiempo por Catalizador", xlab="Día", ylab="Tiempo", col=c("red2", "blue2", "yellow2", "orange2","green2"))
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
TukeyHSD(modelo, "Catalizador")
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Tiempo ~ Lote + Día + Catalizador, data = datos)
##
## $Catalizador
## diff lwr upr p adj
## B-A -2.8 -6.3646078 0.7646078 0.1539433
## C-A 0.4 -3.1646078 3.9646078 0.9960012
## D-A -5.0 -8.5646078 -1.4353922 0.0055862
## E-A -5.2 -8.7646078 -1.6353922 0.0041431
## C-B 3.2 -0.3646078 6.7646078 0.0864353
## D-B -2.2 -5.7646078 1.3646078 0.3365811
## E-B -2.4 -5.9646078 1.1646078 0.2631551
## D-C -5.4 -8.9646078 -1.8353922 0.0030822
## E-C -5.6 -9.1646078 -2.0353922 0.0023007
## E-D -0.2 -3.7646078 3.3646078 0.9997349
TukeyHSD(modelo, "Lote")
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Tiempo ~ Lote + Día + Catalizador, data = datos)
##
## $Lote
## diff lwr upr p adj
## 2-1 1.0 -2.564608 4.564608 0.8936609
## 3-1 0.6 -2.964608 4.164608 0.9816047
## 4-1 2.0 -1.564608 5.564608 0.4225127
## 5-1 -0.2 -3.764608 3.364608 0.9997349
## 3-2 -0.4 -3.964608 3.164608 0.9960012
## 4-2 1.0 -2.564608 4.564608 0.8936609
## 5-2 -1.2 -4.764608 2.364608 0.8166339
## 4-3 1.4 -2.164608 4.964608 0.7232162
## 5-3 -0.8 -4.364608 2.764608 0.9489243
## 5-4 -2.2 -5.764608 1.364608 0.3365811
TukeyHSD(modelo, "Día")
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Tiempo ~ Lote + Día + Catalizador, data = datos)
##
## $Día
## diff lwr upr p adj
## 2-1 -1.0 -4.564608 2.564608 0.8936609
## 3-1 -1.2 -4.764608 2.364608 0.8166339
## 4-1 -1.6 -5.164608 1.964608 0.6212723
## 5-1 0.2 -3.364608 3.764608 0.9997349
## 3-2 -0.2 -3.764608 3.364608 0.9997349
## 4-2 -0.6 -4.164608 2.964608 0.9816047
## 5-2 1.2 -2.364608 4.764608 0.8166339
## 4-3 -0.4 -3.964608 3.164608 0.9960012
## 5-3 1.4 -2.164608 4.964608 0.7232162
## 5-4 1.8 -1.764608 5.364608 0.5188508
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
par( mfrow = c(2,2) )
plot(modelo, which=5)
plot(modelo, which=1)
plot(modelo, which=2)
plot(residuals(modelo) ~ Tiempo , main="Residuals vs corridas", font.main=1, xlab="Tiempo", ylab="Residuals")
abline(h = 0, lty = 2)
# Prueba de normalidad de Shapiro-Wilk
shapiro.test(modelo$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.96606, p-value = 0.5476
\[H_0:\sigma^2_A=\sigma^2_B=\sigma^2_C=\sigma^2_D=\sigma^2_E=\sigma^2\]
bartlett.test(modelo$residuals ~ Catalizador, data=datos)
##
## Bartlett test of homogeneity of variances
##
## data: modelo$residuals by Catalizador
## Bartlett's K-squared = 2.6529, df = 4, p-value = 0.6175
\[H_0:\sigma^2_{L_1}=\sigma^2_{L_2}=\sigma^2_{L_3}=\sigma^2_{L_3}=\sigma^2_{L_5}=\sigma^2\]
bartlett.test(modelo$residuals ~ Lote, data=datos)
##
## Bartlett test of homogeneity of variances
##
## data: modelo$residuals by Lote
## Bartlett's K-squared = 0.69132, df = 4, p-value = 0.9524
\[H_0:\sigma^2_{D_1}=\sigma^2_{D_2}=\sigma^2_{D_3}=\sigma^2_{D_3}=\sigma^2_{D_5}=\sigma^2\]
bartlett.test(modelo$residuals ~ Día, data=datos)
##
## Bartlett test of homogeneity of variances
##
## data: modelo$residuals by Día
## Bartlett's K-squared = 2.6163, df = 4, p-value = 0.6239
\[H_0:\sigma^2_A=\sigma^2_B=\sigma^2_C=\sigma^2_D=\sigma^2_E=\sigma^2\]
#Levene
library(car)
## Loading required package: carData
leveneTest(modelo$residuals ~ Catalizador, data=datos)
\[H_0:\sigma^2_{L_1}=\sigma^2_{L_2}=\sigma^2_{L_3}=\sigma^2_{L_3}=\sigma^2_{L_5}=\sigma^2\]
#Levene
library(car)
leveneTest(modelo$residuals ~ Lote, data=datos)
\[H_0:\sigma^2_{D_1}=\sigma^2_{D_2}=\sigma^2_{D_3}=\sigma^2_{D_3}=\sigma^2_{D_5}=\sigma^2\]
#Levene
library(car)
leveneTest(modelo$residuals ~ Día, data=datos)
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊
Tabla 6. Diseño en cuadro grecolatino
(Operador) | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | Aα=24 | Bγ=20 | Cε=19 | Dβ=24 | Eδ=24 |
2 | Bβ=17 | Cδ=24 | Dα=30 | Eγ=27 | Aε=36 |
3 | Cγ=18 | Dε=38 | Eβ=26 | Aδ=27 | Bα=21 |
4 | Dδ=26 | Eα=31 | Aγ=26 | Bε=23 | Cβ=22 |
5 | Eε=22 | Aβ=30 | Bδ=20 | Cα=29 | Dγ=31 |
📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊
🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
H0: Las formulaciones no tienen efecto sobre la rápidez de combustion.
H1: Al menos una formulación tiene efecto sobre la rápidez de combustion.
H0: \(\mu_A = \mu_B = \mu_C = \mu_D = \mu_E\)
H1: Al menos una formulación tiene efecto sobre la rápidez de combustion.
H0: Los lotes no tienen efecto sobre la rápidez de combustion.
H1: Al menos un lote tiene efecto la rápidez de combustion.
H0: Los operadores no tienen efecto sobre la rápidez de combustion..
H1: Al menos un operador tiene efecto sobre la rápidez de combustion.
H0: Los Montajes no tienen efecto sobre la rápidez de combustion..
H1: Al menos un Montajes tiene efecto sobre la rápidez de combustion.
📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊
🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
# Datos rapidez de combustion
Lote = factor(rep(1:5, each=5))
Operador = factor(rep(1:5, times=5))
Montaje = factor(c("α","γ","ε","β","δ",
"β","δ","α","γ","ε",
"γ","ε","β","δ","α",
"δ","α","γ","ε","β",
"ε","β","δ","α","γ"))
Formulación = factor(c("A","B","C","D","E",
"B","C","D","E","A",
"C","D","E","A","B",
"D","E","A","B","C",
"E","A","B","C","D"))
Rapidez = c(24,20,19,24,24,
17,24,30,27,36,
18,38,26,27,21,
26,31,26,23,22,
22,30,20,29,31)
datos2 = data.frame(Lote, Operador, Montaje, Formulación, Rapidez)
datos2
🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
# Análisis de varianza
modelo2 = aov(Rapidez ~ Formulación + Montaje + Operador + Lote, data=datos2)
summary(modelo2)
## Df Sum Sq Mean Sq F value Pr(>F)
## Formulación 4 330 82.50 10.000 0.00334 **
## Montaje 4 62 15.50 1.879 0.20764
## Operador 4 150 37.50 4.545 0.03293 *
## Lote 4 68 17.00 2.061 0.17831
## Residuals 8 66 8.25
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
El valor p del catalizador es 0.0005, por lo que se rechaza la hipótesis nula y se concluye que al menos un catalizador tiene efecto sobre el tiempo de reacción.
El valor p del lote es 0.3476, por lo que no se rechaza la hipótesis nula y se concluye que no evidencia en la muestra de que los lotes tengan efecto sobre el tiempo de reacción.
El valor p del lote es 0.455, por lo que no se rechaza la hipótesis nula y se concluye que no evidencia en la muestra de el Día tengan efecto sobre el tiempo de reacción.
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
# Boxplot para Catalizador con colores
boxplot(Rapidez ~ Formulación, data=datos2, main="Boxplot de Rapidez por Formulación", xlab="Formulación", ylab="Rapidez", col=c("red2", "blue2", "yellow2", "orange2","green2"))
# Boxplot para Catalizador con colores
boxplot(Rapidez ~ Montaje, data=datos2, main="Boxplot de Tiempo por Montaje", xlab="Montaje", ylab="Rapidez", col=c("red2", "blue2", "yellow2", "orange2","green2"))
Rapidez ~ Formulación + Montaje + Operador + Lote
# Boxplot para Catalizador con colores
boxplot(Rapidez ~ Operador, data=datos2, main="Boxplot de Rapidez por Operador", xlab="Rapidez", ylab="Rapidez", col=c("red2", "blue2", "yellow2", "orange2","green2"))
# Boxplot para Catalizador con colores
boxplot(Rapidez ~ Lote, data=datos2, main="Boxplot de Rapidez por Lote", xlab="Lote", ylab="Rapidez", col=c("red2", "blue2", "yellow2", "orange2","green2"))
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
TukeyHSD(modelo2, "Formulación")
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Rapidez ~ Formulación + Montaje + Operador + Lote, data = datos2)
##
## $Formulación
## diff lwr upr p adj
## B-A -8.4 -14.675865 -2.12413503 0.0107829
## C-A -6.2 -12.475865 0.07586497 0.0529245
## D-A 1.2 -5.075865 7.47586497 0.9596565
## E-A -2.6 -8.875865 3.67586497 0.6270350
## C-B 2.2 -4.075865 8.47586497 0.7462701
## D-B 9.6 3.324135 15.87586497 0.0048412
## E-B 5.8 -0.475865 12.07586497 0.0714956
## D-C 7.4 1.124135 13.67586497 0.0218416
## E-C 3.6 -2.675865 9.87586497 0.3525524
## E-D -3.8 -10.075865 2.47586497 0.3087315
TukeyHSD(modelo2, "Montaje")
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Rapidez ~ Formulación + Montaje + Operador + Lote, data = datos2)
##
## $Montaje
## diff lwr upr p adj
## β-α -3.2 -9.475865 3.075865 0.4528137
## γ-α -2.6 -8.875865 3.675865 0.6270350
## δ-α -2.8 -9.075865 3.475865 0.5669444
## ε-α 0.6 -5.675865 6.875865 0.9968743
## γ-β 0.6 -5.675865 6.875865 0.9968743
## δ-β 0.4 -5.875865 6.675865 0.9993563
## ε-β 3.8 -2.475865 10.075865 0.3087315
## δ-γ -0.2 -6.475865 6.075865 0.9999587
## ε-γ 3.2 -3.075865 9.475865 0.4528137
## ε-δ 3.4 -2.875865 9.675865 0.4006635
TukeyHSD(modelo2, "Operador")
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Rapidez ~ Formulación + Montaje + Operador + Lote, data = datos2)
##
## $Operador
## diff lwr upr p adj
## 2-1 7.2 0.924135 13.475865 0.0252496
## 3-1 2.8 -3.475865 9.075865 0.5669444
## 4-1 4.6 -1.675865 10.875865 0.1753581
## 5-1 5.4 -0.875865 11.675865 0.0966410
## 3-2 -4.4 -10.675865 1.875865 0.2028079
## 4-2 -2.6 -8.875865 3.675865 0.6270350
## 5-2 -1.8 -8.075865 4.475865 0.8524755
## 4-3 1.8 -4.475865 8.075865 0.8524755
## 5-3 2.6 -3.675865 8.875865 0.6270350
## 5-4 0.8 -5.475865 7.075865 0.9906712
TukeyHSD(modelo2, "Lote")
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Rapidez ~ Formulación + Montaje + Operador + Lote, data = datos2)
##
## $Lote
## diff lwr upr p adj
## 2-1 4.6 -1.675865 10.875865 0.1753581
## 3-1 3.8 -2.475865 10.075865 0.3087315
## 4-1 3.4 -2.875865 9.675865 0.4006635
## 5-1 4.2 -2.075865 10.475865 0.2340133
## 3-2 -0.8 -7.075865 5.475865 0.9906712
## 4-2 -1.2 -7.475865 5.075865 0.9596565
## 5-2 -0.4 -6.675865 5.875865 0.9993563
## 4-3 -0.4 -6.675865 5.875865 0.9993563
## 5-3 0.4 -5.875865 6.675865 0.9993563
## 5-4 0.8 -5.475865 7.075865 0.9906712
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
par( mfrow = c(2,2) )
plot(modelo, which=5)
plot(modelo, which=1)
plot(modelo, which=2)
plot(residuals(modelo2) ~ Rapidez , main="Residuals vs corridas", font.main=1, xlab="Tiempo", ylab="Residuals")
abline(h = 0, lty = 2)
# Prueba de normalidad de Shapiro-Wilk
shapiro.test(modelo2$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo2$residuals
## W = 0.97967, p-value = 0.8786
\[H_0:\sigma^2_A=\sigma^2_B=\sigma^2_C=\sigma^2_D=\sigma^2_E=\sigma^2\]
bartlett.test(modelo2$residuals ~ Formulación, data=datos2)
##
## Bartlett test of homogeneity of variances
##
## data: modelo2$residuals by Formulación
## Bartlett's K-squared = 0.31314, df = 4, p-value = 0.989
Rapidez ~ Formulación + Montaje + Operador + Lote ### 2. Montaje - Bartlett
\[H_0:\sigma^2_{L_1}=\sigma^2_{L_2}=\sigma^2_{L_3}=\sigma^2_{L_3}=\sigma^2_{L_5}=\sigma^2\]
bartlett.test(modelo2$residuals ~ Montaje, data=datos2)
##
## Bartlett test of homogeneity of variances
##
## data: modelo2$residuals by Montaje
## Bartlett's K-squared = 7.4545, df = 4, p-value = 0.1137
\[H_0:\sigma^2_{L_1}=\sigma^2_{L_2}=\sigma^2_{L_3}=\sigma^2_{L_3}=\sigma^2_{L_5}=\sigma^2\]
bartlett.test(modelo2$residuals ~ Operador, data=datos2)
##
## Bartlett test of homogeneity of variances
##
## data: modelo2$residuals by Operador
## Bartlett's K-squared = 0.33032, df = 4, p-value = 0.9878
\[H_0:\sigma^2_{L_1}=\sigma^2_{L_2}=\sigma^2_{L_3}=\sigma^2_{L_3}=\sigma^2_{L_5}=\sigma^2\]
bartlett.test(modelo2$residuals ~ Lote, data=datos2)
##
## Bartlett test of homogeneity of variances
##
## data: modelo2$residuals by Lote
## Bartlett's K-squared = 5.7344, df = 4, p-value = 0.2199
\[H_0:\sigma^2_A=\sigma^2_B=\sigma^2_C=\sigma^2_D=\sigma^2_E=\sigma^2\]
#Levene
library(car)
leveneTest(modelo2$residuals ~ Formulación, data=datos2)
\[H_0:\sigma^2_A=\sigma^2_B=\sigma^2_C=\sigma^2_D=\sigma^2_E=\sigma^2\]
#Levene
library(car)
leveneTest(modelo2$residuals ~ Montaje, data=datos2)
\[H_0:\sigma^2_A=\sigma^2_B=\sigma^2_C=\sigma^2_D=\sigma^2_E=\sigma^2\]
#Levene
library(car)
leveneTest(modelo2$residuals ~ Operador, data=datos2)
Rapidez ~ Formulación + Montaje + Operador + Lote ### 4. Lote - Levene
\[H_0:\sigma^2_A=\sigma^2_B=\sigma^2_C=\sigma^2_D=\sigma^2_E=\sigma^2\]
#Levene
library(car)
leveneTest(modelo2$residuals ~ Lote, data=datos2)
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
Temperatura | Presión | Tiempo | Rendimiento |
---|---|---|---|
100 | 400 | 30 | 34 |
100 | 400 | 30 | 33 |
100 | 400 | 30 | 33 |
100 | 450 | 30 | 32 |
100 | 450 | 30 | 32 |
100 | 450 | 30 | 33 |
100 | 400 | 35 | 27 |
100 | 400 | 35 | 29 |
100 | 400 | 35 | 28 |
100 | 450 | 35 | 28 |
100 | 450 | 35 | 28 |
100 | 450 | 35 | 27 |
120 | 400 | 30 | 32 |
120 | 400 | 30 | 34 |
120 | 400 | 30 | 34 |
120 | 450 | 30 | 32 |
120 | 450 | 30 | 33 |
120 | 450 | 30 | 32 |
120 | 400 | 35 | 26 |
120 | 400 | 35 | 28 |
120 | 400 | 35 | 29 |
120 | 450 | 35 | 30 |
120 | 450 | 35 | 25 |
120 | 450 | 35 | 27 |
140 | 400 | 30 | 36 |
140 | 400 | 30 | 36 |
140 | 400 | 30 | 37 |
140 | 450 | 30 | 34 |
140 | 450 | 30 | 34 |
140 | 450 | 30 | 34 |
140 | 400 | 35 | 29 |
140 | 400 | 35 | 29 |
140 | 400 | 35 | 30 |
140 | 450 | 35 | 27 |
140 | 450 | 35 | 28 |
140 | 450 | 35 | 29 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊
🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
H0: Las Temperaturas no tienen efecto sobre el Rendimiento del proceso.
H1: Al menos una Temperaturas tiene efecto sobre el Rendimiento del proceso.
H0: Las Presiones no tienen efecto sobre el Rendimiento del proceso.
H1: Al menos una Presión tiene efecto sobre el Rendimiento del proceso.
H0: Las Tiempos no tienen efecto sobre el Rendimiento del proceso.
H1: Al menos una Tiempo tiene efecto sobre el Rendimiento del proceso.
H0: Las combinaciones de Temperatura vs Tiempo no tienen efecto sobre el Rendimiento del proceso.
H1: Al menos una combinacion de Temperatura vs Tiempo tiene efecto sobre el Rendimiento del proceso.
H0: Las combinaciones de Temperatura vs Presión no tienen efecto sobre el Rendimiento del proceso.
H1: Al menos una combinacion de Temperatura vs Presión tiene efecto sobre el Rendimiento del proceso.
H0: Las combinaciones de Tiempo vs Presión no tienen efecto sobre el Rendimiento del proceso.
H1: Al menos una combinacion de Tiempo vs Presión tiene efecto sobre el Rendimiento del proceso.
H0: Las combinaciones de Temperatura vs Tiempo vs Presión no tienen efecto sobre el Rendimiento del proceso.
H1: Al menos una combinacion de Temperatura vs Tiempo vs Presión tiene efecto sobre el Rendimiento del proceso.
📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊📊
🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
# Datos Rendimiento
datos3 = data.frame(
Temperatura = factor(rep(c(100, 120, 140), each=12)),
Presión = factor(rep(rep(c(400, 450), each=6), times=3)),
Tiempo = factor(rep(c(30, 35), each=3, times=6)),
Rendimiento = c(34, 33, 33, 32, 32, 33, 27, 29, 28, 28, 28, 27,
32, 34, 34, 32, 33, 32, 26, 28, 29, 30, 25, 27,
36, 36, 37, 34, 34, 34, 29, 29, 30, 27, 28, 29)
)
datos3
🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯🎯
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
Temperatura Presión Tiempo Rendimiento
# Análisis de varianza
modelo3 = aov(Rendimiento ~ Temperatura * Presión * Tiempo, data=datos3)
summary(modelo3)
## Df Sum Sq Mean Sq F value Pr(>F)
## Temperatura 2 22.39 11.19 9.595 0.000867 ***
## Presión 1 283.36 283.36 242.881 4.71e-14 ***
## Tiempo 1 10.03 10.03 8.595 0.007294 **
## Temperatura:Presión 2 3.72 1.86 1.595 0.223632
## Temperatura:Tiempo 2 2.72 1.36 1.167 0.328447
## Presión:Tiempo 1 1.36 1.36 1.167 0.290823
## Temperatura:Presión:Tiempo 2 0.06 0.03 0.024 0.976495
## Residuals 24 28.00 1.17
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Interpretación del ANOVA
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:car':
##
## recode
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
anova_results <- summary(modelo3)[[1]] %>%
as.data.frame() %>%
mutate(Significant = ifelse(`Pr(>F)` < 0.05, "Yes", "No"))
anova_results
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
# Boxplot para Catalizador con colores
boxplot(Rendimiento ~ Presión, data=datos3, main="Boxplot de Rendimiento por Presión", xlab="Presión", ylab="Rapidez", col=c("red2", "blue2", "yellow2", "orange2","green2"))
# Boxplot para Catalizador con colores
boxplot(Rendimiento ~ Temperatura, data=datos3, main="Boxplot de Rendimiento por Temperatura", xlab="Temperatura", ylab="Rapidez", col=c("red2", "blue2", "yellow2", "orange2","green2"))
# Boxplot para Catalizador con colores
boxplot(Rendimiento ~ Tiempo, data=datos3, main="Boxplot de Rendimiento por Tiempo", xlab="Tiempo", ylab="Rapidez", col=c("red2", "blue2", "yellow2", "orange2","green2"))
# 6. Boxplot para los Factores
Interacciones Dobles
# Boxplot bivariante para Temperatura y Presión
boxplot(Rendimiento ~ Temperatura + Presión, data=datos3, main="Boxplot de Rendimiento por Temperatura y Presión", xlab="Temperatura y Presión", ylab="Rendimiento", col=c("red2", "blue2", "yellow2", "orange2","green2"))
## B. Boxplot para Temperatura *
Tiempo
# Boxplot bivariante para Temperatura y Tiempo
boxplot(Rendimiento ~ Temperatura + Tiempo, data=datos3, main="Boxplot de Rendimiento por Temperatura y Tiempo", xlab="Temperatura y Tiempo", ylab="Rendimiento", col=c("red2", "blue2", "yellow2", "orange2","green2"))
## C. Boxplot para Presión *
Tiempo
# Boxplot bivariante para Presión y Tiempo
boxplot(Rendimiento ~ Presión + Tiempo, data=datos3, main="Boxplot de Rendimiento por Presión y Tiempo", xlab="Presión y Tiempo", ylab="Rendimiento", col=c("red2", "blue2", "yellow2", "orange2","green2"))
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
TukeyHSD(modelo3, "Temperatura")
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Rendimiento ~ Temperatura * Presión * Tiempo, data = datos3)
##
## $Temperatura
## diff lwr upr p adj
## 120-100 -0.1666667 -1.2678668 0.9345334 0.9245219
## 140-100 1.5833333 0.4821332 2.6845334 0.0040499
## 140-120 1.7500000 0.6487999 2.8512001 0.0015949
TukeyHSD(modelo3, "Presión")
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Rendimiento ~ Temperatura * Presión * Tiempo, data = datos3)
##
## $Presión
## diff lwr upr p adj
## 450-400 -5.611111 -6.354199 -4.868023 0
TukeyHSD(modelo3, "Tiempo")
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Rendimiento ~ Temperatura * Presión * Tiempo, data = datos3)
##
## $Tiempo
## diff lwr upr p adj
## 35-30 -1.055556 -1.798644 -0.3124672 0.0072938
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
# grafico de interacción Temperatura * Presión
interaction.plot(datos3$Temperatura, datos3$Presión, datos3$Rendimiento, col=c("red2", "blue2", "yellow2", "orange2","green2"), main="Interacción entre Temperatura y Presión", xlab="Temperatura", ylab="Rendimiento")
# grafico de interacción Temperatura * Tiempo
interaction.plot(datos3$Temperatura, datos3$Tiempo, datos3$Rendimiento, col=c("red2", "blue2", "yellow2", "orange2","green2"), main="Interacción entre Temperatura y Tiempo", xlab="Temperatura", ylab="Rendimiento")
# grafico de interacción Presión * Tiempo
interaction.plot(datos3$Presión, datos3$Tiempo, datos3$Rendimiento, col=c("red2", "blue2", "yellow2", "orange2","green2"), main="Interacción entre Presión y Tiempo", xlab="Presión", ylab="Rendimiento")
# grafico de medias HSD Temperatura
plot(TukeyHSD(modelo3, "Temperatura"), col="blue")
# grafico de medias HSD Presión
plot(TukeyHSD(modelo3, "Presión"), col="blue")
# grafico de medias HSD Tiempo
plot(TukeyHSD(modelo3, "Tiempo"), col="blue")
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
# supuestos del modelo
par(mfrow=c(2,2))
plot(modelo3)
# Prueba de normalidad de Shapiro-Wilk
shapiro.test(modelo3$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo3$residuals
## W = 0.94271, p-value = 0.0617
\[H_0:\sigma^2_A=\sigma^2_B=\sigma^2_C=\sigma^2_D=\sigma^2_E=\sigma^2\]
bartlett.test(modelo3$residuals ~ Temperatura, data=datos3)
##
## Bartlett test of homogeneity of variances
##
## data: modelo3$residuals by Temperatura
## Bartlett's K-squared = 11.44, df = 2, p-value = 0.00328
\[H_0:\sigma^2_{L_1}=\sigma^2_{L_2}=\sigma^2_{L_3}=\sigma^2_{L_3}=\sigma^2_{L_5}=\sigma^2\]
bartlett.test(modelo3$residuals ~ Presión, data=datos3)
##
## Bartlett test of homogeneity of variances
##
## data: modelo3$residuals by Presión
## Bartlett's K-squared = 7.9804, df = 1, p-value = 0.004729
\[H_0:\sigma^2_{L_1}=\sigma^2_{L_2}=\sigma^2_{L_3}=\sigma^2_{L_3}=\sigma^2_{L_5}=\sigma^2\]
bartlett.test(modelo3$residuals ~ Tiempo, data=datos3)
##
## Bartlett test of homogeneity of variances
##
## data: modelo3$residuals by Tiempo
## Bartlett's K-squared = 0.6103, df = 1, p-value = 0.4347
\[H_0:\sigma^2_A=\sigma^2_B=\sigma^2_C=\sigma^2_D=\sigma^2_E=\sigma^2\]
#Levene
library(car)
leveneTest(modelo3$residuals ~ Temperatura, data=datos3)
\[H_0:\sigma^2_A=\sigma^2_B=\sigma^2_C=\sigma^2_D=\sigma^2_E=\sigma^2\]
#Levene
library(car)
leveneTest(modelo3$residuals ~ Presión, data=datos3)
\[H_0:\sigma^2_A=\sigma^2_B=\sigma^2_C=\sigma^2_D=\sigma^2_E=\sigma^2\]
#Levene
library(car)
leveneTest(modelo3$residuals ~ Tiempo, data=datos3)
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
# Supongamos que tenemos un vector “Y” con los rendimientos de las 32 corridas,
# en el orden de la tabla de Yates (orden lexicográfico de factores codificados -1/1).
Y <- c(7, 9, 34, 55, 16, 20, 41, 60,
8, 10, 32, 50, 18, 21, 44, 61,
8, 12, 35, 52, 15, 22, 45, 65,
6, 10, 30, 53, 15, 20, 41, 63)
# Creamos los factores codificados
# expand.grid genera todas las combinaciones
df <- expand.grid(
A = c(-1, 1),
B = c(-1, 1),
C = c(-1, 1),
D = c(-1, 1),
E = c(-1, 1)
)
# Ordenar correctamente al estilo de Yates si es necesario
# (dependiendo del orden en que definiste Y)
# Luego añadir la variable de respuesta
df$rendimiento <- Y
# Revisar
str(df)
## 'data.frame': 32 obs. of 6 variables:
## $ A : num -1 1 -1 1 -1 1 -1 1 -1 1 ...
## $ B : num -1 -1 1 1 -1 -1 1 1 -1 -1 ...
## $ C : num -1 -1 -1 -1 1 1 1 1 -1 -1 ...
## $ D : num -1 -1 -1 -1 -1 -1 -1 -1 1 1 ...
## $ E : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ rendimiento: num 7 9 34 55 16 20 41 60 8 10 ...
## - attr(*, "out.attrs")=List of 2
## ..$ dim : Named int [1:5] 2 2 2 2 2
## .. ..- attr(*, "names")= chr [1:5] "A" "B" "C" "D" ...
## ..$ dimnames:List of 5
## .. ..$ A: chr [1:2] "A=-1" "A= 1"
## .. ..$ B: chr [1:2] "B=-1" "B= 1"
## .. ..$ C: chr [1:2] "C=-1" "C= 1"
## .. ..$ D: chr [1:2] "D=-1" "D= 1"
## .. ..$ E: chr [1:2] "E=-1" "E= 1"
head(df)
# Ver el data.frame completo
print(df)
## A B C D E rendimiento
## 1 -1 -1 -1 -1 -1 7
## 2 1 -1 -1 -1 -1 9
## 3 -1 1 -1 -1 -1 34
## 4 1 1 -1 -1 -1 55
## 5 -1 -1 1 -1 -1 16
## 6 1 -1 1 -1 -1 20
## 7 -1 1 1 -1 -1 41
## 8 1 1 1 -1 -1 60
## 9 -1 -1 -1 1 -1 8
## 10 1 -1 -1 1 -1 10
## 11 -1 1 -1 1 -1 32
## 12 1 1 -1 1 -1 50
## 13 -1 -1 1 1 -1 18
## 14 1 -1 1 1 -1 21
## 15 -1 1 1 1 -1 44
## 16 1 1 1 1 -1 61
## 17 -1 -1 -1 -1 1 8
## 18 1 -1 -1 -1 1 12
## 19 -1 1 -1 -1 1 35
## 20 1 1 -1 -1 1 52
## 21 -1 -1 1 -1 1 15
## 22 1 -1 1 -1 1 22
## 23 -1 1 1 -1 1 45
## 24 1 1 1 -1 1 65
## 25 -1 -1 -1 1 1 6
## 26 1 -1 -1 1 1 10
## 27 -1 1 -1 1 1 30
## 28 1 1 -1 1 1 53
## 29 -1 -1 1 1 1 15
## 30 1 -1 1 1 1 20
## 31 -1 1 1 1 1 41
## 32 1 1 1 1 1 63
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
# Boxplot para cada factor
par(mfrow=c(2,3)) # Para ver varios gráficos juntos
boxplot(rendimiento ~ A, data=df, main="Boxplot de A", col=c("lightblue", "lightgreen"))
boxplot(rendimiento ~ B, data=df, main="Boxplot de B", col=c("lightblue", "lightgreen"))
boxplot(rendimiento ~ C, data=df, main="Boxplot de C", col=c("lightblue", "lightgreen"))
boxplot(rendimiento ~ D, data=df, main="Boxplot de D", col=c("lightblue", "lightgreen"))
boxplot(rendimiento ~ E, data=df, main="Boxplot de E", col=c("lightblue", "lightgreen"))
par(mfrow=c(1,1)) # Volver a un solo gráfico
# Boxplot para interacciones dobles
par(mfrow=c(2,3)) # Para ver varios gráficos juntos
boxplot(rendimiento ~ A + B, data=df, main="Boxplot de A*B", col=c("lightblue", "lightgreen"))
boxplot(rendimiento ~ A + C, data=df, main="Boxplot de A*C", col=c("lightblue", "lightgreen"))
boxplot(rendimiento ~ A + D, data=df, main="Boxplot de A*D", col=c("lightblue", "lightgreen"))
boxplot(rendimiento ~ A + E, data=df, main="Boxplot de A*E", col=c("lightblue", "lightgreen"))
boxplot(rendimiento ~ B + C, data=df, main="Boxplot de B*C", col=c("lightblue", "lightgreen"))
par(mfrow=c(1,1)) # Volver a un solo gráfico
# Efectos principales
library(dplyr)
efectos <- df %>%
summarise(
efecto_A = mean(rendimiento[A == 1]) - mean(rendimiento[A == -1]),
efecto_B = mean(rendimiento[B == 1]) - mean(rendimiento[B == -1]),
efecto_C = mean(rendimiento[C == 1]) - mean(rendimiento[C == -1]),
efecto_D = mean(rendimiento[D == 1]) - mean(rendimiento[D == -1]),
efecto_E = mean(rendimiento[E == 1]) - mean(rendimiento[E == -1])
)
print(efectos)
## efecto_A efecto_B efecto_C efecto_D efecto_E
## 1 11.75 34 9.75 -0.875 0.375
# Efectos de interacción dobles
interacciones <- df %>%
summarise(
efecto_AB = mean(rendimiento[A == 1 & B == 1]) - mean(rendimiento[A == 1 & B == -1]) -
(mean(rendimiento[A == -1 & B == 1]) - mean(rendimiento[A == -1 & B == -1])),
efecto_AC = mean(rendimiento[A == 1 & C == 1]) - mean(rendimiento[A == 1 & C == -1]) -
(mean(rendimiento[A == -1 & C == 1]) - mean(rendimiento[A == -1 & C == -1])),
efecto_AD = mean(rendimiento[A == 1 & D == 1]) - mean(rendimiento[A == 1 & D == -1]) -
(mean(rendimiento[A == -1 & D == 1]) - mean(rendimiento[A == -1 & D == -1])),
efecto_AE = mean(rendimiento[A == 1 & E == 1]) - mean(rendimiento[A == 1 & E == -1]) -
(mean(rendimiento[A == -1 & E == 1]) - mean(rendimiento[A == -1 & E == -1])),
efecto_BC = mean(rendimiento[B == 1 & C == 1]) - mean(rendimiento[B == 1 & C == -1]) -
(mean(rendimiento[B == -1 & C == 1]) - mean(rendimiento[B == -1 & C == -1]))
)
print(interacciones)
## efecto_AB efecto_AC efecto_AD efecto_AE efecto_BC
## 1 15.75 0.75 0 2 0.25
# Análisis de varianza
modelo_full <- aov(rendimiento ~ (A + B + C + D + E)^2, data=df)
summary(modelo_full)
## Df Sum Sq Mean Sq F value Pr(>F)
## A 1 1104 1104 482.512 2.24e-13 ***
## B 1 9248 9248 4040.082 < 2e-16 ***
## C 1 761 761 332.232 3.98e-12 ***
## D 1 6 6 2.676 0.1214
## E 1 1 1 0.491 0.4933
## A:B 1 496 496 216.737 1.01e-10 ***
## A:C 1 1 1 0.491 0.4933
## A:D 1 0 0 0.000 1.0000
## A:E 1 8 8 3.495 0.0800 .
## B:C 1 0 0 0.055 0.8182
## B:D 1 5 5 1.966 0.1800
## B:E 1 2 2 0.874 0.3638
## C:D 1 4 4 1.966 0.1800
## C:E 1 0 0 0.218 0.6465
## D:E 1 10 10 4.423 0.0516 .
## Residuals 16 37 2
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# grafico de medias HSD
# Grafico de medias HSD
install.packages("agricolae")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
library(agricolae)
hsd <- HSD.test(modelo_full, "A", group = TRUE)
plot(hsd, main = "HSD para A")
hsd <- HSD.test(modelo_full, "B", group = TRUE)
plot(hsd, main = "HSD para B")
hsd <- HSD.test(modelo_full, "C", group = TRUE)
plot(hsd, main = "HSD para C")
hsd <- HSD.test(modelo_full, "D", group = TRUE)
plot(hsd, main = "HSD para D")
hsd <- HSD.test(modelo_full, "E", group = TRUE)
plot(hsd, main = "HSD para E")
# Identificar el mejor tratamiento
best_treatment <- df[which.max(df$rendimiento), ]
print(best_treatment)
## A B C D E rendimiento
## 24 1 1 1 -1 1 65
# Prueba de normalidad de Shapiro-Wilk
shapiro.test(modelo_full$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo_full$residuals
## W = 0.96465, p-value = 0.366
# Vector de rendimientos (orden Yates)
Y <- c(7, 9, 34, 55, 16, 20, 41, 60,
8, 10, 32, 50, 18, 21, 44, 61,
8, 12, 35, 52, 15, 22, 45, 65,
6, 10, 30, 53, 15, 20, 41, 63)
# Crear los factores codificados
df <- expand.grid(
A = c(-1, 1),
B = c(-1, 1),
C = c(-1, 1),
D = c(-1, 1),
E = c(-1, 1)
)
# Añadir la respuesta
df$rendimiento <- Y
# Verificación
head(df)
# -----------------------------------------
# Gráfico de efectos principales (versión base R)
# -----------------------------------------
# Calcular medias por nivel de cada factor
mediaA <- tapply(df$rendimiento, df$A, mean)
mediaB <- tapply(df$rendimiento, df$B, mean)
mediaC <- tapply(df$rendimiento, df$C, mean)
mediaD <- tapply(df$rendimiento, df$D, mean)
mediaE <- tapply(df$rendimiento, df$E, mean)
# Crear el gráfico
par(mfrow = c(1, 5), bg = "gray90", mar = c(4, 4, 3, 1))
plot(c(-1, 1), mediaA, type = "b", col = "blue", lwd = 2,
xaxt = "n", xlab = "A", ylab = "Rendimiento",
main = "A")
axis(1, at = c(-1, 1), labels = c("Bajo", "Alto"))
plot(c(-1, 1), mediaB, type = "b", col = "blue", lwd = 2,
xaxt = "n", xlab = "B", ylab = "", main = "B")
axis(1, at = c(-1, 1), labels = c("Bajo", "Alto"))
plot(c(-1, 1), mediaC, type = "b", col = "blue", lwd = 2,
xaxt = "n", xlab = "C", ylab = "", main = "C")
axis(1, at = c(-1, 1), labels = c("Bajo", "Alto"))
plot(c(-1, 1), mediaD, type = "b", col = "blue", lwd = 2,
xaxt = "n", xlab = "D", ylab = "", main = "D")
axis(1, at = c(-1, 1), labels = c("Bajo", "Alto"))
plot(c(-1, 1), mediaE, type = "b", col = "blue", lwd = 2,
xaxt = "n", xlab = "E", ylab = "", main = "E")
axis(1, at = c(-1, 1), labels = c("Bajo", "Alto"))
title("Gráfica de Efectos Principales para Rendimiento", outer = TRUE)
par(mfrow = c(1, 1)) # Resetear la disposición de gráficos
# en un mismo plano las figuras de efevtos principales
library(ggplot2)
install.packages("reshape2")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
library(reshape2)
# Transformar los datos para ggplot
df_melt <- melt(df, id.vars = "rendimiento")
# Calcular medias
medias <- aggregate(rendimiento ~ variable + value, data = df_melt, mean)
# Graficar
ggplot(medias, aes(x = value, y = rendimiento, group = variable, color = variable)) +
geom_line() +
geom_point() +
facet_wrap(~ variable, scales = "free_x") +
labs(title = "Gráfica de Efectos Principales para Rendimiento",
x = "Nivel del Factor", y = "Rendimiento") +
theme_minimal()
# corrige el codigo anterior
# Gráfica de efectos principales usando ggplot2
library(ggplot2)
library(reshape2)
# Transformar los datos para ggplot
df_melt <- melt(df, id.vars = "rendimiento")
# Calcular medias
medias <- aggregate(rendimiento ~ variable + value, data = df_melt, mean)
# Graficar
ggplot(medias, aes(x = value, y = rendimiento, group = variable, color = variable)) +
geom_line() +
geom_point() +
facet_wrap(~ variable, scales = "free_x") +
labs(title = "Gráfica de Efectos Principales para Rendimiento",
x = "Nivel del Factor", y = "Rendimiento") +
theme_minimal()
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
# Instalar y cargar el paquete FrF2 (solo si no está instalado)
if (!require(FrF2)) {
install.packages("FrF2")
library(FrF2)
}
## Loading required package: FrF2
## Loading required package: DoE.base
## Loading required package: grid
## Loading required package: conf.design
## Registered S3 method overwritten by 'DoE.base':
## method from
## factorize.factor conf.design
##
## Attaching package: 'DoE.base'
## The following objects are masked from 'package:stats':
##
## aov, lm
## The following object is masked from 'package:graphics':
##
## plot.design
## The following object is masked from 'package:base':
##
## lengths
# Cargar otros paquetes útiles
if (!require(ggplot2)) {
install.packages("ggplot2")
library(ggplot2)
}
# Datos de rendimiento
Y <- c(7, 9, 34, 55, 16, 20, 41, 60,
8, 10, 32, 50, 18, 21, 44, 61,
8, 12, 35, 52, 15, 22, 45, 65,
6, 10, 30, 53, 15, 20, 41, 63)
# Crear el diseño factorial usando FrF2
design <- FrF2(
nruns = 32,
nfactors = 5,
factor.names = list(
A = c("-1", "1"),
B = c("-1", "1"),
C = c("-1", "1"),
D = c("-1", "1"),
E = c("-1", "1")
),
randomize = FALSE
)
## creating full factorial with 32 runs ...
# VERIFICAR que el diseño coincide con tu orden de datos
print("Diseño factorial creado:")
## [1] "Diseño factorial creado:"
print(design)
## A B C D E
## 1 -1 -1 -1 -1 -1
## 2 1 -1 -1 -1 -1
## 3 -1 1 -1 -1 -1
## 4 1 1 -1 -1 -1
## 5 -1 -1 1 -1 -1
## 6 1 -1 1 -1 -1
## 7 -1 1 1 -1 -1
## 8 1 1 1 -1 -1
## 9 -1 -1 -1 1 -1
## 10 1 -1 -1 1 -1
## 11 -1 1 -1 1 -1
## 12 1 1 -1 1 -1
## 13 -1 -1 1 1 -1
## 14 1 -1 1 1 -1
## 15 -1 1 1 1 -1
## 16 1 1 1 1 -1
## 17 -1 -1 -1 -1 1
## 18 1 -1 -1 -1 1
## 19 -1 1 -1 -1 1
## 20 1 1 -1 -1 1
## 21 -1 -1 1 -1 1
## 22 1 -1 1 -1 1
## 23 -1 1 1 -1 1
## 24 1 1 1 -1 1
## 25 -1 -1 -1 1 1
## 26 1 -1 -1 1 1
## 27 -1 1 -1 1 1
## 28 1 1 -1 1 1
## 29 -1 -1 1 1 1
## 30 1 -1 1 1 1
## 31 -1 1 1 1 1
## 32 1 1 1 1 1
## class=design, type= full factorial
# AGREGAR la variable de respuesta al diseño
design$Y <- Y
# Verificar que se agregó correctamente
print("Diseño con variable de respuesta:")
## [1] "Diseño con variable de respuesta:"
print(response.names(design))
## NULL
print(head(design))
## A B C D E Y
## 1 -1 -1 -1 -1 -1 7
## 2 1 -1 -1 -1 -1 9
## 3 -1 1 -1 -1 -1 34
## 4 1 1 -1 -1 -1 55
## 5 -1 -1 1 -1 -1 16
## 6 1 -1 1 -1 -1 20
# ANÁLISIS ESTADÍSTICO COMPLETO
cat("\n=== ANÁLISIS ESTADÍSTICO ===\n")
##
## === ANÁLISIS ESTADÍSTICO ===
# 1. Modelo lineal con interacciones
modelo <- lm(Y ~ (A + B + C + D + E)^2, data = design)
print("Resumen del modelo lineal:")
## [1] "Resumen del modelo lineal:"
print(summary(modelo))
##
## Call:
## lm.default(formula = Y ~ (A + B + C + D + E)^2, data = design)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.8125 -0.6250 0.1875 0.5000 2.9375
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.056e+01 2.675e-01 114.271 < 2e-16 ***
## A1 5.875e+00 2.675e-01 21.966 2.24e-13 ***
## B1 1.700e+01 2.675e-01 63.562 < 2e-16 ***
## C1 4.875e+00 2.675e-01 18.227 3.98e-12 ***
## D1 -4.375e-01 2.675e-01 -1.636 0.1214
## E1 1.875e-01 2.675e-01 0.701 0.4933
## A1:B1 3.937e+00 2.675e-01 14.722 1.01e-10 ***
## A1:C1 1.875e-01 2.675e-01 0.701 0.4933
## A1:D1 -7.016e-16 2.675e-01 0.000 1.0000
## A1:E1 5.000e-01 2.675e-01 1.869 0.0800 .
## B1:C1 6.250e-02 2.675e-01 0.234 0.8182
## B1:D1 -3.750e-01 2.675e-01 -1.402 0.1800
## B1:E1 2.500e-01 2.675e-01 0.935 0.3638
## C1:D1 3.750e-01 2.675e-01 1.402 0.1800
## C1:E1 1.250e-01 2.675e-01 0.467 0.6465
## D1:E1 -5.625e-01 2.675e-01 -2.103 0.0516 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.513 on 16 degrees of freedom
## Multiple R-squared: 0.9969, Adjusted R-squared: 0.9939
## F-statistic: 339.2 on 15 and 16 DF, p-value: < 2.2e-16
# 2. ANOVA
cat("\n--- ANÁLISIS DE VARIANZA (ANOVA) ---\n")
##
## --- ANÁLISIS DE VARIANZA (ANOVA) ---
anova_result <- anova(modelo)
print(anova_result)
## Analysis of Variance Table
##
## Response: Y
## Df Sum Sq Mean Sq F value Pr(>F)
## A 1 1104.5 1104.5 482.5119 2.244e-13 ***
## B 1 9248.0 9248.0 4040.0819 < 2.2e-16 ***
## C 1 760.5 760.5 332.2321 3.983e-12 ***
## D 1 6.1 6.1 2.6758 0.12140
## E 1 1.1 1.1 0.4915 0.49334
## A:B 1 496.1 496.1 216.7372 1.011e-10 ***
## A:C 1 1.1 1.1 0.4915 0.49334
## A:D 1 0.0 0.0 0.0000 1.00000
## A:E 1 8.0 8.0 3.4949 0.07997 .
## B:C 1 0.1 0.1 0.0546 0.81820
## B:D 1 4.5 4.5 1.9659 0.17999
## B:E 1 2.0 2.0 0.8737 0.36382
## C:D 1 4.5 4.5 1.9659 0.17999
## C:E 1 0.5 0.5 0.2184 0.64654
## D:E 1 10.1 10.1 4.4232 0.05163 .
## Residuals 16 36.6 2.3
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Identificar efectos significativos
significativos <- which(anova_result$`Pr(>F)` < 0.05)
if (length(significativos) > 0) {
cat("\nEFECTOS SIGNIFICATIVOS (p < 0.05):\n")
print(rownames(anova_result)[significativos])
} else {
cat("\nNo se encontraron efectos significativos al nivel alpha = 0.05\n")
}
##
## EFECTOS SIGNIFICATIVOS (p < 0.05):
## [1] "A" "B" "C" "A:B"
# GRÁFICOS PRINCIPALES
cat("\n=== CREANDO GRÁFICOS ===\n")
##
## === CREANDO GRÁFICOS ===
# Configurar área de gráficos
par(mfrow = c(2, 2), mar = c(4, 4, 3, 1))
# 1. GRÁFICA DE INTERACCIONES (IAPlot) - ¡ESTA DEBERÍA FUNCIONAR AHORA!
tryCatch({
IAPlot(design,
response = "Y",
main = "Gráfica de Interacciones para Rendimiento",
cex.main = 0.9)
cat("✓ Gráfica de interacciones creada exitosamente\n")
}, error = function(e) {
cat("✗ Error en IAPlot:", e$message, "\n")
})
## ✗ Error en IAPlot: The design obj must have at least one response.
# 2. GRÁFICA DE EFECTOS PRINCIPALES
tryCatch({
MEPlot(design,
response = "Y",
main = "Efectos Principales del Rendimiento")
cat("✓ Gráfica de efectos principales creada exitosamente\n")
}, error = function(e) {
cat("✗ Error en MEPlot:", e$message, "\n")
})
## ✗ Error en MEPlot: The design obj must have at least one response.
# 3. GRÁFICA DE PROBABILIDAD NORMAL (Daniel Plot)
tryCatch({
DanielPlot(design,
response = "Y",
main = "Gráfica de Probabilidad Normal")
cat("✓ Gráfica de probabilidad normal creada exitosamente\n")
}, error = function(e) {
cat("✗ Error en DanielPlot:", e$message, "\n")
})
## ✗ Error en DanielPlot: The design fit must have at least one response.
# 4. GRÁFICO DE INTERACCIÓN ESPECÍFICO (A vs B)
tryCatch({
interaction.plot(design$A, design$B, design$Y,
main = "Interacción A vs B",
xlab = "Factor A",
ylab = "Rendimiento Y",
col = c("blue", "red"),
lwd = 2,
trace.label = "Factor B")
cat("✓ Gráfico de interacción A vs B creado exitosamente\n")
}, error = function(e) {
cat("✗ Error en interaction.plot:", e$message, "\n")
})
## ✓ Gráfico de interacción A vs B creado exitosamente
# Restaurar configuración gráfica
par(mfrow = c(1, 1))
# GRÁFICOS ALTERNATIVOS CON GGPLOT2
cat("\n=== GRÁFICOS ALTERNATIVOS CON GGPLOT2 ===\n")
##
## === GRÁFICOS ALTERNATIVOS CON GGPLOT2 ===
# Convertir a data frame para ggplot
design_df <- as.data.frame(design)
# 1. Boxplot de efectos principales
p1 <- ggplot(design_df, aes(x = A, y = Y)) +
geom_boxplot(fill = "lightblue", alpha = 0.7) +
stat_summary(fun = mean, geom = "point", shape = 18, size = 3, color = "red") +
labs(title = "Efecto del Factor A sobre el Rendimiento",
x = "Nivel del Factor A",
y = "Rendimiento") +
theme_minimal()
print(p1)
# 2. Gráfico de interacción A vs B
p2 <- ggplot(design_df, aes(x = A, y = Y, color = B, group = B)) +
stat_summary(fun = mean, geom = "line", size = 1) +
stat_summary(fun = mean, geom = "point", size = 3) +
labs(title = "Interacción entre Factor A y B",
x = "Factor A",
y = "Rendimiento Promedio",
color = "Factor B") +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
print(p2)
# ANÁLISIS ADICIONAL: EFECTOS ESTIMADOS
cat("\n=== EFECTOS ESTIMADOS ===\n")
##
## === EFECTOS ESTIMADOS ===
# Calcular efectos principales
efectos <- model.matrix(~ (A + B + C + D + E)^2, data = design)
coeficientes <- coef(modelo)
# Mostrar efectos principales ordenados
efectos_principales <- coeficientes[2:6]
names(efectos_principales) <- c("A", "B", "C", "D", "E")
cat("Efectos principales ordenados por magnitud:\n")
## Efectos principales ordenados por magnitud:
print(sort(abs(efectos_principales), decreasing = TRUE))
## B A C D E
## 17.0000 5.8750 4.8750 0.4375 0.1875
# RESUMEN FINAL
cat("\n=== RESUMEN DEL ANÁLISIS ===\n")
##
## === RESUMEN DEL ANÁLISIS ===
cat("Diseño: Factorial 2^5 con 32 corridas\n")
## Diseño: Factorial 2^5 con 32 corridas
cat("Variable respuesta: Rendimiento (Y)\n")
## Variable respuesta: Rendimiento (Y)
cat("Rango de rendimiento:", range(Y), "\n")
## Rango de rendimiento: 6 65
cat("Media del rendimiento:", round(mean(Y), 2), "\n")
## Media del rendimiento: 30.56
cat("Desviación estándar:", round(sd(Y), 2), "\n")
## Desviación estándar: 19.41
cat("Número de efectos significativos:", length(significativos), "\n")
## Número de efectos significativos: 4
# Guardar el diseño con los resultados si es necesario
# write.csv(design_df, "diseno_factorial_con_resultados.csv")
# Instalar y cargar paquetes necesarios
if (!require(FrF2)) {
install.packages("FrF2")
library(FrF2)
}
if (!require(ggplot2)) {
install.packages("ggplot2")
library(ggplot2)
}
if (!require(gridExtra)) {
install.packages("gridExtra")
library(gridExtra)
}
## Loading required package: gridExtra
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
# Datos de rendimiento
Y <- c(7, 9, 34, 55, 16, 20, 41, 60,
8, 10, 32, 50, 18, 21, 44, 61,
8, 12, 35, 52, 15, 22, 45, 65,
6, 10, 30, 53, 15, 20, 41, 63)
# Crear el diseño factorial
design <- FrF2(
nruns = 32,
nfactors = 5,
factor.names = list(
A = c("-1", "1"),
B = c("-1", "1"),
C = c("-1", "1"),
D = c("-1", "1"),
E = c("-1", "1")
),
randomize = FALSE
)
## creating full factorial with 32 runs ...
# Agregar la variable de respuesta
design$Y <- Y
# Convertir a data frame para ggplot
design_df <- as.data.frame(design)
# MÉTODO 1: GRÁFICAS DE INTERACCIÓN CON FrF2 (Todas las interacciones)
cat("=== GRÁFICAS DE INTERACCIÓN CON FrF2 ===\n")
## === GRÁFICAS DE INTERACCIÓN CON FrF2 ===
# Configurar área de gráficos para múltiples gráficos
par(mfrow = c(1, 1))
# IAPlot muestra todas las interacciones de 2 factores
tryCatch({
IAPlot(design,
response = "Y",
main = "TODAS las Interacciones de 2 Factores - Rendimiento",
cex.main = 1)
cat("✓ Gráfica completa de interacciones creada\n")
}, error = function(e) {
cat("Error en IAPlot:", e$message, "\n")
})
## Error en IAPlot: The design obj must have at least one response.
# MÉTODO 2: GRÁFICAS INDIVIDUALES DE INTERACCIÓN CON BASE R
cat("\n=== GRÁFICAS INDIVIDUALES DE INTERACCIÓN (BASE R) ===\n")
##
## === GRÁFICAS INDIVIDUALES DE INTERACCIÓN (BASE R) ===
# Configurar para mostrar múltiples gráficos
par(mfrow = c(3, 4), mar = c(4, 4, 2, 1), oma = c(0, 0, 2, 0))
# Lista de todas las combinaciones de 2 factores
factores <- c("A", "B", "C", "D", "E")
combinaciones <- combn(factores, 2, simplify = FALSE)
# Crear gráficos de interacción para cada par de factores
for (i in seq_along(combinaciones)) {
factor1 <- combinaciones[[i]][1]
factor2 <- combinaciones[[i]][2]
interaction.plot(design_df[[factor1]], design_df[[factor2]], design_df$Y,
main = paste("Interacción", factor1, "vs", factor2),
xlab = factor1,
ylab = "Rendimiento",
col = 1:2,
lwd = 2,
trace.label = factor2)
}
title("TODAS LAS INTERACCIONES DE 2 FACTORES - Diseño 2^5", outer = TRUE)
# Restaurar configuración
par(mfrow = c(1, 1))
# MÉTODO 3: GRÁFICAS CON GGPLOT2 (MÁS ELEGANTES)
cat("\n=== GRÁFICAS DE INTERACCIÓN CON GGPLOT2 ===\n")
##
## === GRÁFICAS DE INTERACCIÓN CON GGPLOT2 ===
# Función para crear gráficos de interacción individuales
crear_grafico_interaccion <- function(fac1, fac2) {
ggplot(design_df, aes(x = .data[[fac1]], y = Y, color = .data[[fac2]], group = .data[[fac2]])) +
stat_summary(fun = mean, geom = "line", size = 1) +
stat_summary(fun = mean, geom = "point", size = 2.5) +
stat_summary(fun = mean, geom = "point", size = 2, color = "white") +
labs(title = paste("Interacción", fac1, "vs", fac2),
x = paste("Factor", fac1),
y = "Rendimiento Promedio",
color = paste("Factor", fac2)) +
theme_minimal() +
theme(plot.title = element_text(size = 10, hjust = 0.5))
}
# Crear todas las combinaciones de gráficos
graficos <- list()
for (i in seq_along(combinaciones)) {
fac1 <- combinaciones[[i]][1]
fac2 <- combinaciones[[i]][2]
graficos[[i]] <- crear_grafico_interaccion(fac1, fac2)
}
# Mostrar todos los gráficos en una cuadrícula
cat("Mostrando todas las interacciones en cuadrícula...\n")
## Mostrando todas las interacciones en cuadrícula...
grid.arrange(grobs = graficos, ncol = 3,
top = "TODAS LAS INTERACCIONES DE 2 FACTORES - Diseño Factorial 2^5")
# MÉTODO 4: MATRIZ DE INTERACCIONES (HEATMAP)
cat("\n=== MATRIZ DE INTERACCIONES (HEATMAP) ===\n")
##
## === MATRIZ DE INTERACCIONES (HEATMAP) ===
# Calcular la fuerza de cada interacción
calcular_fuerza_interaccion <- function(fac1, fac2) {
formula <- as.formula(paste("Y ~", fac1, "*", fac2))
modelo_interaccion <- lm(formula, data = design_df)
coeficiente_interaccion <- coef(modelo_interaccion)[paste0(fac1, ":", fac2)]
return(abs(coeficiente_interaccion))
}
# Crear matriz de fuerzas de interacción
matriz_interacciones <- matrix(0, nrow = 5, ncol = 5)
rownames(matriz_interacciones) <- factores
colnames(matriz_interacciones) <- factores
for (i in 1:4) {
for (j in (i+1):5) {
fuerza <- calcular_fuerza_interaccion(factores[i], factores[j])
matriz_interacciones[i, j] <- fuerza
matriz_interacciones[j, i] <- fuerza
}
}
# Graficar heatmap de interacciones
if (!require(reshape2)) {
install.packages("reshape2")
library(reshape2)
}
matriz_melt <- melt(matriz_interacciones)
matriz_melt <- matriz_melt[matriz_melt$Var1 != matriz_melt$Var2, ] # Remover diagonal
ggplot(matriz_melt, aes(x = Var1, y = Var2, fill = value)) +
geom_tile(color = "white") +
geom_text(aes(label = round(value, 2)), color = "black", size = 4) +
scale_fill_gradient(low = "white", high = "red", name = "Fuerza\nInteracción") +
labs(title = "Matriz de Fuerza de Interacciones entre Factores",
x = "Factor",
y = "Factor") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 0, hjust = 0.5))
## Warning: Removed 20 rows containing missing values or values outside the scale range
## (`geom_text()`).
# MÉTODO 5: GRÁFICAS DE INTERACCIÓN POR NIVELES MÚLTIPLES
cat("\n=== GRÁFICAS DE INTERACCIÓN AVANZADAS ===\n")
##
## === GRÁFICAS DE INTERACCIÓN AVANZADAS ===
# Gráfico de interacción triple (A vs B, facetado por C)
ggplot(design_df, aes(x = A, y = Y, color = B, group = B)) +
stat_summary(fun = mean, geom = "line", size = 1) +
stat_summary(fun = mean, geom = "point", size = 2) +
facet_wrap(~ C, labeller = label_both) +
labs(title = "Interacción A vs B por Niveles de C",
x = "Factor A",
y = "Rendimiento Promedio",
color = "Factor B") +
theme_minimal()
# ANÁLISIS CUANTITATIVO DE INTERACCIONES
cat("\n=== ANÁLISIS CUANTITATIVO DE INTERACCIONES ===\n")
##
## === ANÁLISIS CUANTITATIVO DE INTERACCIONES ===
# Modelo con todas las interacciones de 2 factores
modelo_completo <- lm(Y ~ (A + B + C + D + E)^2, data = design_df)
summary_interacciones <- summary(modelo_completo)
# Extraer coeficientes de interacción
coeficientes <- coef(modelo_completo)
interacciones <- coeficientes[grep(":", names(coeficientes))]
cat("Coeficientes de interacción (ordenados por magnitud):\n")
## Coeficientes de interacción (ordenados por magnitud):
interacciones_ordenadas <- sort(abs(interacciones), decreasing = TRUE)
print(interacciones_ordenadas)
## A1:B1 D1:E1 A1:E1 B1:D1 C1:D1 B1:E1
## 3.937500e+00 5.625000e-01 5.000000e-01 3.750000e-01 3.750000e-01 2.500000e-01
## A1:C1 C1:E1 B1:C1 A1:D1
## 1.875000e-01 1.250000e-01 6.250000e-02 7.016351e-16
# Identificar interacciones significativas
p_valores <- summary_interacciones$coefficients[,4]
interacciones_significativas <- p_valores[grep(":", names(p_valores))] < 0.05
cat("\nInteracciones significativas (p < 0.05):\n")
##
## Interacciones significativas (p < 0.05):
print(names(interacciones_significativas)[interacciones_significativas])
## [1] "A1:B1"
# GRÁFICO FINAL RESUMEN
cat("\n=== GRÁFICO RESUMEN DE INTERACCIONES MÁS FUERTES ===\n")
##
## === GRÁFICO RESUMEN DE INTERACCIONES MÁS FUERTES ===
# Tomar las 4 interacciones más fuertes
interacciones_fuertes <- names(interacciones_ordenadas)[1:4]
graficos_fuertes <- list()
for (i in 1:4) {
factores_inter <- strsplit(interacciones_fuertes[i], ":")[[1]]
graficos_fuertes[[i]] <- crear_grafico_interaccion(factores_inter[1], factores_inter[2]) +
labs(subtitle = paste("Fuerza:", round(interacciones_ordenadas[i], 3)))
}
# RESUMEN FINAL
cat("\n=== RESUMEN EJECUTIVO ===\n")
##
## === RESUMEN EJECUTIVO ===
cat("Total de interacciones de 2 factores analizadas:", length(combinaciones), "\n")
## Total de interacciones de 2 factores analizadas: 10
cat("Interacción más fuerte:", names(interacciones_ordenadas)[1],
"(", round(interacciones_ordenadas[1], 3), ")\n")
## Interacción más fuerte: A1:B1 ( 3.937 )
cat("Interacciones significativas (p < 0.05):", sum(interacciones_significativas), "\n")
## Interacciones significativas (p < 0.05): 1
cat("Rango de rendimiento:", range(Y), "\n")
## Rango de rendimiento: 6 65
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹
🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹🔹