Response Surface Methodology

Uiwang Nur Thoriq

2025-09-07

Akses Data di sini:
https://docs.google.com/spreadsheets/d/1Vy3fnvyHrovL_0IK2r17H9hOX232P7a2G8GA-0-3iA0/edit?usp=sharing

Response surface methodology merupakan teknik pemodelan dan analisis di mana respon yang diinginkan dipengaruhi oleh beberapa peubah bebas atau faktor dan tujuannya adalah untuk mengoptimalkan peubah respon tersebut.

  1. Faktor –faktor yang dicobakan bersifat kuantitatif.
  2. Tujuan percobaan adalah optimisasi respon.
  3. Tiga level/taraf untuk masing-masing faktor (satu taraf tinggi, satu taraf rendah, dan satu taraf tengah).
  4. Model yang digunakan adalah model kuadratik.
  5. Rancangan ini digunakan untuk mengatasi kelemahan rancangan faktorial dimana semakin banyak faktor, maka jumlah unit percobaan akan semakin banyak.
  6. Rancangan dalam RSM yang dapat digunakan: Faktorial, Central Composite design, Box Behken, Mixture Design (kasus khusus di RSM).

Central Composite Design

Merupakan kombinasi dari full factorial design atau fractional factorial design dengan tambahan a star design. CCD terdiri dari 3 bagian yaitu faktorial points, centre points, dan axial points. Metode ini bertujuan untuk mencari estimasi dari kondisi optimum di dalam wilayah spherical (bola) pada percobaan selama proses optimasi.

Contoh Generate CCD 2 Faktor

library(rsm)
ccdf2a<-ccd(2, n0=c(4,2), alpha="rotatable", randomize=FALSE, oneblock = TRUE)
ccdf2a
##    run.order std.order  x1.as.is  x2.as.is
## 1          1         1 -1.000000 -1.000000
## 2          2         2  1.000000 -1.000000
## 3          3         3 -1.000000  1.000000
## 4          4         4  1.000000  1.000000
## 5          5         5  0.000000  0.000000
## 6          6         6  0.000000  0.000000
## 7          7         7  0.000000  0.000000
## 8          8         8  0.000000  0.000000
## 9          1         1 -1.414214  0.000000
## 10         2         2  1.414214  0.000000
## 11         3         3  0.000000 -1.414214
## 12         4         4  0.000000  1.414214
## 13         5         5  0.000000  0.000000
## 14         6         6  0.000000  0.000000
## 
## Data are stored in coded form using these coding formulas ...
## x1 ~ x1.as.is
## x2 ~ x2.as.is

Ubah Taraf Coded ke Taraf Asal

Hasil rancangan di atas merupakan hasil perancangan menggunakan CCD 2 faktor dengan tarafnya berupa taraf dalam pengkodean.

Taraf ini dapat diubah ke nilai aslinya. Misal faktor yang dicobakan adalah Suhu (taraf tinggi = 840, taraf rendah = 810) dan Tekanan (taraf tinggi = 3, taraf rendah = 1).

ccd2fb<-ccd(2,n0=c(4,2),alpha="rotatable", coding=list(x1~(Suhu-825)/15,x2~(Tekanan-2)/1), randomize=FALSE, oneblock = TRUE)
ccd2fb
##    run.order std.order     Suhu   Tekanan
## 1          1         1 810.0000 1.0000000
## 2          2         2 840.0000 1.0000000
## 3          3         3 810.0000 3.0000000
## 4          4         4 840.0000 3.0000000
## 5          5         5 825.0000 2.0000000
## 6          6         6 825.0000 2.0000000
## 7          7         7 825.0000 2.0000000
## 8          8         8 825.0000 2.0000000
## 9          1         1 803.7868 2.0000000
## 10         2         2 846.2132 2.0000000
## 11         3         3 825.0000 0.5857864
## 12         4         4 825.0000 3.4142136
## 13         5         5 825.0000 2.0000000
## 14         6         6 825.0000 2.0000000
## 
## Data are stored in coded form using these coding formulas ...
## x1 ~ (Suhu - 825)/15
## x2 ~ (Tekanan - 2)/1

Mengubah taraf coded ke taraf asal juga dapat menggunakan formula berikut:
\[ x_{cod} = \frac{x_0 - \frac{x_{max} + x_{min}}{2}}{\frac{x_{max} - x_{min}}{2}} \] Keterangan:
\(x_{cod}\): Nilai taraf dalam coded value.
\(x_{max}\): Nilai taraf asal maksimum.
\(x_{min}\): Nilai taraf asal minimum.
\(x_0\): Nilai taraf yang akan diubah ke coded value.

Contoh CCD 3 Faktor

Misalkan ditambahkan satu faktor lagi yaitu pH (taraf tinggi = 11, taraf rendah = 9).

