Documentation Example 3 for PROC PLS

/****************************************************************/
/*          S A S   S A M P L E   L I B R A R Y                 */
/*                                                              */
/*    NAME: PLSEX3                                              */
/*   TITLE: Documentation Example 3 for PROC PLS                */
/* PRODUCT: STAT                                                */
/*  SYSTEM: ALL                                                 */
/*    KEYS: regression analysis,                                */
/*   PROCS: PLS                                                 */
/*    DATA:                                                     */
/*                                                              */
/* SUPPORT: RDT                         UPDATE:                 */
/*     REF:                                                     */
/*    MISC:                                                     */
/*                                                              */
/****************************************************************/
/* Example 3: Choosing a PLS Model by Test Set Validation */
data ftrain;
   input obsnam $ tot tyr f1-f30 @@;
   try = tot - tyr;
   if (tyr) then tyr_log = log10(tyr); else tyr_log = -8;
   if (try) then try_log = log10(try); else try_log = -8;
   tot_log = log10(tot);
   datalines;
17mix35 0.00003 0
 -6.215 -5.809 -5.114 -3.963 -2.897 -2.269 -1.675 -1.235
 -0.900 -0.659 -0.497 -0.395 -0.335 -0.315 -0.333 -0.377
 -0.453 -0.549 -0.658 -0.797 -0.878 -0.954 -1.060 -1.266
 -1.520 -1.804 -2.044 -2.269 -2.496 -2.714
19mix35 0.00003 3E-7
 -5.516 -5.294 -4.823 -3.858 -2.827 -2.249 -1.683 -1.218
 -0.907 -0.658 -0.501 -0.400 -0.345 -0.323 -0.342 -0.387
 -0.461 -0.554 -0.665 -0.803 -0.887 -0.960 -1.072 -1.272
 -1.541 -1.814 -2.058 -2.289 -2.496 -2.712
21mix35 0.00003 7.5E-7
 -5.519 -5.294 -4.501 -3.863 -2.827 -2.280 -1.716 -1.262
 -0.939 -0.694 -0.536 -0.444 -0.384 -0.369 -0.377 -0.421
 -0.495 -0.596 -0.706 -0.824 -0.917 -0.988 -1.103 -1.294
 -1.565 -1.841 -2.084 -2.320 -2.521 -2.729
23mix35 0.00003 1.5E-6
 -5.294 -4.705 -4.262 -3.605 -2.726 -2.239 -1.681 -1.250
 -0.925 -0.697 -0.534 -0.437 -0.381 -0.359 -0.369 -0.426
 -0.499 -0.591 -0.701 -0.843 -0.925 -0.989 -1.109 -1.310
 -1.579 -1.852 -2.090 -2.316 -2.521 -2.743
25mix35 0.00003 3E-6
 -4.600 -4.069 -3.764 -3.262 -2.598 -2.191 -1.680 -1.273
 -0.958 -0.729 -0.573 -0.470 -0.422 -0.407 -0.422 -0.468
 -0.538 -0.639 -0.753 -0.887 -0.968 -1.037 -1.147 -1.357
 -1.619 -1.886 -2.141 -2.359 -2.585 -2.792
27mix35 0.00003 7.5E-6
 -3.812 -3.376 -3.026 -2.726 -2.249 -1.919 -1.541 -1.198
 -0.951 -0.764 -0.639 -0.570 -0.528 -0.525 -0.550 -0.606
 -0.689 -0.781 -0.909 -1.031 -1.126 -1.191 -1.303 -1.503
 -1.784 -2.058 -2.297 -2.507 -2.727 -2.970
29mix35 0.00003 0.000015
 -3.053 -2.641 -2.382 -2.194 -1.977 -1.913 -1.728 -1.516
 -1.317 -1.158 -1.029 -0.963 -0.919 -0.915 -0.933 -0.981
 -1.055 -1.157 -1.271 -1.409 -1.505 -1.546 -1.675 -1.880
 -2.140 -2.415 -2.655 -2.879 -3.075 -3.319
