SUB STEPWI(NR,NC) DIM #3,B(250,15) \ DIM #5,W(250,15) \ DIM A(15,15),S(15),RC(13) \ & DIM ID(15),IC(15),IS(13) H9=.9E-38 AB$=" PLEASE TYPE Y OR N" PRINT \ PRINT "STEP-WISE REGRESSION" \ PRINT \ & PRINT "ALL DATA POINTS MUST EXIST FOR THIS ANALYSIS. ANY ROW OF "+ & "DATA CONTAINING" \ & PRINT "A MISSING VALUE WILL BE DROPPED FROM THE ANALYSIS" \ PRINT ! <<*FIR>> IL=0 \ & INPUT "DO YOU WANT TO SEE THE LAST STEP ONLY (Y/N)";L$ \ PRINT L$=LEFT(L$,1) IF L$="Y" THEN IL=1 \ GOTO <> IF L$<>"N" THEN PRINT AB$ \ GOTO <> <<*ABC>> ON ERROR GOTO <> ! <<*INY>> INPUT "ENTER THE COLUMN NUMBER OF THE DEPENDENT VARIABLE";IY \ PRINT IF IY<1 OR IY>NC THEN PRINT "YOUR DEPENDENT VARIABLE MUST BE "; & "BETWEEN 1 AND";NC \ PRINT "PLEASE TRY AGAIN" \ GOTO <> MAT ID=ZER NV=NC-1 ! <<*OMI>> INPUT "DO YOU WISH TO OMIT ANY VARIABLES FROM THIS ANALYSIS (Y/N)";L$ L$=LEFT(L$,1) IF L$="N" GOTO <> IF L$<>"Y" THEN PRINT AB$ \ GOTO <> IF NV<2 THEN PRINT "YOU CANNOT RUN THIS ANALYSIS WITHOUT AT LEAST"+ & " 2 INDEPENDENT VARIABLES" \ GOTO <> <<*OM1>> IF NV=2 THEN PRINT "YOU NOW HAVE ONLY 2 INDEPENDENT VARIABLES" \ & GOTO <> ! <<*INV>> INPUT "TYPE COLUMN TO BE OMITTED (0 FOR NO MORE)";IX IF IX=0 GOTO <> IF IX<1 OR IX>NC THEN PRINT "VARIABLE MUST BE BETWEEN 1 AND";NC; & " PLEASE TRY AGAIN" \ GOTO <> IF ID(IX)=1 THEN PRINT "THIS VARIABLE WAS OMITTED PREVIOUSLY. "+ & "PLEASE TRY AGAIN" \ GOTO <> IF IX=IY THEN PRINT "YOU ARE TRYING TO OMIT THE DEPENDENT "+ & "VARIABLE. PLEASE TRY AGAIN" \ GOTO <> ID(IX)=1 \ & NV=NV-1 \ & GOTO <> <<*ERA>> PRINT "YOU TYPED NON-NUMERIC CHARACTERS FOR A VARIABLE. PLEASE TRY "+ & "AGAIN" IF ERL=<> THEN RESUME <> RESUME <> ! ! GET MEANS AND STORE GOOD DATA IN W ! <<*STA>> PRINT \ ON ERROR GOTO <> NS=0 MAT S=ZER FOR I=1 TO NR FOR J=1 TO NC IF ID(J)=0 AND B(I,J)=H9 GOTO <> NEXT J NS=NS+1 L=0 FOR J=1 TO NC IF ID(J)=1 OR J=IY GOTO <> L=L+1 \ IC(L)=J \ & W(NS,L)=B(I,J) \ & S(L)=S(L)+B(I,J) <<*NJ2>> NEXT J L=L+1 \ & W(NS,L)=B(I,IY) \ & S(L)=S(L)+B(I,IY) <<*NI1>> NEXT I IC(L)=IY \ & IF NS> S(J)=S(J)/NS FOR J=1 TO L ! ! STORE SUMS OF CROSS PRODUCTS OF DEVIATIONS FROM MEANS IN A ! MAT A=ZER FOR I=1 TO NS FOR J=1 TO L A(J,K)=A(J,K)+(W(I,J)-S(J))*(W(I,K)-S(K)) FOR K=J TO L NEXT J NEXT I FOR J=1 TO L IF A(J,J)<=0. THEN PRINT \ PRINT \ & PRINT "COLUMN";IC(J);" HAS THE SAME VALUE FOR ALL ROWS" \ & PRINT "YOU MUST OMIT THIS COLUMN TO COMPUTE STEP-WISE "+ & "REGRESSION" \ GOTO <> IF J>1 THEN A(J,K)=A(K,J) FOR K= 1 TO J-1 NEXT J SSY=A(L,L) \ & IS1=0 \ & ISW=0 \ & SUMQ=0. \ & SPRO=0. \ & NSTEP=NV \ & NVT=L \ & ID(J)=1 FOR J=1 TO NVT ! ! START LOOP TO PICK VARIABLE IN EACH STEP THAT CONTRIBUTES ! THE MOST TO REDUCE THE VARIANCE OF Y (DEPENDENT VARIABLE) ! FOR NST=1 TO NSTEP IF IL=0 THEN PRINT \ PRINT "STEP ";NST; QMAX=0. FOR J=1 TO NV IF ID(J)=0 GOTO <> IF A(J,J)>0. THEN Q=A(J,NVT)**2/A(J,J) ELSE Q=0. IF Q>QMAX THEN QMAX=Q \ NB=J <<*NJ3>> NEXT J IF QMAX>0. GOTO <> ! ! WHEN QMAX=0 NO OTHER VARIABLES WILL CONTRIBUTE TO THE ! REDUCTION OF THE VARIANCE OF Y ! IF IL=1 THEN NST=NST-1 \ NSTEP=NST \ ISW=1 \ GOTO <> PRINT \ PRINT "NO OTHER VARIABLES REDUCE ANY MORE OF THE VARIANCE"+ & " OF Y" \ & GOTO <> ! ! COMPUTE STATISTICS ! <<*ON1>> IF IL=0 THEN PRINT " VARIABLE SELECTED IS X";IC(NB) ID(NB)=0 PRO=QMAX/SSY SUMQ=SUMQ+QMAX SPRO=SPRO+PRO IF IL=1 AND SPRO>=.99994 THEN NSTEP=NST \ IS1=1 NDF=NS-NST-1 \ & RESMS=(SSY-SUMQ)/NDF IF RESMS<=0. THEN F=9999.99 \ RESMS=0. F=QMAX/RESMS IF F>9999.99 THEN F=9999.99 \ GOTO <> <<*ON2>> IF IL=0 THEN & PRINT USING " SUM OF SQUARES REDUCED IN THIS STEP = #######.##"+ & "##",QMAX \ & PRINT USING " PROPORTION OF VARIANCE OF Y REDUCED = ##.##"+ & "##",PRO \ & PRINT USING " PARTIAL F (DF =1,###) = #####.##"+ & "##",NDF,F \ PRINT IF NST=1 OR IL=1 GOTO <> IF NST=2 THEN PRINT " TYPE 'HELP' FOR AN EXPLANATION" ! <<*PRD>> PRINT " DO YOU WISH TO ENTER THIS VARIABLE IN THE REGRESSION (Y/"+ & "N)"; \ INPUT L$ \ L$=LEFT(L$,1) IF L$="N" THEN NST=NST-1 \ GO TO <> IF L$<>"Y" THEN PRINT " FOR EACH STEP, THE VARIABLE THAT REDUCES "+& "MOST THE SUM OF SQUARES IS" \ & PRINT " SELECTED. IF THE REDUCTION INDICATED BY THE ABOVE 3 "+ & "LINES IS" \ & PRINT " SIGNIFICANT, TYPE 'Y' TO ENTER THIS VARIABLE IN THE "+ & "REGRESSION - OR" \ & PRINT " TYPE 'N' TO TERMINATE THE SELECTION OF VARIABLES" \ & GOTO <> <<*PRZ>> IS(NST-1)=NB IF RESMS=0. THEN F=9999.99 \ GOTO <> F=(SUMQ/NST)/RESMS IF F>9999.99 THEN F=9999.99 <<*PRY>> SEE=SQR(RESMS) IF ISW=1 GOTO <> ! ! REDUCE THE A MATRIX FOR THE NEXT STEP ! X=A(NB,NB) FOR J=1 TO NVT IF ID(J)=1 GOTO <> IF J=NB THEN A(J,J)=1./X \ GOTO <> A(J,J)=A(J,J)+A(NB,J)*A(NB,J)/X <<*ON4>> A(NB,J)=A(NB,J)/X <<*NJ4>> NEXT J ! ! COMPUTE REGRESSION COEFFICIENTS FOR ALL SELECTED VARIABLES ! RC(NST-1)=A(NB,NVT) IF NST=1 GOTO <> FOR J=2 TO NST J1=NST-J J2=IS(J1) RC(J1)=A(J2,NVT) FOR K=1 TO J-1 K1=NST-K K2=IS(K1) RC(J1)=RC(J1)-A(J2,K2)*RC(K1) NEXT K NEXT J ! ! COMPUTE Y INTERCEPT AND TABLE OF STATISTICS FOR ! VARIABLES SELECTED ! <<*ON5>> IF IL=1 AND NST> <<*ON6>> YINT=S(NVT) YINT=YINT-RC(J)*S(IS(J)) FOR J=0 TO NST-1 PRINT USING " CUMULATIVE SUM OF SQUARES REDUCED = #######.##"+ & "##",SUMQ \& PRINT USING " CUMULATIVE PROPORTION REDUCED = ###.##"+ & "## (OF #######.####)",SPRO,SSY \ & PRINT USING " MULTIPLE CORRELATION COEFFICIENT = ####.##"+ & "##",SQR(SPRO) \ & PRINT USING " F FOR ANALYSIS OF VAR. (D.F. = ## , ###) "+ & "####.####",NST,NDF,F \ & PRINT USING " STANDARD ERROR OF ESTIMATE "+ & "####.####",SEE \ & PRINT USING " INTERCEPT AFTER STEP ## = ####."+ & "####",NST,YINT \ PRINT \ & PRINT " VARIABLE REG COEFF STD ERR-COEFF "+ & "COMPUTED T" <<*ON7>> FOR J=0 TO NST-1 K1=IS(J) SEC=SEE*SQR(A(K1,K1)) IF SEC=0. THEN T=10000. ELSE T=RC(J)/SEC IF IL=0 OR NST=NSTEP THEN & PRINT USING " ### ####.#### ###.####"+ & " ####.####",IC(K1),RC(J),SEC,T NEXT J IF ISW+IS1>0 THEN PRINT "NO OTHER VARIABLES REDUCE ANY "+ & "MORE OF THE VARIANCE OF Y" IF NST=NSTEP GOTO <> ! ! MORE REDUCTION OF A MATRIX -DONE AFTER EACH STEP ! FOR J=1 TO NVT IF ID(J)=0 GOTO <> FOR K=1 TO NVT IF K<>NB THEN A(J,K)=A(J,K)-A(J,NB)*A(NB,K) NEXT K A(J,NB)=A(J,NB)/(-X) <<*NJ5>> NEXT J NEXT NST ! <<*PRT>> PRINT \ & INPUT "DO YOU WISH TO PRINT THE TABLE OF RESIDUALS (Y/N)";L$ \ PRINT L$=LEFT(L$,1) IF L$="N" GOTO <> IF L$<>"Y" THEN PRINT AB$ \ GOTO <> PRINT "OBS Y OBSERVED Y ESTIMATED RESIDUAL STD RESID" FOR I=1 TO NS Y=YINT FOR J=0 TO NST-1 K=IS(J) \ & Y=Y+RC(J)*W(I,K) NEXT J RES=W(I,NVT)-Y \ & IF SEE=0. THEN STR=0. ELSE STR=RES/SEE PRINT USING "### #########.#### #########.#### #########.####"+ & " #########.####",I,W(I,NVT),Y,RES,STR NEXT I PRINT ! <<*PDS>> INPUT "DO YOU WISH TO PRINT THE DATA USED IN THIS ANALYSIS (Y/N)";L$ & \ PRINT L$=LEFT(L$,1) IF L$="N" GOTO <> IF L$<>"Y" THEN PRINT AB$ \ GOTO <> PRINT "THE DEPENDENT VARIABLE WILL BE PRINTED LAST" \ PRINT \ & J9=0 <<*PD1>> J8=J9+1 \ & J9=J9+6 \ & IF J9>NVT THEN J9=NVT PRINT "ROW";TAB(37);"COLUMN" \ PRINT \ & K=10 FOR J=J8 TO J9 PRINT TAB(K);IC(J); \ K=K+11 NEXT J PRINT \ PRINT FOR I=1 TO NS PRINT USING "### ",I; PRINT USING " #####.####",W(I,J); FOR J=J8 TO J9 \ PRINT NEXT I PRINT IF J9> ! <<*MOR>> INPUT "DO YOU WISH TO COMPUTE MORE STEP-WISE REGRESSION";L$ \ PRINT \ & L$=LEFT(L$,1) IF L$="Y" GOTO <> IF L$<>"N" THEN PRINT AB$ \ GOTO <> GOTO <> ! ! ERROR RECOVERY FOR COMPUTATIONS ! <<*ERB>> PRINT \ PRINT "CALCULATIONS CANNOT BE COMPLETED BECAUSE COMPUTATION"+ & " CREATED NUMBERS" \ PRINT "OUTSIDE THE RANGE OF THIS COMPUTER" \ & PRINT \ PRINT "STEPWI ERROR";ERR;" AT LINE";ERL \ PRINT \ & PRINT "PLEASE RECORD THE ABOVE LINE AND CONTACT JOHN PENN IN BR "+ & "AT 3886" \ PRINT RESUME <> <<*END>> SUBEND