1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        REGRES:   STEP-WISE REGRESSION
4  REM
5  REM        36738 REV  A   10/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
10  REM  REGRES--PERFORMS STEP-WISE REGRESSION ANALYSIS
20  DIM Z[10,10],A[10],L[10],B[10],P[10],X[50,10]
30  PRINT "STEP-WISE REGRESSION"
40  PRINT 
50  PRINT "ANSWER ALL QUESTIONS WITH N FOR NO, Y FOR YES , OR E FOR EXPLAIN."
60  RESTORE 
70  READ N,M
80  LET P4=N*M
90  IF P4>1000 THEN 2420
100  IF P4 <= 0 THEN 2420
110  IF N>100 THEN 2420
120  IF M>10 THEN 2420
130  FOR J=1 TO N
140  FOR K=1 TO M
150  READ X[J,K]
160  NEXT K
170  NEXT J
180  FOR J=1 TO M
190  LET L[J]=1
200  LET A[J]=0
210  LET B[J]=0
220  LET P[J]=0
230  NEXT J
240  FOR K=1 TO M
250  FOR J=1 TO N
260  LET A[K]=A[K]+X[J,K]
270  NEXT J
280  LET A[K]=A[K]/N
290  NEXT K
300  LET P1=0
310  LET P2=0
320  FOR J=1 TO M
330  FOR K=1 TO M
340  LET S1=0
350  LET S2=0
360  LET S3=0
370  FOR J1=1 TO N
380  LET P1=X[J1,J]-X[1,J]
390  LET P2=X[J1,K]-X[1,K]
400  LET S1=S1+P1*P2
410  LET S2=S2+P1
420  LET S3=S3+P2
430  NEXT J1
440  LET Z[J,K]=S1-S2*S3/N
450  IF J <> K THEN 470
460  IF Z[J,K] <= 0 THEN 2450
470  NEXT K
480  NEXT J
490  LET N4=0
500  PRINT 
510  PRINT "TYPE THE NUMBER OF THE COLUMN CORRESPONDING TO THE "
520  PRINT "DEPENDENT VARIABLE(Y).";
530  INPUT N1
540  IF N1>M THEN 580
550  IF N1<1 THEN 580
560  IF INT(N1)<N1 THEN 580
570  GOTO 600
580  PRINT "YOUR DATA DOES NOT CONTAIN VARIABLE ";N1;". TYPE AGAIN PLEASE."
590  GOTO 530
600  PRINT 
610  PRINT "DO YOU WISH TO OMIT A VARIABLE(XK) FROM THE";
620  PRINT " ANALYSIS";
630  INPUT D$
640  IF D$="N" THEN 1020
650  IF D$="Y" THEN 710
660  PRINT 
670  PRINT "IF YOU DO NOT WISH TO ENTER CERTAIN VARIABLES"
680  PRINT "IN THE REGRESSION, YOU CAN STOP THEM FROM ENTERING"
690  PRINT "THE PRESENT ANALYSIS."
700  GOTO 600
710  PRINT "WHEN REQUESTED, ENTER THE COLUMN CORRESPONDING TO THE"
720  PRINT "VARIABLE TO BE OMITTED. TYPE 0 TO TERMINATE THE REQUESTS."
730  PRINT 
740  LET P1=0
750  PRINT "VARIABLE, PLEASE";
760  INPUT D1
770  IF D1=0 THEN 910
780  IF D1=N1 THEN 890
790  IF D1>M THEN 870
800  IF D1<0 THEN 870
810  IF INT(D1)<D1 THEN 870
820  IF L[D1]<0 THEN 750
830  LET P1=P1+1
840  LET N4=N4+1
850  LET L[D1]=-1
860  GOTO 750
870  PRINT "IMPOSSIBLE--VARIABLE DOES NOT EXIST. TRY AGAIN."
880  GOTO 750
890  PRINT "GADS! YOU ARE TRYING TO OMIT Y. TRY AGAIN."
900  GOTO 750
910  IF P1=0 THEN 970
920  IF P1 >= M-1 THEN 940
930  GOTO 1020
940  FOR J=1 TO M
950  LET L[J]=1
960  NEXT J
970  PRINT 
980  PRINT "YOU HAVE EITHER ASKED TO OMIT ALL OR NONE OF THE ";
990  PRINT "VARIABLES.  I REPEAT-"
1000  LET N4=0
1010  GOTO 610
1020  LET M1=M-N4
1030  LET Z1=Z[N1,N1]
1040  PRINT 
1050  PRINT 
1060  LET V1=1
1070  LET Q2=0
1080  LET R3=0
1090  LET N3=M1-1
1100  FOR S1=1 TO N3
1110  PRINT 
1120  PRINT 
1130  PRINT "STEP "S1
1140  LET Q1=0
1150  FOR J=1 TO M
1160  IF J=N1 THEN 1220
1170  IF L[J] <= 0 THEN 1220
1180  LET R5=Z[J,N1]^2/Z[J,J]
1190  IF Q1 >= R5 THEN 1220
1200  LET Q1=R5
1210  LET N5=J
1220  NEXT J
1230  PRINT 
1240  PRINT "VARIABLE SELECTED IS ... X"N5
1250  LET L[N5]=0
1260  PRINT "SUM OF SQUARES REDUCED IN THIS STEP....";Q1
1270  LET R5=Q1/Z1
1280  PRINT "PROPORTION OF VARIANCE OF Y REDUCED....";R5
1290  LET Q2=Q2+Q1
1300  LET R3=R3+R5
1310  LET J=N-S1-1
1320  LET R4=(Z1-Q2)/J
1330  LET T1=Q1/R4
1340  IF T1 <= 10000 THEN 1360
1350  LET T1=10000
1360  PRINT "PARTIAL F (D.F. =)";J;"...............";T1
1370  IF S1=1 THEN 1510
1380  LET V1=S1-1
1390  PRINT 
1400  PRINT "DO YOU WISH TO ENTER THIS VARIABLE IN THE REGRESSION";
1410  INPUT D$
1420  IF D$="N" THEN 2200
1430  IF D$="Y" THEN 1510
1440  PRINT 
1450  PRINT "IN A GIVEN STEP, THE VARIABLE THAT REDUCES THE LARGEST"
1460  PRINT "AMOUNT OF SUM OF SQUARES IS SELECTED. IF THE REDUCTION "
1470  PRINT "INDICATED BY THE ABOVE 3 LINE IS SIGNIFICANT, ENTER THIS"
1480  PRINT "VARIABLE IN THE REGRESSION; OTHERWISE, SELECTION OF "
1490  PRINT "VARIABLES WILL TERMINATE."
1500  GOTO 1390
1510  LET M1=S1
1520  LET V1=S1
1530  LET P[S1]=N5
1540  PRINT 
1550  PRINT "CUMULATIVE SUM OF SQUARES REDUCED......";Q2
1560  PRINT "CUMULATIVE PROPORTION REDUCED..........";R3;"(OF"Z1")"
1570  LET R5=SQR(R3)
1580  PRINT 
1590  PRINT "MULTIPLE CORRELATION COEFFICIENT.......";R5
1600  LET R5=S1
1610  LET R5=(Q2/R5)/R4
1620  IF R5 <= 10000 THEN 1640
1630  LET R5=10000
1640  PRINT "F FOR ANALYSIS OF VAR. (D.F. ="S1;",";J;")";R5
1650  LET S5=SQR(R4)
1660  PRINT "STANDARD ERROR OF ESTIMATE.............";S5
1670  LET R4=Z[N5,N5]
1680  FOR J=1 TO M
1690  IF L[J]>0 THEN 1730
1700  IF L[J]<0 THEN 1760
1710  IF J=N5 THEN 1750
1720  LET Z[J,J]=Z[J,J]+Z[N5,J]*Z[N5,J]/R4
1730  LET Z[N5,J]=Z[N5,J]/R4
1740  GOTO 1760
1750  LET Z[N5,N5]=1/R4
1760  NEXT J
1770  LET B[S1]=Z[N5,N1]
1780  IF S1=1 THEN 1900
1790  LET J2=S1-1
1800  FOR J=1 TO J2
1810  LET J3=S1-J
1820  LET J4=P[J3]
1830  LET B[J3]=Z[J4,N1]
1840  FOR K=1 TO J
1850  LET K1=S1-K+1
1860  LET K2=P[K1]
1870  LET B[J3]=B[J3]-Z[J4,K2]*B[K1]
1880  NEXT K
1890  NEXT J
1900  PRINT 
1910  PRINT "VARIABLE","REG. COEFF.","STD. ERR-COEFF.",TAB(50);"COMPUTED T"
1920  LET B1=A[N1]
1930  FOR J=1 TO S1
1940  LET K3=P[J]
1950  LET Q1=S5*SQR(Z[K3,K3])
1960  LET T1=B[J]/Q1
1970  LET B1=B1-B[J]*A[K3]
1980  PRINT K3,B[J],Q1,TAB(50);T1
1990  NEXT J
2000  PRINT 
2010  PRINT "INTERCEPT(A) "B1
2020  FOR J=1 TO M
2030  IF L[J] <= 0 THEN 2100
2040  FOR K=1 TO M
2050  IF L[K]<0 THEN 2080
2060  IF K=N5 THEN 2080
2070  LET Z[J,K]=Z[J,K]-Z[J,N5]*Z[N5,K]
2080  NEXT K
2090  LET Z[J,N5]=Z[J,N5]/(-R4)
2100  NEXT J
2110  NEXT S1
2120  GOTO 2200
2130  PRINT 
2140  PRINT "DO YOU WISH TO COMPUTE MORE REGRESSION";
2150  INPUT D$
2160  IF D$="N" THEN 2490
2170  IF D$="Y" THEN 60
2180  GOTO 2130
2190  GOTO 60
2200  PRINT 
2210  PRINT "DO YOU WISH TO PRINT THE TABLE OF RESIDUALS";
2220  INPUT D$
2230  IF D$="N" THEN 2130
2240  IF D$="Y" THEN 2290
2250  PRINT 
2260  PRINT "IF YOU WISH TO PRINT Y OBSERVED, Y ESTIMATED, RESIDUAL, AND"
2270  PRINT "STANDARDIZED VALUE OF RESIDUAL FOR EACH CASE, TYPE Y FOR YES."
2280  GOTO 2200
2290  PRINT 
2300  PRINT "OBS. NO.","Y OBSERVED","Y ESTIMATED","RESIDUAL","STD. RESID."
2310  FOR J=1 TO N
2320  LET E1=B1
2330  FOR K=1 TO V1
2340  LET K1=P[K]
2350  LET E1=E1+B[K]*X[J,K1]
2360  NEXT K
2370  LET R6=X[J,N1]-E1
2380  LET S6=R6/S5
2390  PRINT J,X[J,N1],E1,R6,S6
2400  NEXT J
2410  GOTO 2130
2420  PRINT 
2430  PRINT "YOUR VALUES OF M AND/OR N ARE UNACCEPTABLE. CHECK THEM."
2440  STOP 
2450  PRINT "A VALUE OF ZERO FOR AN ELEMENT OF THE DIAGONAL OF THE"
2460  PRINT "CROSS-PRODUCT MATRIX HAS BEEN COMPUTED. CHECK DATA."
2470  PRINT "THIS IS CAUSED "'2"BY A VARIABLE WITH A CONSTANT VALUE"
2480  PRINT "FOR ALL OBSERVATIONS."
2490  STOP 
5000  DATA 15,4
5001  DATA 32,48,54,15
5002  DATA 36,33,19,16
5003  DATA 3,28,30,14
5004  DATA 12,33,64,22
5005  DATA 36,34,60,24
5006  DATA 24,36,53,19
5007  DATA 19,42,29,13
5008  DATA 20,33,55,15
5009  DATA 27,36,62,23
5010  DATA 15,22,33,12
5011  DATA 45,46,68,25
5012  DATA 9,28,42,17
5013  DATA 11,32,45,18
5014  DATA 33,34,39,19
5015  DATA 21,45,39,18
9999  END 