28mix35 0.00003 0.0000225
 -2.626 -2.248 -2.004 -1.839 -1.742 -1.791 -1.786 -1.772
 -1.728 -1.666 -1.619 -1.591 -1.575 -1.580 -1.619 -1.671
 -1.754 -1.857 -1.982 -2.114 -2.210 -2.258 -2.379 -2.570
 -2.858 -3.117 -3.347 -3.568 -3.764 -4.012
26mix35 0.00003 0.000027
 -2.370 -1.990 -1.754 -1.624 -1.560 -1.655 -1.772 -1.899
 -1.982 -2.074 -2.157 -2.211 -2.267 -2.317 -2.369 -2.460
 -2.545 -2.668 -2.807 -2.951 -3.030 -3.075 -3.214 -3.376
 -3.685 -3.907 -4.129 -4.335 -4.501 -4.599
24mix35 0.00003 0.0000285
 -2.326 -1.952 -1.702 -1.583 -1.507 -1.629 -1.771 -1.945
 -2.115 -2.297 -2.448 -2.585 -2.696 -2.808 -2.913 -3.030
 -3.163 -3.265 -3.376 -3.534 -3.642 -3.721 -3.858 -4.012
 -4.262 -4.501 -4.704 -4.822 -4.956 -5.292
22mix35 0.00003 0.00002925
 -2.277 -1.912 -1.677 -1.556 -1.487 -1.630 -1.791 -1.969
 -2.203 -2.437 -2.655 -2.844 -3.032 -3.214 -3.378 -3.503
 -3.646 -3.812 -3.958 -4.129 -4.193 -4.262 -4.415 -4.501
 -4.823 -5.111 -5.113 -5.294 -5.290 -5.294
20mix35 0.00003 0.0000297
 -2.266 -1.912 -1.688 -1.546 -1.500 -1.640 -1.801 -2.011
 -2.277 -2.545 -2.823 -3.094 -3.376 -3.572 -3.812 -4.012
 -4.262 -4.415 -4.501 -4.705 -4.823 -4.823 -4.956 -5.111
 -5.111 -5.516 -5.524 -5.806 -5.806 -5.806
18mix35 0.00003 0.00003
 -2.258 -1.900 -1.666 -1.524 -1.479 -1.621 -1.803 -2.043
 -2.308 -2.626 -2.895 -3.214 -3.568 -3.907 -4.193 -4.423
 -4.825 -5.111 -5.111 -5.516 -5.516 -5.516 -5.516 -5.806
 -5.806 -5.806 -5.806 -5.806 -6.210 -6.215
trp2    0.0001 0
 -5.922 -5.435 -4.366 -3.149 -2.124 -1.392 -0.780 -0.336
 -0.002  0.233  0.391  0.490  0.540  0.563  0.541  0.488
  0.414  0.313  0.203  0.063 -0.028 -0.097 -0.215 -0.411
 -0.678 -0.953 -1.208 -1.418 -1.651 -1.855
mix5    0.0001 0.00001
 -3.932 -3.411 -2.964 -2.462 -1.836 -1.308 -0.796 -0.390
 -0.076  0.147  0.294  0.394  0.446  0.460  0.443  0.389
  0.314  0.220  0.099 -0.033 -0.128 -0.197 -0.308 -0.506
 -0.785 -1.050 -1.313 -1.529 -1.745 -1.970
mix4    0.0001 0.000025
 -2.996 -2.479 -2.099 -1.803 -1.459 -1.126 -0.761 -0.424
 -0.144  0.060  0.195  0.288  0.337  0.354  0.330  0.274
  0.206  0.105 -0.009 -0.148 -0.242 -0.306 -0.424 -0.626
 -0.892 -1.172 -1.425 -1.633 -1.877 -2.071
