Example 9.7 Response Surface Methodology

A regression model with a complete quadratic set of regressions across several factors can be processed to yield the estimated critical values that can optimize a response. First, the regression is performed for two variables according to the model

\[  y = c + b_1 x_1 + b_2 x_2 + a_{11} x_1^2 + a_{12} x_1 x_2 + a_{22} x_2^2 + e  \]

The estimates are then divided into a vector of linear coefficients (estimates) $\mb {b}$ and a matrix of quadratic coefficients $\mb {A}$. The solution for critical values is

\[  \mb {x} = -\frac{1}{2}\mb {A}^{-1}\mb {b}  \]

The following program creates a module to perform quadratic response surface regression.

proc iml;
/*          Quadratic Response Surface Regression            */
/* This matrix routine reads in the factor variables and     */
/* the response, forms the quadratic regression model and    */
/* estimates the parameters, and then solves for the optimal */
/* response, prints the optimal factors and response, and    */
/* displays the eigenvalues and eigenvectors of the          */
/* matrix of quadratic parameter estimates to determine if   */
/* the solution is a maximum or minimum, or saddlepoint, and */
/* which direction has the steepest and gentlest slopes.     */
/*                                                           */
/* Given that d contains the factor variables,               */
/* and y contains the response.                              */
/*                                                           */

start rsm;
   n=nrow(d);
   k=ncol(d);                                  /* dimensions */
   x=j(n,1,1)||d;                    /* set up design matrix */
   do i=1 to k;
      do j=1 to i;
         x=x||d[,i] #d[,j];
      end;
   end;
   beta=solve(x`*x,x`*y);       /* solve parameter estimates */
   print "Parameter Estimates" , beta;
   c=beta[1];                          /* intercept estimate */
   b=beta[2:(k+1)];                      /* linear estimates */
   a=j(k,k,0);
   L=k+1;                     /* form quadratics into matrix */
   do i=1 to k;
      do j=1 to i;
         L=L+1;
         a[i,j]=beta [L,];
      end;
   end;
   a=(a+a`)*.5;                                /* symmetrize */
   xx=-.5*solve(a,b);            /* solve for critical value */
   print , "Critical Factor Values" , xx;
      /* Compute response at critical value */
   yopt=c + b`*xx + xx`*a*xx;
   print , "Response at Critical Value" yopt;
   call eigen(eval,evec,a);
   print , "Eigenvalues and Eigenvectors", eval, evec;
   if min(eval)>0 then print , "Solution Was a Minimum";
   if max(eval)<0 then print , "Solution Was a Maximum";
finish rsm;

/* Sample Problem with Two Factors */
d={-1 -1, -1  0, -1  1,
    0 -1,  0  0,  0  1,
    1 -1,  1  0,  1  1};
y={ 71.7, 75.2, 76.3, 79.2, 81.5, 80.2, 80.1, 79.1, 75.8};
run rsm;

Running the module with the sample data produces the results shown in Output 9.7.1:

Output 9.7.1: Response Surface Regression: Results

Parameter Estimates

beta
81.222222
1.9666667
0.2166667
-3.933333
-2.225
-1.383333

Critical Factor Values

xx
0.2949376
-0.158881

  yopt
Response at Critical Value 81.495032

Eigenvalues and Eigenvectors

eval
-0.96621
-4.350457

evec
-0.351076 0.9363469
0.9363469 0.3510761

Solution Was a Maximum