ccd3fa<-ccd(3, n0=c(4,2), alpha="rotatable", randomize=FALSE, oneblock = TRUE)
ccd3fa
##    run.order std.order  x1.as.is  x2.as.is  x3.as.is
## 1          1         1 -1.000000 -1.000000 -1.000000
## 2          2         2  1.000000 -1.000000 -1.000000
## 3          3         3 -1.000000  1.000000 -1.000000
## 4          4         4  1.000000  1.000000 -1.000000
## 5          5         5 -1.000000 -1.000000  1.000000
## 6          6         6  1.000000 -1.000000  1.000000
## 7          7         7 -1.000000  1.000000  1.000000
## 8          8         8  1.000000  1.000000  1.000000
## 9          9         9  0.000000  0.000000  0.000000
## 10        10        10  0.000000  0.000000  0.000000
## 11        11        11  0.000000  0.000000  0.000000
## 12        12        12  0.000000  0.000000  0.000000
## 13         1         1 -1.681793  0.000000  0.000000
## 14         2         2  1.681793  0.000000  0.000000
## 15         3         3  0.000000 -1.681793  0.000000
## 16         4         4  0.000000  1.681793  0.000000
## 17         5         5  0.000000  0.000000 -1.681793
## 18         6         6  0.000000  0.000000  1.681793
## 19         7         7  0.000000  0.000000  0.000000
## 20         8         8  0.000000  0.000000  0.000000
## 
## Data are stored in coded form using these coding formulas ...
## x1 ~ x1.as.is
## x2 ~ x2.as.is
## x3 ~ x3.as.is
ccd3fb<-ccd(3,n0=c(4,2),alpha="rotatable", coding=list(x1~(Suhu-825)/15,x2~(Tekanan-2)/1, x3~(pH-10/1)), randomize=FALSE, oneblock = TRUE)
ccd3fb
##    run.order std.order     Suhu   Tekanan        pH
## 1          1         1 810.0000 1.0000000  9.000000
## 2          2         2 840.0000 1.0000000  9.000000
## 3          3         3 810.0000 3.0000000  9.000000
## 4          4         4 840.0000 3.0000000  9.000000
## 5          5         5 810.0000 1.0000000 11.000000
## 6          6         6 840.0000 1.0000000 11.000000
## 7          7         7 810.0000 3.0000000 11.000000
## 8          8         8 840.0000 3.0000000 11.000000
## 9          9         9 825.0000 2.0000000 10.000000
## 10        10        10 825.0000 2.0000000 10.000000
## 11        11        11 825.0000 2.0000000 10.000000
## 12        12        12 825.0000 2.0000000 10.000000
## 13         1         1 799.7731 2.0000000 10.000000
## 14         2         2 850.2269 2.0000000 10.000000
## 15         3         3 825.0000 0.3182072 10.000000
## 16         4         4 825.0000 3.6817928 10.000000
## 17         5         5 825.0000 2.0000000  8.318207
## 18         6         6 825.0000 2.0000000 11.681793
## 19         7         7 825.0000 2.0000000 10.000000
## 20         8         8 825.0000 2.0000000 10.000000
## 
## Data are stored in coded form using these coding formulas ...
## x1 ~ (Suhu - 825)/15
## x2 ~ (Tekanan - 2)/1
## x3 ~ (pH - 10/1)

Import Data CCD

library(readxl)
DataCCD<-read_xlsx("D:/Rancob/DataFull.xlsx",sheet = "RSM")
DataCCD
## # A tibble: 20 × 4
##       x1    x2    x3     y
##    <dbl> <dbl> <dbl> <dbl>
##  1 -1    -1    -1       66
##  2 -1    -1     1       70
##  3 -1     1    -1       78
##  4 -1     1     1       60
##  5  1    -1    -1       80
##  6  1    -1     1       70
##  7  1     1    -1      100
##  8  1     1     1       75
##  9 -1.68  0     0      100
## 10  1.68  0     0       80
## 11  0    -1.68  0       68
## 12  0     1.68  0       63
## 13  0     0    -1.68    65
## 14  0     0     1.68    82
## 15  0     0     0      113
## 16  0     0     0      100
## 17  0     0     0      118
## 18  0     0     0       88
## 19  0     0     0      100
## 20  0     0     0       85

Analisis Data CCD

