home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol131 / usewlreg.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1984-04-29  |  2.6 KB  |  93 lines

  1.  
  2.  
  3.                  PROGRAM USEWLREG;{$e+,i+}
  4.  
  5. {THIS PROGRAM WAS WRITTEN TO USE AND TEST THE PROCEDURES PLOT AND WLREG}
  6. {THREE ARRAYS,X,Y AND WEIGHTS ARE FILLED FROM THE CONSOLE,A WEIGHTED   }
  7. {LINEAR REGRESSION PERFORMED,AND THEN Y AND E(Y) ARE PLOTTED ON THE    }
  8. {CONSOLE SCREEN AS FUNCTIONS OF X.                                     }
  9.  
  10.                  LABEL 30;  {END OF PROGRAM,USED TO ABORT.}
  11.  
  12.                  CONST LAST = 100;
  13.  
  14.                  TYPE  DATA = ARRAY[1..LAST] OF REAL;
  15.  
  16. VAR
  17.    I,N:INTEGER;
  18.    TIME,AMPLITUDE,WEIGHTS,Y_CALC,VAR_Y:DATA;
  19.    REG_COEFF,Y_INTCPT,COEFF_DET,CRL8N:REAL;
  20.    VAR_TTL,VAR_INTCPT,VAR_RC,COVARIANCE,T:REAL;                 
  21.    ZERO,TOOBIG,TOOSMALL,STOP:BOOLEAN;
  22.    ANSWER:CHAR;
  23.  
  24. {$IPLOT.PAS }
  25. {$IWLREG.PAS }
  26.  
  27. PROCEDURE STATS_OUT;
  28.  BEGIN
  29.   WRITE('   REGRESSION COEFFICIENT ...............= ');
  30.   WRITELN(REG_COEFF:9:4);
  31.   WRITE('   VARIANCE OF REGRESSION COEFFICIENT ...= ');
  32.   WRITELN(VAR_RC:9:4);
  33.   WRITE('   Y INTERCEPT ..........................= ');
  34.   WRITELN(Y_INTCPT:9:4);
  35.   WRITE('   VARIANCE OF Y INTERCEPT ..............= ');
  36.   WRITELN(VAR_INTCPT:9:4);
  37.   WRITE('   COVARIANCE OF REGRESSION PARAMETERS ..= ');
  38.   WRITELN(COVARIANCE:9:4);
  39.   WRITE('   COEFFICIENT OF DETERMINATION .........= ');
  40.   WRITELN(COEFF_DET:9:4);
  41.   WRITE('   CORRELATION COEFFICIENT ..............= ');
  42.   WRITELN(CRL8N:9:4);
  43.   WRITELN('     t = ',T:7:4,' for ',n-2:3,'degrees of freedom');
  44.  END;{STATS_OUT}
  45.  
  46. BEGIN
  47.  REPEAT
  48.   WRITELN('YOU MAY ENTER UP TO 100 SETS OF DATA POINTS.');
  49.   WRITELN('AMPLITUDE & EXPECTED AMPLITUDE WILL BE PLOTTED AGAINST TIME');
  50.   WRITELN('HOW MANY DATA SETS DO YOU WISH TO ENTER?');
  51.   WRITELN('ENTERING 0 WILL TERMINATE PROGRAM.');
  52.   N:=0;
  53.   REPEAT
  54.     READ(I);
  55.     ZERO:=I=0;
  56.     TOOBIG:=I>100;
  57.     TOOSMALL:=I<1;
  58.     IF ZERO THEN GOTO 30;
  59.     IF TOOBIG OR TOOSMALL THEN  WRITELN('PLEASE TRY AGAIN.')
  60.     ELSE N:=I
  61.   UNTIL N <> 0;
  62.   WRITE('PLEASE ENTER FIRST DATA SET:');
  63.   WRITELN('AMPLITUDE FIRST,TIME NEXT,THEN WEIGHT.');
  64.   I:=0;
  65.   REPEAT
  66.     I:=I+1;
  67.     READLN(AMPLITUDE[I],TIME[I],WEIGHTS[I]);
  68.     IF I<N THEN WRITELN('NEXT DATA SET:')
  69.     ELSE WRITELN('THANK YOU.')
  70.   UNTIL I=N;
  71.  
  72.  {USE WLREG TO PERFORM A WEIGHTED LINEAR REGRESSION                    }
  73.  
  74.  WLREG(N,TIME,AMPLITUDE,WEIGHTS);
  75.  
  76.  {NEXT CALCULATE THE EXPECTED VALUES OF Y AT X FROM REGRESSION RESULTS}
  77.  
  78.   FOR I:=1 TO N DO 
  79.    Y_CALC[I]:=Y_INTCPT+REG_COEFF*TIME[I];
  80.  
  81.   {AND PLOT AMPLITUDE AND EXPECTED Y AS FUNCTIONS OF TIME.            }
  82.  
  83.   PLOT(N,TIME,AMPLITUDE,Y_CALC);
  84.  
  85.   WRITELN('DO YOU WANT THE REGRESSION DATA?(Y/N)');
  86.   READLN(ANSWER);
  87.   IF ANSWER='Y' THEN STATS_OUT ;
  88.   WRITELN('DO YOU WANT TO TRY AGAIN?(Y/N)'); 
  89.   READLN(ANSWER);
  90.  UNTIL ANSWER<>'Y';
  91. 30:
  92. END.
  93.