* box cox nl 11-09-99 - Make sure your data is y x1 x2 x3 and so on. SET MXLOOP =9999. MATRIX. GET W/VARIABLES = all/FILE=*/names=names/missing=omit. COMPUTE NC = NCOL(W). COMPUTE NR =NROW(W). COMPUTE X=MAKE(NR,1,0). COMPUTE BIGX =MAKE(NR,NC,1). LOOP II = 1 TO NR. COMPUTE X(II,1)=W(II,1). LOOP JJ = 1 TO NC-1. COMPUTE BIGX(II,JJ+1)=W(II,JJ+1). END LOOP. END LOOP. * PRINT BIGX. COMPUTE NL = 25. COMPUTE LAMDA1=MAKE(NL,1,0). PRINT NC. PRINT NR. COMPUTE J=MAKE(NR,1,1). COMPUTE A = LN(X). COMPUTE MEANS =T(J)*A/NR. *PRINT MEANS. COMPUTE B=MAKE(NR,NL,0). * PRINT MEANS. COMPUTE MEANS =EXP(MEANS). *PRINT MEANS. COMPUTE LAM = -3.25. LOOP I = 1 TO NL . COMPUTE LAM = LAM +.25. COMPUTE LAMDA1(I,1) =LAM. *PRINT LAM. DO IF ABS (LAM) >.001. COMPUTE A1 = X&**LAM -1. *PRINT A1. COMPUTE A2 =(T(LAM*(MEANS)&**(LAM-1))). * PRINT A2. COMPUTE Y= A1*INV(A2). * PRINT Y. ELSE. COMPUTE Y = kroneker(means,LN(X)). END IF. LOOP JJ = 1 TO NR. COMPUTE B(JJ,I)=Y(JJ,1). END LOOP. END LOOP. *PRINT B . Print nr. Print nc. compute nlam = 25. compute l2 = 0. compute bigall ={w,b}. * save bigall/outfile = */names=names. * print bigall. comput bigy = make(nlam*nr,nc+2,0). compute l1 = -3.25. loop lam2 = 1 to nlam. compute l1 = l1 + .25. loop ii = 1 to nr. compute l2 = l2+1. loop jj = 1 to nc. compute bigy(l2,jj)= bigall(ii,jj). end loop. compute bigy(l2,nc+1) = bigall(ii,nc+lam2). compute bigy(l2,nc+2) = l1. end loop. end loop. * print bigy. compute names1 = {names,'yboxcox','lambda'}. save bigy/outfile = */names=names1. END MATRIX. SORT CASES BY lambda . SPLIT FILE LAYERED BY lambda . * Run your non-linear with yboxcox as dependent. Find min mse.