Diseños de Superficies de Respuesta (Segundo Orden)

Autor/a

Steven García Goñi

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.

library(tidyverse)
library(rsm)
library(broom)
library(flextable)

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")