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: 4 AUG 74
52  REM: Q1=1 FOR >STEP; =2 FOR >FORW; =3 FOR >BACK
150  DIM A$[12],C$[12],A[20]
205  IF Q[1]=0 THEN 9990
242  IF Q[3]=0 THEN 250
244  Q[5]=1
245  Q[6]=30
247  Q[7]=250
248  CHAIN "$IDA38"
250  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
312  PRINT  USING 314
314  IMAGE #,"NAME INVALID.  NEED HELP "
316  INPUT C$
318  IF C$[1,1]#"Y" THEN 260
320  GOSUB 4000
330  GOTO 260
340  GOSUB 7000
345  IF Z9=0 THEN 320
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
395  IF K8=0 THEN 9998
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 408
403  PRINT  USING 314
404  INPUT C$
405  IF C$[1,1]#"Y" THEN 398
406  GOSUB 4000
407  GOTO 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  FOR I=1 TO K8
454  V[I]=A[I]
455  NEXT I
456  V[K8+1]=D
457  MAT A=ZER[K8+1]
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
650  GOTO Q1 OF 1000,1500,2500
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",9X,2(2X,D.4DE),X,3D.3D
950  RETURN 
1000  FOR K6=1 TO K8
1010  I=K6
1020  GOSUB 4500
1030  PRINT "--------------------";
1060  GOSUB 5000
1070  GOSUB 700
1080  NEXT K6
1085  K6=K6-1
1090  Q[2]=1
1102  Q[20]=K8
1104  IF Q1#3 THEN 1110
1106  Q[20]=1
1110  GOSUB 8000
1112  PRINT LIN(1)
1115  PRINT "ANALYZING RESIDUALS ..."
1120  CHAIN "$IDA31"
1500  FOR K6=1 TO K8
1505  IF K6>1 THEN 1532
1510  FOR I=1 TO K8
1520  A[I]=ABS(U[I,K8+1])
1530  NEXT I
1531  GOTO 1545
1532  IF K6<K8 THEN 1535
1533  I=K8
1534  GOTO 1570
1535  I=K6
1536  GOSUB 4500
1537  A[I]=U[I,K8+1]^2/(U[I,I]*U[K8+1,K8+1])
1540  GOSUB 4500
1541  I=I+1
1542  IF I <= K8 THEN 1536
1545  GOSUB 2000
1550  GOSUB 2100
1560  I=K6
1570  GOSUB 4500
1580  PRINT "--------------------";
1610  GOSUB 5000
1620  GOSUB 700
1630  NEXT K6
1635  K6=K6-1
1640  GOTO 1090
2000  C0=A[K6]
2005  L=K6
2010  FOR I=K6 TO K8
2020  IF A[I] <= C0 THEN 2050
2030  C0=A[I]
2040  L=I
2050  NEXT I
2060  RETURN 
2100  FOR I=1 TO K8+1
2110  A[I]=U[I,K6]
2120  U[I,K6]=U[I,L]
2130  U[I,L]=A[I]
2140  NEXT I
2150  FOR I=1 TO K8+1
2160  A[I]=U[K6,I]
2170  U[K6,I]=U[L,I]
2180  U[L,I]=A[I]
2190  NEXT I
2200  I1=V[K6]
2210  V[K6]=V[L]
2220  V[L]=I1
2230  RETURN 
2500  FOR I=1 TO K8
2510  GOSUB 4500
2520  NEXT I
2530  FOR J0=1 TO K8
2540  K6=K8-J0+1
2545  IF K6<K8 THEN 2560
2550  GOTO 2680
2560  I=K6+1
2570  K6=K6+1
2580  A[I]=U[I,K8+1]^2/(U[I,I]*U[K8+1,K8+1])
2620  I=I-1
2630  IF I >= 1 THEN 2580
2640  GOSUB 3000
2650  GOSUB 2100
2660  I=K6
2665  K6=K6-1
2670  GOSUB 4500
2680  FOR I=1 TO 20
2690  PRINT "-";
2700  NEXT I
2710  GOSUB 5000
2720  GOSUB 700
2730  NEXT J0
2740  GOTO 1090
3000  C0=A[1]
3010  L=1
3020  FOR I=1 TO K6
3030  IF A[I] >= C0 THEN 3060
3040  C0=A[I]
3050  L=I
3060  NEXT I
3070  RETURN 
4000  IF Q3=1 THEN 4100
4010  PRINT LIN(1),"THE FIRST ACTIVE OBSERVATION"
4020  PRINT  USING 4030;Q4
4030  IMAGE "IS CONTAINED IN ROW",3D," OF THE"
4035  PRINT "DATA MATRIX.  FOR YOUR REFERENCE :"
4040  PRINT LIN(1),"COLUMN  1ST OBSERVATION"
4045  PRINT 
4050  FOR J=1 TO K
4060  PRINT  USING "2X,DD,6X,D.5DE";J,X[Q4,J]
4070  NEXT J
4080  GOTO 4185
4100  PRINT LIN(1),"THESE ARE THE VARIABLES IN THE DATA MATRIX :"
4110  PRINT "COLUMN   NAME"
4115  PRINT 
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 2X,DD,4X,6A
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 
5000  T1=(N8-1)*X[N9+2,V[K8+1]]^2
5010  R=U[K8+1,K8+1]*T1
5020  R0=SQR(1-R/T1)
5030  S0=SQR(R/(N8-K6-1))
5040  F=((T1-R)/K6)/(R/(N8-K6-1))
5045  PRINT 
5046  IF F>999 THEN 5068
5050  PRINT  USING 5060;R0,S0,F
5060  IMAGE "MULT. R =",XD.4D,2X,"S.E. RES. =",XD.5DE,2X,"F =",3D.2D
5065  GOTO 5070
5068  PRINT  USING 5069;R0,S0,F
5069  IMAGE "MULT. R =",XD.4D,2X,"S.E. RES. =",XD.5DE,2X,"F =",XD.4DE
5070  RETURN 
7000  FOR I=1 TO (10 MIN K)
7010  IF M$[6*I-5,6*I]=C$[1,6] THEN 7140
7020  NEXT I
7030  IF K <= 10 THEN 7070
7040  FOR I=1 TO (K-10)
7050  IF N$[6*I-5,6*I]=C$[1,6] THEN 7160
7060  NEXT I
7070  RESTORE 
7080  FOR I=1 TO K
7090  READ A$
7100  IF A$=C$ THEN 7140
7110  NEXT I
7112  IF C$#"FITTED" THEN 7115
7113  Z9=K9
7114  GOTO 7170
7115  IF C$#"RESIDU" THEN 7120
7116  Z9=K9+1
7117  GOTO 7170
7120  Z9=0
7130  GOTO 7170
7140  Z9=I
7150  GOTO 7170
7160  Z9=10+I
7170  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 
9990  CHAIN "$IDA",9990
9998  CHAIN "$IDA",150
9999  END 
