Reducing Interaction with Canonical Correlation

 /****************************************************************/
 /*          S A S   S A M P L E   L I B R A R Y                 */
 /*                                                              */
 /*    NAME: cancpoly                                            */
 /*   TITLE: Reducing Interaction with Canonical Correlation     */
 /* PRODUCT: STAT                                                */
 /*  SYSTEM: ALL                                                 */
 /*    KEYS: multivariate analysis, regression                   */
 /*   PROCS: ANOVA CANCORR SGPLOT STANDARD                       */
 /*    DATA:                                                     */
 /*                                                              */
 /* SUPPORT: saswfk                                              */
 /*     REF:                                                     */
 /*    MISC:                                                     */
 /*                                                              */
 /****************************************************************/

/*------ Polynomial Conjoint Analysis ------*/
title 'Estimating a Polynomial Transformation to Reduce Interaction';
title2 'by Canonical Correlation';

data x;
   drop r;
   do a = 1 to 3;
      do b = 1 to 4;
         do r = 1 to 2;
            logx = (a + b/2.5 - 2) + rannor(12345)/5;
            x = exp(logx);
            output;
         end;
      end;
   end;
run;

proc standard m=0 s=1 out=b;
   var x logx;
run;

proc sgplot;
   scatter y=logx x=x;
run;

proc anova;
   classes a b;
   model x = a b a*b;
run;

data c;
   set b;
   a1 = (a = 2);
   a2 = (a = 3);
   b1 = (b = 2);
   b2 = (b = 3);
   b3 = (b = 4);
   x2 = x**2;
   x3 = x**3;
   x4 = x**4;
   x5 = x**5;
run;

proc cancorr ncan=1 out=canon(rename=(w1=xp3) drop=v1);
   var a1-a2 b1-b3;
   with x x2 x3;
run;

proc sgplot;
   scatter y=xp3 x=x / legendlabel='x';
   scatter y=xp3 x=logx / legendlabel='logx';
run;

proc anova;
   classes a b;
   model xp3 = a b a*b;
run;

proc cancorr ncan=1 out=canon(rename=(w1=xp5) drop=v1);
   var a1-a2 b1-b3;
   with x x2 x3 x4 x5;
run;

proc sgplot;
   scatter y=xp5 x=x / legendlabel='x';
   scatter y=xp5 x=logx / legendlabel='logx';
run;

proc anova;
   classes a b;
   model xp5 = a b a*b;
run;