10 CLS: PRINT " -- Fits Multiplicative Model --" 12 PRINT: PRINT " -- Uses ITERATIVE Method --" 13 PRINT 20 LOCATE 9,20: INPUT " Number of rows";R 30 LOCATE 10,20:INPUT " Number of columns";C 40 DIM X(R,C),S(R),T(C),S1(R),T1(C),S2(R),T2(C),X2(R,C) 45 LOCATE 12,20:PRINT " enter data, by rows": PRINT 50 FOR I = 1 TO R 55 PRINT:PRINT "Row"; I 60 FOR J = 1 TO C 70 PRINT "x(";I;",";J;")="; 80 INPUT X(I,J) 90 NEXT J 100 NEXT I 110 PRINT "Do you wish to enter initial estimates?" 112 A$=INKEY$:IF A$="" THEN 112 114 IF A$="y" OR A$="Y" THEN 300 120 FOR I = 1 TO R: S1(I)=0:S2(I)=0:NEXT I 125 FOR J = 1 TO C: T1(J)=0:T2(J)=0:NEXT J 130 A1=(X(R,C)-X(R,1))/(X(1,C)-X(1,1)) 132 IF A1 = 1 THEN A1 = 1.000001 135 B=(X(1,1)*A1-X(R,1))/(A1-1) 140 CLS: PRINT "First estimate of B" 141 PRINT B: PRINT 150 FOR I = 1 TO R : FOR J= 1 TO C: X2(I,J)= X(I,J) - B:NEXT:NEXT 155 GT = 0 160 FOR I = 1 TO R: S1(I) = 0 165 FOR J = 1 TO C 170 GT = GT + X2(I,J) 175 S1(I) = S1(I) + X2(I,J) 180 T1(J) = T1(J) + X2(I,J) 185 NEXT J 190 NEXT I 191 PRINT:PRINT "Estimates of S" 192 FOR I = 1 TO R: S(I)=S1(I)/GT: PRINT I,S(I):NEXT 193 PRINT "Press any key to continue" 194 A$=INKEY$:IF A$="" THEN 194 195 PRINT:PRINT"Estimates of T":PRINT 196 FOR J = 1 TO C:T(J)=T1(J):PRINT J,INT(T(J)*1000+.5)/1000: NEXT J 203 PRINT "Press any key to continue" 204 A$=INKEY$:IF A$="" THEN 204 298 GOTO 310 300 GOSUB 500 305 SED = 0 310 PRINT " Fit of initial estimates":PRINT 315 PRINT " I J X(I,J) pred res":PRINT 317 SED = 0 320 FOR I = 1 TO R: FOR J = 1 TO C 324 PR = S(I) * T(J) + B 326 ED = X(I,J) - PR: SED = SED + ED * ED 328 PRINT I;J;X(I,J);INT(1000*PR+.5)/1000;INT(1000*ED+.5)/1000 330 NEXT:NEXT 340 PRINT: PRINT "Sum of squared errors": PRINT "ss="; SED 342 PRINT "Press any key to continue" 345 A$=INKEY$:IF A$="" THEN 345 350 CLS: PRINT "Least-Squares" 352 INPUT "Tolerance (.01)"; TL 360 '----------- ANOTHER LOOP HERE ------------- 369 BT=O 370 FOR I=1 TO R: FOR J=1 TO C: BT=BT+X(I,J)-S(I)*T(J): NEXT:NEXT 375 B=BT/(R*C) 380 FOR I=1 TO R: S2(I)=0: S1(I)=0: FOR J=1 TO C 382 S1(I)=S1(I)+(X(I,J)-B)*T(J) 383 S2(I)=S2(I)+T(J)*T(J) 384 NEXT: S1(I)= S1(I)/S2(I):NEXT 390 FOR J=1 TO C:T1(J)=0:T2(J)=0: FOR I = 1 TO R 392 T1(J)=T1(J)+(X(I,J)-B)*S(I) 393 T2(J)=T2(J)+S(I)*S(I) 394 NEXT: T1(J)=T1(J)/T2(J):NEXT 400 SD=0 410 FOR I=1 TO R: SD=SD+ABS(S1(I)-S(I)):NEXT 420 FOR J=1 TO C: SD=SD+ABS(T1(J)-T(J)):NEXT 440 PRINT "Change="; SD 450 FOR I=1 TO R: S(I)=S1(I):NEXT 460 FOR J=1 TO C: T(J)=T1(J):NEXT 465 IF SDTL THEN 360 480 INPUT "Print results (yes/no)";A$ 482 IF A$ = "YES" OR A$= "yes" THEN GOSUB 800 484 PRINT "Another look at these data": INPUT " (Y/N)";A$ 485 IF A$= "Y" OR A$="y" THEN 110 490 PRINT "More data? (Y/N)" 492 A$=INKEY$:IF A$="" THEN 492 494 IF A$="Y" OR A$= "y" THEN RUN 499 END 500 CLS: PRINT "Input estimates of S(I) ": PRINT 510 FOR I = 1 TO R 520 PRINT "S(";I;")="; 530 INPUT S(I) 540 NEXT 550 PRINT: PRINT "Input estimates of T(J)": PRINT 560 FOR J= 1 TO C: PRINT "T(";J;")="; 570 INPUT T(J) 580 NEXT 585 PRINT 590 INPUT "Estimate of B"; B 600 RETURN 700 CLS: PRINT "SOLUTION" 710 PRINT "Row scale values": PRINT 720 FOR I=1 TO R: PRINT I, S(I): NEXT 725 PRINT "Hit a key to continue" 730 A$=INKEY$: IF A$="" THEN 730 740 PRINT "Column scale values": PRINT 750 FOR J=1 TO C: PRINT J, T(J):NEXT 755 PRINT "Press any key to continue" 760 A$=INKEY$: IF A$="" THEN 760 770 PRINT "Estimate of B= "; B 775 PRINT "Hit a key to continue" 780 A$=INKEY$: IF A$="" THEN 780 790 PRINT "Indices, Data, Predictions, Residuals" 792 AD=0: FOR I= 1 TO R: FOR J=1 TO C: PR=S(I)*T(J)+B 794 ED=X(I,J)-PR 795 AD=AD+ED*ED 796 PRINT I;J;X(I,J);" ",INT(1000*PR+.5)/1000,INT(1000*ED+.5)/1000:NEXT:NEXT 797 PRINT "Sum of squares=",AD 799 RETURN 800 INPUT "Title";A$ 805 LPRINT "Solution -- Fit of Multiplicative Model" 807 LPRINT:LPRINT:LPRINT A$:LPRINT 810 LPRINT:LPRINT "Row scale values":LPRINT 820 FOR I=1 TO R: LPRINT I,S(I):NEXT 830 LPRINT 840 LPRINT "Column scale values":LPRINT 850 FOR J=1 TO C:LPRINT J, T(J): NEXT 870 LPRINT:LPRINT "Estimates of B=",B 880 LPRINT 890 LPRINT "Indices, Data, Predictions, Residuals' 892 AD=0: FOR I= 1 TO R: FOR J=1 TO C: PR=S(I)*T(J)+B 894 ED=X(I,J)-PR 895 AD=AD+ED*ED 896 LPRINT I;J;X(I,J);" ",INT(1000*PR+.5)/1000,INT(1000*ED+.5)/1000:NEXT:NEXT 897 LPRINT 898 LPRINT "Sum of squares=",AD 899 RETURN