Tutorial: A Module for Linear Regression

Plotting Regression Results

You can create some simple plots by using the PGRAF subroutine. The PGRAF subroutine produces scatter plots suitable for printing on a line printer. If you want to produce better-quality graphics that include color, you can use the graphics capabilities of IML (see Chapter 12 for more information).

Here is how you can plot the residuals against x. First, create a matrix containing the pairs of points by concatenating X1 with RESID, using the horizontal concatenation operator (\vert):

  
     > xy=x1||resid; 
  
                XY            5 rows      2 cols    (numeric) 
  
                                      1      -0.2 
                                      2         1 
                                      3      -1.8 
                                      4       1.4 
                                      5      -0.4
 
Next, use a CALL statement to call the PGRAF subroutine to produce the desired plot. The arguments to PGRAF are as follows, in the order shown:

  
     > call pgraf(xy,'r','x','Residuals','Plot of Residuals'); 
  
                              Plot of Residuals 
    2 + 
      | 
      |                                                 r 
 R    | 
 e    |                     r 
 s    | 
 i    | 
 d  0 + 
 u    |       r                                                       r 
 a    | 
 l    | 
 s    | 
      | 
      |                                   r 
   -2 + 
      --------+------+------+------+------+------+------+------+------+-------- 
             1.0    1.5    2.0    2.5    3.0    3.5    4.0    4.5    5.0 
                                          x
 

You can also plot the predicted values {\hat{y}} against x. You must first create a matrix - say, XYH - containing the points. Do this by concatenating X1 with YHAT. Next, call the PGRAF subroutine to plot the points. You can perform these operations by using the following statements:

  
    > xyh=x1||yhat; 
  
                XYH           5 rows      2 cols    (numeric) 
  
                                      1       1.2 
                                      2         4 
                                      3      10.8 
                                      4      21.6 
                                      5      36.4 
  
  
    > call pgraf(xyh,'*','x','Predicted','Plot of Predicted Values');
 

  
  
                           Plot of Predicted Values 
   40 + 
      |                                                               * 
      | 
 P    | 
 r    | 
 e    | 
 d    |                                                 * 
 i 20 + 
 c    | 
 t    | 
 e    |                                   * 
 d    | 
      | 
      |                     * 
    0 +       * 
      --------+------+------+------+------+------+------+------+------+-------- 
             1.0    1.5    2.0    2.5    3.0    3.5    4.0    4.5    5.0 
                                          x
 

You can get a more detailed plot, denoting the observed values with a "y" and the predicted values with a "p" by using the following statements. Create a matrix NEWXY containing the pairs of points to overlay. You need to use both the horizontal concatenation operator (\vert) and the vertical concatenation operator (//). The NROW function returns the number of observations - that is, the number of rows of X1. The matrix LABEL contains the character label for each point, plotting a "y" for each observed point and a "p" for each predicted point.

  
    > newxy=(x1//x1)||(y//yhat); 
  
                NEWXY        10 rows      2 cols    (numeric) 
  
                                      1         1 
                                      2         5 
                                      3         9 
                                      4        23 
                                      5        36 
                                      1       1.2 
                                      2         4 
                                      3      10.8 
                                      4      21.6 
                                      5      36.4 
  
    > n=nrow(x1); 
  
  
                N             1 row       1 col     (numeric) 
  
                                           5 
  
  
    > label=repeat('y',n,1)//repeat('p',n,1); 
  
  
                LABEL        10 rows      1 col     (character, size 1) 
  
                                          y 
                                          y 
                                          y 
                                          y 
                                          y 
                                          p 
                                          p 
                                          p 
                                          p 
                                          p 
  
  
    > call pgraf(newxy,label,'x','y','Scatter Plot with Regression Line' ); 
  
  
                      Scatter Plot with Regression Line 
 y 40 + 
      |                                                               y 
      | 
      | 
      | 
      | 
      |                                                 y 
   20 + 
      | 
      | 
      |                                   p 
      |                                   y 
      |                     y 
      |                     p 
    0 +       y 
      --------+------+------+------+------+------+------+------+------+---- 
             1.0    1.5    2.0    2.5    3.0    3.5    4.0    4.5    5.0 
                                          x
 

As you can see, the observed and predicted values are too close together to be distinguishable at all values of x.

Previous Page | Next Page | Top of Page