You can use the REITERATE option to perform additional iterations when PROC PRINQUAL stops before the data have adequately converged. For example, suppose you execute the following code:
proc prinqual data=A cor out=B; transform mspline(X1-X5); run;
If the transformations do not converge in the default 30 iterations, you can perform more iterations without repeating the first 30 iterations, as follows:
proc prinqual data=B reiterate cor out=B; transform mspline(X1-X5); run;
Note that a WHERE statement is not necessary to exclude the correlation observations. They are automatically excluded because
their _TYPE_
variable value is not ’SCORE’.
You can also use the REITERATE option to specify starting values other than the original values for the transformations. Providing alternate starting points might avoid local optima. Here are two examples.
proc prinqual data=A out=B; transform rank(X1-X5); run; proc prinqual data=B reiterate out=C; /* Use ranks as the starting point. */ transform monotone(X1-X5); run; data B; set A; array TXS[5] TX1-TX5; do j = 1 to 5; TXS[j] = normal(0); end; run; proc prinqual data=B reiterate out=C; /* Use a random starting point. */ transform monotone(X1-X5); run;
Note that divergence with the REITERATE option, particularly in the second iteration, is not an error since the initial transformation is not required to be a valid member of the transformation family. When you specify the REITERATE option, the iteration does not terminate when the criterion change is negative during the first 10 iterations.