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