mix3    0.0001 0.00005
 -2.128 -1.661 -1.344 -1.160 -0.996 -0.877 -0.696 -0.495
 -0.313 -0.165 -0.042  0.032  0.069  0.079  0.050 -0.006
 -0.082 -0.179 -0.295 -0.436 -0.523 -0.584 -0.706 -0.898
 -1.178 -1.446 -1.696 -1.922 -2.128 -2.350
mix6    0.0001 0.00009
 -1.140 -0.757 -0.497 -0.362 -0.329 -0.412 -0.513 -0.647
 -0.772 -0.877 -0.958 -1.040 -1.104 -1.162 -1.233 -1.317
 -1.425 -1.543 -1.661 -1.804 -1.877 -1.959 -2.034 -2.249
 -2.502 -2.732 -2.964 -3.142 -3.313 -3.576
;
data ftest;
   input obsnam $ tot tyr f1-f30 @@;
   try = tot - tyr;
   if (tyr) then tyr_log = log10(tyr); else tyr_log = -8;
   if (try) then try_log = log10(try); else try_log = -8;
   tot_log = log10(tot);
   datalines;
43trp6  1E-6 0
 -5.915 -5.918 -6.908 -5.428 -4.117 -5.103 -4.660 -4.351
 -4.023 -3.849 -3.634 -3.634 -3.572 -3.513 -3.634 -3.572
 -3.772 -3.772 -3.844 -3.932 -4.017 -4.023 -4.117 -4.227
 -4.492 -4.660 -4.855 -5.428 -5.103 -5.428
59mix6  1E-6 1E-7
 -5.903 -5.903 -5.903 -5.082 -4.213 -5.083 -4.838 -4.639
 -4.474 -4.213 -4.001 -4.098 -4.001 -4.001 -3.907 -4.001
 -4.098 -4.098 -4.206 -4.098 -4.213 -4.213 -4.335 -4.474
 -4.639 -4.838 -4.837 -5.085 -5.410 -5.410
51mix6  1E-6 2.5E-7
 -5.907 -5.907 -5.415 -4.843 -4.213 -4.843 -4.843 -4.483
 -4.343 -4.006 -4.006 -3.912 -3.830 -3.830 -3.755 -3.912
 -4.006 -4.001 -4.213 -4.213 -4.335 -4.483 -4.483 -4.642
 -4.841 -5.088 -5.088 -5.415 -5.415 -5.415
49mix6  1E-6 5E-7
 -5.419 -5.091 -5.091 -4.648 -4.006 -4.846 -4.648 -4.483
 -4.343 -4.220 -4.220 -4.220 -4.110 -4.110 -4.110 -4.220
 -4.220 -4.343 -4.483 -4.483 -4.650 -4.650 -4.846 -4.846
 -5.093 -5.091 -5.419 -5.417 -5.417 -5.907
53mix6  1E-6 7.5E-7
 -5.083 -4.837 -4.837 -4.474 -3.826 -4.474 -4.639 -4.838
 -4.837 -4.639 -4.639 -4.641 -4.641 -4.639 -4.639 -4.837
 -4.838 -4.838 -5.083 -5.082 -5.083 -5.410 -5.410 -5.408
 -5.408 -5.900 -5.410 -5.903 -5.900 -6.908
57mix6  1E-6 9E-7
 -5.082 -4.836 -4.639 -4.474 -3.826 -4.636 -4.638 -4.638
 -4.837 -5.082 -5.082 -5.408 -5.082 -5.080 -5.408 -5.408
 -5.408 -5.408 -5.408 -5.408 -5.408 -5.900 -5.900 -5.900
 -5.900 -5.900 -5.900 -5.900 -6.908 -6.908
41tyro6 1E-6 1E-6
 -5.104 -4.662 -4.662 -4.358 -3.705 -4.501 -4.662 -4.859
 -5.104 -5.431 -5.433 -5.918 -5.918 -5.918 -5.431 -5.918
 -5.918 -5.918 -5.918 -5.918 -5.918 -5.918 -5.918 -6.908
 -5.918 -5.918 -6.908 -6.908 -5.918 -5.918
