10  COM X[103,22],M[19,19],U[19,19],Q[20],V[20],P[78]
30  COM M$[60],N$[72]
40  COM N,K,N8,K8,N9,K9,Q9,Q7,Q5,Q4,Q3,Q2,Q1
45  COM I3,I4,U9,X$[20]
50  REM:10APR74
60  REM:Q1=1 FOR>REGR;=2FOR>COEFF;=3FOR>ANOV;=4FOR>SUMM
150  DIM A[20],A$[12],C$[12]
200  GOTO Q1 OF 205,960,960,960
205  IF Q[1]#0 THEN 250
210  PRINT "NO DATA HAS BEEN ENTERED YET.  USE"
220  PRINT "'ENTER','ENTS','ENRA','CRSP' OR 'RAND' TO ENTER DATA :"
230  GOTO 9998
250  IF Q[3]=0 THEN 259
252  Q[5]=1
256  Q[7]=259
258  GOTO 9938
259  IF Q9=1 THEN 280
260  PRINT "* DEP. VAR. = ";
270  GOTO 300
280  PRINT "* DEPENDENT VARIABLE (NAME OR COLUMN NUMBER) = ";
300  ENTER 30,Q8,C$
305  PRINT 
310  IF Q8>0 THEN 340
320  GOSUB 4000
330  GOTO 260
340  GOSUB 7000
345  IF Z9=0 THEN 260
350  D=Z9
355  IF Q9=1 THEN 380
360  PRINT "HOW MANY INDEP. VAR. ";
370  GOTO 390
380  PRINT "HOW MANY INDEPENDENT VARIABLES ";
390  INPUT K8
391  IF K8 <= K-1 THEN 395
392  PRINT K-1"OR FEWER INDEP. VAR. POSSIBLE."
393  GOTO 360
395  IF K8=0 THEN 9000
396  IF Q3=0 THEN 411
397  FOR I1=1 TO K8
398  PRINT  USING 399;I1
399  IMAGE #,"INDEP. VAR.",XDD,X,"= "
400  INPUT C$
401  GOSUB 7000
402  IF Z9=0 THEN 398
408  A[I1]=Z9
409  NEXT I1
410  GOTO 452
411  IF Q9=3 THEN 440
412  PRINT "GIVE COLUMN NUMBER(S) OF INDEPENDENT VARIABLE(S)"
420  PRINT "SEPARATED BY COMMA(S) :"
430  GOTO 450
440  PRINT "INDEP. VAR(S). = ";
450  MAT  INPUT A[K8]
452  MAT V=ZER
453  Q[2]=0
454  FOR I=1 TO K8
456  IF D=A[I] THEN 484
472  IF A[I] <= K THEN 477
474  IF A[I]=K9 OR A[I]=K9+1 THEN 7020
476  GOTO 7054
477  V[I]=A[I]
478  NEXT I
479  FOR I=1 TO K8-1
480  FOR I1=I+1 TO K8
482  IF A[I]#A[I1] THEN 488
484  PRINT "DUPLICATE VARIABLES GIVEN."'10'13'7"TRY AGAIN!"
486  GOTO 280
488  NEXT I1
490  NEXT I
492  V[K8+1]=D
500  N8=0
510  FOR I=Q4 TO N
520  N8=N8+X[I,K9+2]
530  NEXT I
550  FOR I=1 TO K8
560  FOR J=1 TO K8
570  U[I,J]=M[V[I],V[J]]
580  NEXT J
590  NEXT I
600  FOR I=1 TO K8
610  U[I,K8+1]=M[V[I],V[K8+1]]
620  U[K8+1,I]=U[I,K8+1]
630  NEXT I
640  U[K8+1,K8+1]=1
645  K6=K8
650  FOR I=1 TO K6
660  GOSUB 4500
670  NEXT I
680  Q[2]=1
682  Q[20]=K8
684  PRINT "COMPUTING...";
685  GOSUB 8000
687  PRINT 
690  PRINT "ANALYZING RESIDUALS...";
695  GOTO 9931
700  PRINT LIN(1),"VARIABLE  B(STD.V)     B      STD.ERROR(B)   T"
702  PRINT 
705  B0=0
706  V0=U[K8+1,K8+1]/(N8-K6-1)
710  FOR I=1 TO K6
720  I1=U[I,K8+1]*X[N9+2,V[K8+1]]/X[N9+2,V[I]]
730  B0=B0+I1*X[N9+1,V[I]]
740  I2=SQR(U[I,I]*V0)*X[N9+2,V[K8+1]]/X[N9+2,V[I]]
750  IF Q3=1 THEN 790
760  PRINT  USING 770;V[I],U[I,K8+1],I1,I2,I1/I2
770  IMAGE 3X,2D,4X,3D.4D,2(2X,D.4DE),X,3D.3D
780  GOTO 840
790  IF V[I]>10 THEN 830
800  PRINT  USING 810;M$[6*V[I]-5,6*V[I]],U[I,K8+1],I1,I2,I1/I2
810  IMAGE X,6A,2X,3D.4D,2(2X,D.4DE),X,3D.3D
820  GOTO 840
830  PRINT  USING 810;N$[6*(V[I]-10)-5,6*(V[I]-10)],U[I,K8+1],I1,I2,I1/I2
840  NEXT I
850  B0=X[N9+1,V[K8+1]]-B0
855  D=0
860  FOR I=1 TO K6
870  FOR J=1 TO K6
880  D=D+U[I,J]*(X[N9+1,V[I]]/X[N9+2,V[I]])*X[N9+1,V[J]]/X[N9+2,V[J]]
890  NEXT J
900  NEXT I
910  V1=SQR(V0*X[N9+2,V[K8+1]]^2*(D+1-1/N8))
920  PRINT  USING 930;B0,V1,(B0/V1)
930  IMAGE "CONSTANT    0",4X,2(2XD.4DE),X3D.3D
950  RETURN 
960  IF Q[2]#0 THEN 990
970  PRINT "EXECUTE 'REGR' FIRST TO DEFINE REGRESSION EQUATION"
980  GOTO 9998
990  IF Q[4]=0 THEN 998
992  Q[5]=0
996  Q[7]=998
997  GOTO 9938
998  K6=Q[20]
999  GOTO Q1 OF 205,1000,1116,1322
1000  GOSUB 700
1010  GOTO 9998
1116  GOSUB 1120
1117  GOTO 1140
1120  T1=(N8-1)*X[N9+2,V[K8+1]]^2
1130  R2=U[K8+1,K8+1]*T1
1135  RETURN 
1140  GOSUB 1150
1142  GOTO 9998
1150  R1=T1-R2
1152  F=(R1/K6)/(R2/(N8-K6-1))
1155  PRINT 
1156  PRINT "  SOURCE         SS       DF       MS         F"
1160  PRINT 
1170  PRINT  USING 1180;R1,K6,(R1/K6)
1180  IMAGE #,"REGRESSION",2XD.5DE,2X3D,2XD.5DE
1182  IF F>999 THEN 1188
1184  PRINT  USING "2X3D.2D";F
1186  GOTO 1190
1188  PRINT  USING "2XD.4DE";F
1190  PRINT  USING 1200;R2,(N8-K6-1),R2/(N8-K6-1)
1200  IMAGE "RESIDUALS",3XD.5DE,2X3D,2XD.5DE
1210  PRINT  USING 1220;T1,(N8-1),T1/(N8-1)
1220  IMAGE "  TOTAL",5XD.5DE,2X3D,2XD.5DE
1230  RETURN 
1322  GOSUB 1120
1324  GOSUB 1330
1326  GOTO 9998
1330  R0=1-R2/T1
1340  R3=1-(N8-1)*(1-R0)/(N8-K6-1)
1350  R3=0 MAX R3
1360  R1=SQR(R3)
1370  PRINT LIN(1);SPA(12),"MULTIPLE R  R-SQUARE"
1380  PRINT  USING 1390;SQR(R0),R0
1390  IMAGE "UNADJUSTED",4X,D.4D,5X,D.4D
1400  PRINT  USING 1410;R1,R3
1410  IMAGE " ADJUSTED",5X,D.4D,5X,D.4D
1420  PRINT " STD. DEV. OF RESIDUALS =",SQR(R2/(N8-K6-1))
1430  RETURN 
3999  PRINT C$" IS NOT A VALID NAME OR NUMBER"
4000  PRINT "NEED HELP ";
4001  INPUT C$
4002  IF C$[1,1]="N" THEN 4190
4003  PRINT 
4004  PRINT "DATA IN COL(S). 1 TO"K
4005  IF Q3=1 THEN 4100
4006  PRINT "NO NAMES GIVEN FOR VARIABLES, BUT"
4010  PRINT '10'13"FOR YOUR REFERENCE :"
4040  PRINT '10"COLUMN  1ST OBSERVATION"
4050  FOR J=1 TO K
4060  PRINT  USING "2XDD,6XD.5DE";J,X[Q4,J]
4070  NEXT J
4080  GOTO 4185
4100  PRINT "THEY ARE :"
4110  PRINT LIN(1);"COLUMN   NAME"
4120  FOR J=1 TO K
4130  IF J>10 THEN 4170
4140  PRINT  USING 4150;J,M$[6*J-5,6*J]
4150  IMAGE 2XDD,4X6A
4160  GOTO 4180
4170  PRINT  USING 4150;J,N$[6*(J-10)-5,6*(J-10)]
4180  NEXT J
4185  PRINT 
4190  RETURN 
4500  C=1/U[I,I]
4510  U[I,I]=C
4520  FOR I1=1 TO K8+1
4530  IF I1=I THEN 4580
4540  FOR J1=1 TO K8+1
4550  IF J1=I THEN 4570
4560  U[I1,J1]=U[I1,J1]-C*U[I1,I]*U[I,J1]
4570  NEXT J1
4580  NEXT I1
4590  FOR I1=1 TO K8+1
4600  IF I1=I THEN 4630
4610  U[I,I1]=U[I,I1]*C
4620  U[I1,I]=-U[I1,I]*C
4630  NEXT I1
4640  RETURN 
7000  IF Q3=0 THEN 7016
7004  FOR I=1 TO 10 MIN K
7005  IF M$[6*I-5,6*I]=C$[1,6] THEN 7062
7006  NEXT I
7008  IF K<11 THEN 7016
7010  FOR I=1 TO K-10
7012  IF N$[6*I-5,6*I]=C$[1,6] THEN 7066
7014  NEXT I
7016  IF C$[1,6]#"FITTED" THEN 7032
7020  IF Q[2]=0 THEN 7054
7021  PRINT "TO USE 'FITTED' (COL."K9") OR 'RESIDUAL' (COL."K9-1")"
7022  PRINT "VALUES OF PREVIOUS REGRESSION, FIRST SAVE THESE VALUES"
7024  PRINT "IN A COL. OF THE DATA GROUP OF COLUMNS."
7030  GOTO 7055
7032  IF C$[1,6]#"RESIDU" THEN 7036
7034  GOTO 7020
7036  RESTORE 
7038  FOR I=1 TO K9+1
7040  READ A$
7042  IF A$=C$ THEN 7048
7044  NEXT I
7046  GOTO 7057
7048  IF I<K+1 THEN 7062
7050  IF I<K9 THEN 7054
7052  GOTO 7020
7054  PRINT "DATA IN FIRST"K"COL(S)."
7055  PRINT "REGRESSION NOT EXECUTED."
7056  GOTO 9998
7057  Z9=0
7058  GOSUB 3999
7060  GOTO 7068
7062  Z9=I
7064  GOTO 7068
7066  Z9=10+I
7068  RETURN 
7180  DATA "1","2","3","4","5","6","7","8","9","10","11","12"
7190  DATA "13","14","15","16","17","18","19","20","21"
8000  X[N9+1,K9]=X[N9+1,K9+1]=X[N9+2,K9]=X[N9+2,K9+1]=0
8005  FOR I=Q4 TO N
8010  IF X[I,K9+2]=0 THEN 8080
8020  X[I,K9]=0
8030  FOR J=1 TO K6
8040  X[I,K9]=X[I,K9]+U[J,K8+1]*(X[I,V[J]]-X[N9+1,V[J]])/X[N9+2,V[J]]
8050  NEXT J
8060  X[I,K9]=X[N9+1,V[K8+1]]+X[N9+2,V[K8+1]]*X[I,K9]
8070  X[I,K9+1]=X[I,V[K8+1]]-X[I,K9]
8072  X[N9+1,K9]=X[N9+1,K9]+X[I,K9]
8074  X[N9+2,K9+1]=X[N9+2,K9+1]+X[I,K9+1]^2
8080  NEXT I
8090  X[N9+1,K9]=X[N9+1,K9]/N8
8095  FOR I=Q4 TO N
8100  IF X[I,K9+2]=0 THEN 8120
8110  X[N9+2,K9]=X[N9+2,K9]+(X[I,K9]-X[N9+1,K9])^2
8120  NEXT I
8130  X[N9+2,K9]=SQR(X[N9+2,K9]/(N8-1))
8140  X[N9+2,K9+1]=SQR(X[N9+2,K9+1]/(N8-Q[20]-1))
8142  X[N9+3,K9]=X[N9+3,K9+1]=Q4-1
8145  Q[4]=0
8150  RETURN 
9000  Q[6]=Z9
9010  CHAIN "$IDA28",8000
9931  CHAIN "$IDA31"
9938  Q[6]=29
9939  CHAIN "$IDA38"
9998  CHAIN "$IDA",150
9999  END 
