1 ! PROGRAM POLY, VERSION 1A (31-AUG-73) 2 ! 3 ! PROGRAM POLY IS THE CONTROL PROGRAM FOR POLYNOMIAL REGRESSION 4 ! IT IS ONE OF THE SEVERAL PROGRAMS AND FILES WHICH COMPOSE COSAP, 5 ! LAWRENCE UNIVERSITY'S CONVERSATIONALLY ORIENTED STATISTICAL 6 ! ANALYSIS PACKAGE. COSAP IS DISTRIBUTED FOR EDUCATIONAL USE, ON 7 ! THE CONDITION THAT IT NOT BE SOLD, RENTED OR LEASED FOR PROFIT. 8 ! 9 ! IF YOU DESIRE FURTHER INFORMATION ABOUT COSAP, PLEASE CONTACT THE 10 ! LAWRENCE UNIVERSITY COMPUTER CENTER, APPLETON, WISCONSIN, 54911 11 ! 20 DIM N%(30) ! FUNCTION TO CREATE FILE EXT. BASED ON JOB# 25 DEF FNZ$ : IF N%(0)=30% THEN 40 ELSE CHANGE SYS(CHR$(6)+CHR$(9)+CHR$(0)) TO N% : Z8$=".J"+RIGHT(NUM$(N%(1)/2%),2%) 40 FNZ$=Z8$! EXTENSION IS".J"+JOB # 55 FNEND 70 !****POLY 85 OPEN "DAT1"+FNZ$ AS FILE 1 90 OPEN L1$(1%) FOR INPUT AS FILE 5% 100 OPEN "STEP1"+FNZ$ AS FILE 2 115 DIM#1,X(200,50),H$(30)=2,C(50,50),M4(0),M5(0),M9(0),N(0),J9(0), I4(0),I7(0),N6(0),X2(50),L1$(8)=32% 130 DIM#2,B(50),O2(0),S2(0),Z2(50,50),M2(200),M(0),L2(200), B3(200),N2(0) 135 DIM #5%,N$(50%)=8%,M1$(50%)=64%,O%(50%),P%(50%),D$(50%)=8%, T(50%),D(10000%) 145 OPEN "TMP"+FNZ$ AS FILE 3 160 DIM#3,G(200,50) 175 DEF FNR(Q):INPUT Z$:Q=INSTR(1,Z$,"SOS"):IF Q>0 THEN 205 190 Q=VAL(Z$):GOTO 220 205 Q=808 220 FNR=Q:FNEND 235 GOTO 265 250 GOTO 865 265 PRINT:PRINT"THIS PROGRAM PERFORMS POLYNOMIAL REGRESSIONS OF UP" " TO SIXTH DEGREE.":PRINT:PRINT"SPECIFY THE DEPENDENT VARIABLE";: N2=FNC%("") 280 IF N2<>N6(0) THEN 325 295 PRINT:PRINT"THE DEPENDENT VARIABLE IS THE Y VARIABLE IN AN EQUATION OF THE FORM" 310 PRINT"Y=A+B1*(X)+B2*(X^2)+B3*(X^3) ... ETC." : GO TO 265 325 PRINT:PRINT"SPECIFY THE INDEPENDENT VARIABLE"; : N1=FNC%("") 370 IF N1<>N6(0) THEN 415 385 PRINT:PRINT"THE INDEPENDENT VARIABLE IS THE X VARIABLE IN AN EQUATION OF THE FORM" 400 PRINT"Y=A+B1*(X)+B2*(X^2)+B3*(X^3) ... ETC." : GO TO 325 415 PRINT:PRINT"SPECIFY THE DEGREE OF POLYNOMIAL (MAXIMUM IS 6)"; 460 M=FNR(Q): IF M<>N6(0) THEN 535 475 PRINT:PRINT"1 DEGREE IS THE SAME AS LINEAR REGRESSION. 2 DEGREE SHOWS" 490 PRINT"ONE BEND IN THE REGRESSION LINE,3 DEGREE SHOWS TWO BENDS ETC." 505 PRINT"SPECIFY A DEGREE THAT IS ONE GREATER THAN THE NUMBER OF BENDS" 520 GOTO 415 535 IF 6>=M THEN 565 550 PRINT : PRINT "THE MAXIMUM IS 6!!! TRY AGAIN." : GOTO 415 565 IF N(0)>M+1 THEN 625 580 M=N(0)-2: PRINT 595 PRINT"DUE TO YOUR SMALL SAMPLE SIZE THE MAXIMUM DEGREE IS"M" TRY AGAIN" 610 GOTO 415 625 IF M<=1 THEN 790 640 M2=M+1 :M3=M-1 655 FOR J=1 TO M2:X3(J)=0:FOR I=1 TO M2:Z2(I,J)=0:NEXT I:NEXT J 670 FOR I=1 TO N(0):G(I,1)=X(I,N1)*X(I,N1):X3(2)=X3(2)+G(I,1) 685 IF M<=2 THEN 715 700 FOR J=2 TO M3:G(I,J)=G(I,J-1)*X(I,N1):X3(J+1)=X3(J+1) +G(I,J):NEXT J 715 NEXT I 730 X3(1)=X2(N1):X3(M2)=X2(N2) 745 FOR J=2 TO M:X3(J)=X3(J)/N(0):NEXT J 760 FOR I=1 TO N(0):B(1)=X(I,N1)-X3(1):B(M2)=X(I,N2)-X3(M2): FOR J=2 TO M:B(J)=G(I,J-1)-X3(J):NEXT J:FOR J=1 TO M2:FOR K=J TO M2 :Z2(J,K)=Z2(J,K)+B(J)*B(K):Z2(K,J)=Z2(J,K):NEXT K:NEXT J:NEXT I:GOTO 805 790 Z2(1,1)=C(N1,N1):Z2(1,2)=C(N1,N2):Z2(2,1)=C(N2,N1): Z2(2,2)=C(N2,N2):X3(1)=X2(N1):X3(2)=X2(N2) 805 M(0)=M:N2(0)=N2:M2(1)=N1 820 FOR I=1 TO M+2:B3(I)=X3(I):NEXT I 835 S$=" POLY 0250":K$=SYS(CHR$(8)+S$) 850 CLOSE 1,2%,3%,5% :CHAIN"FQPC" 865 OPEN "DAT1"+FNZ$ AS FILE 1 880 OPEN "STEP1"+FNZ$ AS FILE 2 895 OPEN"TMP"+FNZ$ AS FILE 3 900 OPEN L1$(1%) FOR INPUT AS FILE 5% 910 I4(0)=0 925 PRINT:PRINT"DO YOU WISH TO FIT MORE POLYNOMIALS"; 940 INPUT N$:IF N$="YES" THEN 265 955 IF N$<>"SOS" THEN 985 970 PRINT:PRINT"YOU MAY USE DIFFERENT VARIABLES":GOTO 925 985 KILL"STEP1"+FNZ$:KILL"TMP"+FNZ$ 1000 S$=" COSAP 0640":K$=SYS(CHR$(8)+S$) 1015 CLOSE 1%,5% :CHAIN"COSAP" 0640 30000 DEF FNC%(X$) ! FUNCTION TO TRANSLATE VARIABLE NAMES 30010 PRINT X$; UNLESS X$="" : INPUT V$ : IF V$="" THEN PRINT : PRINT "VARIABLE NAME NEEDED "; : GOTO 30010 30020 GOTO 30040 IF V$=N$(I%) FOR I%=1% TO O%(0%) 30025 IF LEFT(V$,3%)="SOS" THEN FNC%=808 : GOTO 30050 30030 PRINT "*NO SUCH VARIABLE* TRY AGAIN." : GOTO 30010 30040 FNC%=I% 30050 FNEND 32767 END