5   REM  ADDFIT--Fits Additive Model to Two Factors
10   CLS: LOCATE 5,20: PRINT " -- Fits Additive Model --"
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)
50   LOCATE 12,20:PRINT " Enter data, by rows"
60   FOR I = 1 TO R
70       PRINT:PRINT "Row"; I
80       FOR J = 1 TO C
90           PRINT "X(";I;",";J;")=";
100           INPUT X(I,J)
110       NEXT J
120   NEXT I
130   FOR I = 1 TO R:FOR J = 1 TO C
140     X2(I,J)=X(I,J)
150  NEXT:NEXT
160  FOR I = 1 TO R: S1(I)=0:NEXT I
170  FOR J = 1 TO C: T1(J)=0:NEXT J
180  GT = 0
190  FOR I = 1 TO R:S1(I)=0
200     FOR J = 1 TO C
210         GT = GT + X2(I,J)
220         S1(I)= S1(I)+X2(I,J)
230         T1(J)=T1(J)+X2(I,J)
240     NEXT J: NEXT I
250  PRINT:PRINT "Estimates of S" :PRINT "(Marginal means)":PRINT
260  FOR I = 1 TO R:S(I)=S1(I)/C:PRINT I,S(I):NEXT
270  PRINT "Press any key to continue"
280  ANSWER$=INKEY$:IF ANSWER$="" THEN 280
290  PRINT:PRINT"Estimates of T":PRINT "(Marginal means)":PRINT
300  FOR J = 1 TO C:T(J)=T1(J)/R:PRINT J,INT(T(J)*1000)/1000: NEXT J
310  B=0-GT/(R*C)
320  PRINT:PRINT"Estimate of B (minus grand mean)=";B:PRINT:PRINT
330  PRINT "Press any key to continue"
340  ANSWER$=INKEY$:IF ANSWER$="" THEN 340
350  PRINT "Fit of Additive model":PRINT
360  SED = 0
370  PRINT" I  J  X(I,J)    pred     res":PRINT
380  FOR I = 1 TO R:FOR J = 1 TO C
390      PR=S(I)+T(J)+B
400      ED=X2(I,J)-PR
410      SED = SED +ED^2
420  PRINT I;J;" "; X2(I,J);"    ";INT(1000*PR+.5)/1000;"  ";INT(1000*ED+.5)/1000
430  NEXT:NEXT
440  PRINT:PRINT"Sum of squared errors":PRINT"ss=";SED
450  PRINT "Press any key to continue"
460  ANSWER$=INKEY$:IF ANSWER$="" THEN 460
470  PRINT:PRINT: PRINT "Print Results?"
480  INPUT "(type yes or no...)"; A$
485  A$=LEFT$(A$,1)
490  IF A$="Y" OR A$="y" THEN GOSUB 540
500  PRINT: PRINT "More data? (Y/N)"
510  A$=INKEY$:IF A$="" THEN 510
520  IF A$="Y" OR A$="y" THEN RUN
530  END
540  PRINT "Please enter a filename and a title"
545  INPUT"Filename (e.g., ADDOUT.TXT)";F$
547  OPEN F$ FOR OUTPUT AS #1
550  INPUT "TITLE";B$
560  PRINT #1,"FIT OF ADDITIVE MODEL":PRINT #1,:PRINT #1,
570  PRINT #1,B$
580  PRINT #1,:PRINT #1,"Row scale values":PRINT #1,
590  AD = 0!
600  FOR I = 1 TO R:PRINT #1, I,S(I):NEXT I
610  PRINT #1,:PRINT #1, "Column scale values":PRINT #1,
620  FOR J = 1 TO C:PRINT #1, J,T(J):NEXT J
630  PRINT #1,:PRINT #1, "Estimate of B (minus grand mean) =",B
640  PRINT #1,:PRINT #1, "Indices,     Data,    Predictions,  Residuals"
650  FOR I=1 TO R: FOR J = 1 TO C
660  PR=S(I) + T(J) + B
670  ED=X2(I,J)-PR
680  AD=AD+ED*ED
690  PRINT #1, I;J,X2(I,J),INT(1000*PR)/1000,INT(1000*ED)/1000:NEXT:NEXT
700  PRINT #1,:PRINT #1, "Sum of squares = ",AD
705  CLOSE #1
710  RETURN