library(tidyverse)
library(rsm)
library(broom)
library(flextable)Diseños de Superficies de Respuesta (Segundo Orden)
Librerías
Al inicio de todas las clase se colocarán las librerías que se van a utilizar para el desarrollo de los casos.
Diseño central compuesto (DCC)
Datos proporcionados por la estudiante Loreli Rojas, para fines académicos con base en los resultados de un experimento para el curso II-0905 Ingeniería de Manufactura en el segundo ciclo 2022.
Contexto
Para que un brazo robótico coloque una tapa en la posición correcta, se debe determinar el tiempo de espera de un servomotor y el tiempo que dura en el movimiento otro servomotor. La variable de respuesta es la distancia en mm que se aleja la tapa del centro de la botella donde debe colocarse. Por tanto, dicha respuesta debe minimizarse. No hay múltiple respuesta, pero igual la función de deseabilidad es aplicable, para encontrar la configuración que minimiza la respuesta.
Diseño del experimento
ccd.pick(3) n.c n0.c blks.c n.s n0.s bbr.c wbr.s bbr.s N alpha.rot alpha.orth
1 8 9 1 6 6 1 1 1 29 1.681793 1.680336
2 8 2 1 6 1 1 1 1 17 1.681793 1.673320
3 8 6 1 6 4 1 1 1 24 1.681793 1.690309
4 8 5 1 6 3 1 1 1 22 1.681793 1.664101
5 8 10 1 6 7 1 1 1 31 1.681793 1.699673
6 8 8 1 6 5 1 1 1 27 1.681793 1.658312
7 8 3 1 6 2 1 1 1 19 1.681793 1.705606
8 8 7 1 6 5 1 1 1 26 1.681793 1.712698
9 8 4 1 6 2 1 1 1 20 1.681793 1.632993
10 8 4 1 6 3 1 1 1 21 1.681793 1.732051
dcc <- rsm::ccd(3, # factores
n0 = 3, # puntos centrales
alpha = "rotatable",
oneblock = TRUE,
randomize = FALSE)Recolección de datos
dcc$y <- 80 + 5*dcc$x1 - 3*dcc$x2 + 2*dcc$x3 -
4*dcc$x1^2 - 1*dcc$x2^2 - 2*dcc$x3^2 +
3*dcc$x1*dcc$x2 +
rnorm(nrow(dcc), 0, 1) Ajuste del modelo
mod1 <- rsm::rsm(y ~SO(x1, x2, x3), data = dcc)
mod1 %>%
broom::tidy() %>%
dplyr::mutate(across(where(is.numeric), ~ round(., 2))) %>%
flextable::flextable()term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
(Intercept) | 79.97 | 0.28 | 282.94 | 0.00 |
x1 | 4.67 | 0.19 | 24.91 | 0.00 |
x2 | -2.94 | 0.19 | -15.68 | 0.00 |
x3 | 2.04 | 0.19 | 10.86 | 0.00 |
x1:x2 | 2.51 | 0.25 | 10.26 | 0.00 |
x1:x3 | 0.06 | 0.25 | 0.23 | 0.83 |
x2:x3 | -0.54 | 0.25 | -2.19 | 0.05 |
x1^2 | -3.82 | 0.18 | -20.93 | 0.00 |
x2^2 | -0.88 | 0.18 | -4.83 | 0.00 |
x3^2 | -1.93 | 0.18 | -10.60 | 0.00 |
Gráficos de contorno y 3D
# Contornos de dos factores a la vez
contour(mod1, ~ x1 + x2, image=TRUE) # x1 vs x2
contour(mod1, ~ x1 + x3, image=TRUE) # x1 vs x3
contour(mod1, ~ x2 + x3, image=TRUE) # x2 vs x3
# Superficie 3D
persp(mod1, ~ x1 + x2, col="lightblue")
Diseño Box - Behnken
Diseño del experimento
bb <- rsm::bbd(k = 3,
n0 = 3)
bb run.order std.order x1.as.is x2.as.is x3.as.is
1 1 13 0 0 0
2 2 3 -1 1 0
3 3 15 0 0 0
4 4 7 -1 0 1
5 5 5 -1 0 -1
6 6 11 0 -1 1
7 7 9 0 -1 -1
8 8 6 1 0 -1
9 9 4 1 1 0
10 10 2 1 -1 0
11 11 1 -1 -1 0
12 12 10 0 1 -1
13 13 8 1 0 1
14 14 12 0 1 1
15 15 14 0 0 0
Data are stored in coded form using these coding formulas ...
x1 ~ x1.as.is
x2 ~ x2.as.is
x3 ~ x3.as.is
Recolección de datos
bb$y <- 80 + 5*bb$x1 - 3*bb$x2 + 2*bb$x3 -
4*bb$x1^2 - 1*bb$x2^2 - 2*bb$x3^2 +
3*bb$x1*bb$x2 +
rnorm(nrow(bb), 0, 1) Ajuste del modelo
mod2 <- rsm::rsm(y ~SO(x1, x2, x3), data = bb)
mod2 %>%
broom::tidy() %>%
dplyr::mutate(across(where(is.numeric), ~ round(., 2))) %>%
flextable::flextable()term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
(Intercept) | 80.40 | 0.52 | 153.55 | 0.00 |
x1 | 4.91 | 0.32 | 15.32 | 0.00 |
x2 | -3.44 | 0.32 | -10.71 | 0.00 |
x3 | 2.33 | 0.32 | 7.26 | 0.00 |
x1:x2 | 3.07 | 0.45 | 6.78 | 0.00 |
x1:x3 | 0.08 | 0.45 | 0.17 | 0.87 |
x2:x3 | 0.28 | 0.45 | 0.61 | 0.57 |
x1^2 | -4.40 | 0.47 | -9.31 | 0.00 |
x2^2 | -1.81 | 0.47 | -3.84 | 0.01 |
x3^2 | -1.67 | 0.47 | -3.54 | 0.02 |
Gráficos de contorno y 3D
# Contornos de dos factores a la vez
contour(mod2, ~ x1 + x2, image=TRUE) # x1 vs x2
contour(mod2, ~ x1 + x3, image=TRUE) # x1 vs x3
contour(mod2, ~ x2 + x3, image=TRUE) # x2 vs x3
# Superficie 3D
persp(mod2, ~ x1 + x2, col="lightblue")