28trp5  0.00001 0
 -5.937 -5.937 -5.937 -4.526 -3.544 -3.170 -2.573 -2.115
 -1.792 -1.564 -1.400 -1.304 -1.244 -1.213 -1.240 -1.292
 -1.373 -1.453 -1.571 -1.697 -1.801 -1.873 -2.008 -2.198
 -2.469 -2.706 -2.990 -3.209 -3.384 -3.601
37mix5  0.00001 1E-6
 -5.109 -4.865 -4.501 -4.029 -3.319 -3.070 -2.569 -2.207
 -1.895 -1.684 -1.516 -1.423 -1.367 -1.348 -1.374 -1.415
 -1.503 -1.596 -1.718 -1.839 -1.927 -1.997 -2.118 -2.333
 -2.567 -2.874 -3.106 -3.313 -3.579 -3.781
33mix5  0.00001 2.5E-6
 -4.366 -4.129 -3.781 -3.467 -3.037 -2.939 -2.593 -2.268
 -1.988 -1.791 -1.649 -1.565 -1.520 -1.509 -1.524 -1.580
 -1.665 -1.758 -1.882 -2.037 -2.090 -2.162 -2.284 -2.465
 -2.761 -3.037 -3.270 -3.520 -3.709 -3.937
31mix5  0.00001 5E-6
 -3.790 -3.373 -3.119 -2.915 -2.671 -2.718 -2.555 -2.398
 -2.229 -2.085 -1.971 -1.902 -1.860 -1.837 -1.881 -1.949
 -2.009 -2.127 -2.230 -2.381 -2.455 -2.513 -2.624 -2.827
 -3.117 -3.373 -3.586 -3.785 -4.040 -4.366
35mix5  0.00001 7.5E-6
 -3.321 -2.970 -2.765 -2.594 -2.446 -2.548 -2.616 -2.617
 -2.572 -2.550 -2.508 -2.487 -2.488 -2.487 -2.529 -2.593
 -2.688 -2.792 -2.908 -3.037 -3.149 -3.189 -3.273 -3.467
 -3.781 -4.029 -4.241 -4.501 -4.669 -4.865
39mix5  0.00001 9E-6
 -3.142 -2.812 -2.564 -2.404 -2.281 -2.502 -2.589 -2.706
 -2.842 -2.964 -3.068 -3.103 -3.182 -3.268 -3.361 -3.411
 -3.517 -3.576 -3.705 -3.849 -3.932 -3.932 -4.029 -4.234
 -4.501 -4.664 -4.860 -5.104 -5.431 -5.433
26tyro5 0.00001 0.00001
 -3.037 -2.696 -2.464 -2.321 -2.239 -2.444 -2.602 -2.823
 -3.144 -3.396 -3.742 -4.063 -4.398 -4.699 -4.893 -5.138
 -5.140 -5.461 -5.463 -5.945 -5.461 -5.138 -5.140 -5.138
 -5.138 -5.463 -5.461 -5.461 -5.461 -5.461
tyro2   0.0001 0.0001
 -1.081 -0.710 -0.470 -0.337 -0.327 -0.433 -0.602 -0.841
 -1.119 -1.423 -1.750 -2.121 -2.449 -2.818 -3.110 -3.467
 -3.781 -4.029 -4.241 -4.366 -4.501 -4.366 -4.501 -4.501
 -4.668 -4.668 -4.865 -4.865 -5.109 -5.111
;
/* Fit PLS model with 10 factors */
proc pls data=ftrain nfac=10;
   model tot_log tyr_log try_log = f1-f30;
run;
/* Choose the number of factors by testset validation with */
/* significance testing.                                   */
ods graphics on;

proc pls data=ftrain nfac=10 cv=testset(ftest)
                             cvtest(stat=press seed=12345);
   model tot_log tyr_log try_log = f1-f30;
run;
/* Plot the factor loadings */
proc pls data=ftrain nfac=4 plot=XLoadingProfiles;
   model tot_log tyr_log try_log = f1-f30;
run;

ods graphics off;