Scale Regression with Rich Regression Effects

/*--------------------------------------------------------------------------

                    SAS Sample Library

        Name: hsevex10.sas
 Description: Example program from SAS/ETS High Performance
              Procedures User's Guide, The HPSEVERITY Procedure
       Title: Scale Regression with Rich Regression Effects
     Product: SAS High Performance Econometrics Software
        Keys: Severity Distribution Modeling
        PROC: HPSEVERITY
       Notes:

----------------------------------------------------------------------------*/


proc format;
   value genderFmt 1='Female'
                   2='Male';
run;

data losses(keep=gender carType education carSafety income
                 lossAmount deductible limit);
   call streaminit(12345);
   array sx{8} _temporary_;
   array sbeta{9} _TEMPORARY_ (5 0.6 0.4 -0.75 -0.3 0.4 0.7 -0.5 -0.3);

   length carType $8 education $16;
   format gender genderFmt.;

   sigma = 0.5;
   do lossEventId=1 to 2500;
      /* simulate policyholder and vehicle attributes */
      do i=1 to dim(sx);
         sx(i) = 0;
      end;

      if (rand('UNIFORM') < 0.5) then do;
         gender = 1; * female;
         sx(2) = 1;
      end;
      else do;
         gender = 2; * male;
      end;

      if (rand('UNIFORM') < 0.7) then do;
         carInt = 1;
         carType = 'Sedan';
      end;
      else do;
         carInt = 2;
         carType = 'SUV';
         sx(1) = 1;
      end;

      educationLevel = rand('UNIFORM');
      if (educationLevel < 0.5) then do;
         eduInt = 1;
         education = 'High School';
      end;
      else if (educationLevel < 0.85) then do;
         eduInt = 2;
         education = 'College';
         if (carInt=1) then
            sx(8) = 1;
         else
            sx(6) = 1;
      end;
      else do;
         eduInt = 3;
         education = 'AdvancedDegree';
         if (carInt=1) then
            sx(7) = 1;
         else
            sx(5) = 1;
      end;

      carSafety = rand('UNIFORM'); /* scaled to be between 0 & 1 */
      sx(3) = carSafety;

      income = MAX(15000,int(rand('NORMAL', eduInt*30000, 50000)))/100000;
      sx(4) = income;

      /* simulate lognormal severity */
      Mu = sbeta(1);
      do i=1 to dim(sx);
         Mu = Mu + sx(i) * sbeta(i+1);
      end;
      lossAmount = exp(Mu) * rand('LOGNORMAL')**Sigma;
      loglossAmount = log(lossAmount);

      deductible = lossAmount * rand('UNIFORM');
      if (rand('UNIFORM') < 0.25) then
         limit = lossAmount;

      output;
   end;
run;

/* Fit scale regression model with different types of regression effects */
proc hpseverity data=losses outstore=eststore
     print=all plots=none;
   loss lossAmount / lt=deductible rc=limit;
   class carType gender education;
   scalemodel carType gender carSafety income education*carType
              income*gender carSafety*income;
   dist logn;
run;