

                 PROGRAM USEWLREG;{$e+,i+}

{THIS PROGRAM WAS WRITTEN TO USE AND TEST THE PROCEDURES PLOT AND WLREG}
{THREE ARRAYS,X,Y AND WEIGHTS ARE FILLED FROM THE CONSOLE,A WEIGHTED   }
{LINEAR REGRESSION PERFORMED,AND THEN Y AND E(Y) ARE PLOTTED ON THE    }
{CONSOLE SCREEN AS FUNCTIONS OF X.                                     }

                 LABEL 30;  {END OF PROGRAM,USED TO ABORT.}

                 CONST LAST = 100;

                 TYPE  DATA = ARRAY[1..LAST] OF REAL;

VAR
   I,N:INTEGER;
   TIME,AMPLITUDE,WEIGHTS,Y_CALC,VAR_Y:DATA;
   REG_COEFF,Y_INTCPT,COEFF_DET,CRL8N:REAL;
   VAR_TTL,VAR_INTCPT,VAR_RC,COVARIANCE,T:REAL;                 
   ZERO,TOOBIG,TOOSMALL,STOP:BOOLEAN;
   ANSWER:CHAR;

{$IPLOT.PAS }
{$IWLREG.PAS }

PROCEDURE STATS_OUT;
 BEGIN
  WRITE('   REGRESSION COEFFICIENT ...............= ');
  WRITELN(REG_COEFF:9:4);
  WRITE('   VARIANCE OF REGRESSION COEFFICIENT ...= ');
  WRITELN(VAR_RC:9:4);
  WRITE('   Y INTERCEPT ..........................= ');
  WRITELN(Y_INTCPT:9:4);
  WRITE('   VARIANCE OF Y INTERCEPT ..............= ');
  WRITELN(VAR_INTCPT:9:4);
  WRITE('   COVARIANCE OF REGRESSION PARAMETERS ..= ');
  WRITELN(COVARIANCE:9:4);
  WRITE('   COEFFICIENT OF DETERMINATION .........= ');
  WRITELN(COEFF_DET:9:4);
  WRITE('   CORRELATION COEFFICIENT ..............= ');
  WRITELN(CRL8N:9:4);
  WRITELN('     t = ',T:7:4,' for ',n-2:3,'degrees of freedom');
 END;{STATS_OUT}

BEGIN
 REPEAT
  WRITELN('YOU MAY ENTER UP TO 100 SETS OF DATA POINTS.');
  WRITELN('AMPLITUDE & EXPECTED AMPLITUDE WILL BE PLOTTED AGAINST TIME');
  WRITELN('HOW MANY DATA SETS DO YOU WISH TO ENTER?');
  WRITELN('ENTERING 0 WILL TERMINATE PROGRAM.');
  N:=0;
  REPEAT
    READ(I);
    ZERO:=I=0;
    TOOBIG:=I>100;
    TOOSMALL:=I<1;
    IF ZERO THEN GOTO 30;
    IF TOOBIG OR TOOSMALL THEN  WRITELN('PLEASE TRY AGAIN.')
    ELSE N:=I
  UNTIL N <> 0;
  WRITE('PLEASE ENTER FIRST DATA SET:');
  WRITELN('AMPLITUDE FIRST,TIME NEXT,THEN WEIGHT.');
  I:=0;
  REPEAT
    I:=I+1;
    READLN(AMPLITUDE[I],TIME[I],WEIGHTS[I]);
    IF I<N THEN WRITELN('NEXT DATA SET:')
    ELSE WRITELN('THANK YOU.')
  UNTIL I=N;

 {USE WLREG TO PERFORM A WEIGHTED LINEAR REGRESSION                    }

 WLREG(N,TIME,AMPLITUDE,WEIGHTS);

 {NEXT CALCULATE THE EXPECTED VALUES OF Y AT X FROM REGRESSION RESULTS}

  FOR I:=1 TO N DO 
   Y_CALC[I]:=Y_INTCPT+REG_COEFF*TIME[I];

  {AND PLOT AMPLITUDE AND EXPECTED Y AS FUNCTIONS OF TIME.            }
 
  PLOT(N,TIME,AMPLITUDE,Y_CALC);
 
  WRITELN('DO YOU WANT THE REGRESSION DATA?(Y/N)');
  READLN(ANSWER);
  IF ANSWER='Y' THEN STATS_OUT ;
  WRITELN('DO YOU WANT TO TRY AGAIN?(Y/N)'); 
  READLN(ANSWER);
 UNTIL ANSWER<>'Y';
30:
END.