ModelCCD<- rsm(y ~ SO(x1,x2,x3),data=DataCCD)
summary(ModelCCD)
## 
## Call:
## rsm(formula = y ~ SO(x1, x2, x3), data = DataCCD)
## 
##             Estimate Std. Error t value  Pr(>|t|)    
## (Intercept) 100.6661     5.5637 18.0933 5.702e-09 ***
## x1            1.2715     3.6914  0.3444  0.737651    
## x2            1.3613     3.6914  0.3688  0.719983    
## x3           -1.4945     3.6914 -0.4048  0.694115    
## x1:x2         2.8750     4.8231  0.5961  0.564360    
## x1:x3        -2.6250     4.8231 -0.5443  0.598187    
## x2:x3        -4.6250     4.8231 -0.9589  0.360202    
## x1^2         -3.7675     3.5935 -1.0484  0.319121    
## x2^2        -12.4296     3.5935 -3.4589  0.006134 ** 
## x3^2         -9.6011     3.5935 -2.6718  0.023419 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Multiple R-squared:  0.6631, Adjusted R-squared:  0.3598 
## F-statistic: 2.186 on 9 and 10 DF,  p-value: 0.1194
## 
## Analysis of Variance Table
## 
## Response: y
##                 Df Sum Sq Mean Sq F value Pr(>F)
## FO(x1, x2, x3)   3   77.9   25.96  0.1395 0.9341
## TWI(x1, x2, x3)  3  292.4   97.46  0.5237 0.6757
## PQ(x1, x2, x3)   3 3291.7 1097.25  5.8962 0.0139
## Residuals       10 1860.9  186.09               
## Lack of fit      5 1001.6  200.32  1.1656 0.4353
## Pure error       5  859.3  171.87               
## 
## Stationary point of response surface:
##         x1         x2         x3 
##  0.2598320  0.1108666 -0.1400497 
## 
## Eigenanalysis:
## eigen() decomposition
## $values
## [1]  -3.078922  -8.953288 -13.765960
## 
## $vectors
##          [,1]       [,2]        [,3]
## x1  0.9414140  0.3309019 -0.06514377
## x2  0.2099914 -0.4239868  0.88098739
## x3 -0.2639003  0.8430535  0.46863366
qf(0.05,3,10,lower.tail = FALSE)
## [1] 3.708265

Uji kesesuaian model regresi (Lack of Fit):
\(H_0\) : Model regresi cocok (tidak ada lack of fit).
\(H_1\) : Model regresi tidak cocok (ada lack of fit).
Dari uji Lack of Fit terhadap model diperoleh \(p-value = 0.4353 > \alpha = 0.05\) yang mana tidak tolak \(H_0\). Artinya model regresi cocok.

Uji parameter regresi secara serentak (kuadratik):
\(H_0\) : \(\beta_i=0, i = 1,2,3,...,k\).
\(H_1\) : Minimal ada satu \(\beta_i≠0\).
\(F-hitung\) pada model kuadratik sebesar \(5.8962\) (lihat PQ(x1, x2, x3)), sedangkan \(Ftabel = F(3;10;0.05) = 3.7083\). Karena \(Fhitung > Ftabel\) maka tolak \(H_0\). Kesimpulannya minimal ada satu faktor yang memberikan sumbangan berarti terhadap model.

Berdasarkan hasil analisis dapat dilihat bahwa untuk titik optimal atau taraf optimal dari ketiga faktor yang mengoptimalkan nilai respon adalah X1 = 0.2598320, X2 = 0.1108666, X3 = -0.1400497. Namun ketiga nilai tersebut masih dalam taraf coded, sehingga perlu dilakukan transformasi ulang ke taraf asal menggunakan formula sebelumnya.

Contour Plot CCD

2D

contour(ModelCCD, ~ x1 + x2 + x3, image = TRUE, main="second-order model")

3D

persp(ModelCCD, ~ x1 + x2 + x3, col=terrain.colors(50), contours="color", zlab = "y", main="second-order model")

Box Behken Design

Box Behken Design merupakan salah satu rancangan dalam RSM yang tidak menambahkan faktorial atau fraksional faktorial ke dalam model. Titik yang dicobakan merupakan titik tengah dari suatu garis dan titik center nya. Berbeda dengan CCD yang dapat diaplikasikan pada 2 faktor, dalam Box Behken design faktor minimal yang dicobakan adalah sebanyak 3 faktor.

BBD 3 Faktor

BBD3f<-bbd(3, randomize=FALSE, n0=3)
BBD3f
##    run.order std.order x1.as.is x2.as.is x3.as.is
## 1          1         1       -1       -1        0
## 2          2         2        1       -1        0
## 3          3         3       -1        1        0
## 4          4         4        1        1        0
## 5          5         5       -1        0       -1
## 6          6         6        1        0       -1
## 7          7         7       -1        0        1
## 8          8         8        1        0        1
## 9          9         9        0       -1       -1
## 10        10        10        0        1       -1
## 11        11        11        0       -1        1
## 12        12        12        0        1        1
## 13        13        13        0        0        0
## 14        14        14        0        0        0
## 15        15        15        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

Langkah analisis pada BBD sama dengan langkah analisis pada CCD.