C ********************************************************************** C C L I N R E G C C PROGRAM: LINREG C C PROGRAMMER: DR. DAVID G. SIMPSON C DEPARTMENT OF PHYSICAL SCIENCE C PRINCE GEORGE'S COMMUNITY COLLEGE C LARGO, MARYLAND 20774 C C DATE: JANUARY 21, 2002 C C LANGUAGE: FORTRAN-77 C C DESCRIPTION: THIS PROGRAM PERFORMS A LINEAR REGRESSION ANALYSIS FOR C A SET OF DATA GIVEN AS (X,Y) PAIRS. THE OUTPUT FROM C THE PROGRAM IS THE SLOPE AND Y-INTERCEPT OF THE LEAST- C SQUARES BEST FIT STRAIGHT LINE THROUGH THE DATA POINTS. C C ********************************************************************** C ********************************************************************** C MAIN PROGRAM C ********************************************************************** PROGRAM LINREG C ********************************************************************** C VARIABLE DECLARATIONS C C B Y-INTERCEPT OF LEAST-SQUARES BEST FIT LINE C M SLOPE OF LEAST-SQUARES BEST FIT LINE C N NUMBER OF DATA POINTS C R CORRELATION COEFFICIENT C STR INPUT STRING C SUMX SUM OF X C SUMX2 SUM OF X**2 C SUMXY SUM OF X * Y C SUMY SUM OF Y C SUMY2 SUM OF Y**2 C X INPUT X DATA C Y INPUT Y DATA C ********************************************************************** DOUBLE PRECISION B DOUBLE PRECISION M DOUBLE PRECISION N DOUBLE PRECISION R CHARACTER STR*80 DOUBLE PRECISION SUMX DOUBLE PRECISION SUMX2 DOUBLE PRECISION SUMXY DOUBLE PRECISION SUMY DOUBLE PRECISION SUMY2 DOUBLE PRECISION X DOUBLE PRECISION Y C C PRINT INTRODUCTORY MESSAGE C WRITE (UNIT=*, FMT='(A)') ' LINREG - PERFORM LINEAR REGRESSION' WRITE (UNIT=*, FMT='(A/)') ' (ENTER ''END'' TO STOP DATA '// $ 'ENTRY AND COMPUTE LINEAR REGRESSION.)' C C INITIALIZE SUMS C N = 0.0D0 SUMX = 0.0D0 SUMX2 = 0.0D0 SUMXY = 0.0D0 SUMY = 0.0D0 SUMY2 = 0.0D0 C C START OF DATA ENTRY LOOP C 10 CONTINUE WRITE (UNIT=*, FMT='(A)') ' ENTER X Y: ' READ (UNIT=*, FMT='(A)') STR IF ((STR .EQ. 'END') .OR. (STR .EQ. 'end')) GO TO 20 READ (UNIT=STR, FMT=*) X, Y C C COMPUTE SUMS C N = N + 1.0D0 SUMX = SUMX + X SUMX2 = SUMX2 + X * X SUMXY = SUMXY + X * Y SUMY = SUMY + Y SUMY2 = SUMY2 + Y * Y GO TO 10 20 CONTINUE C C COMPUTE SLOPE (M), Y-INTERCEPT (B), AND CORRELATION COEFFICIENT (R) C M = (N * SUMXY - SUMX * SUMY) / (N * SUMX2 - SUMX**2) B = (SUMY * SUMX2 - SUMX * SUMXY) / (N * SUMX2 - SUMX**2) R = (SUMXY - SUMX * SUMY / N) / $ SQRT((SUMX2 - SUMX**2/N) * (SUMY2 - SUMY**2/N)) C C PRINT RESULTS C WRITE (UNIT=*, FMT='(/A,1P,E15.6)') ' SLOPE M = ', M WRITE (UNIT=*, FMT='(A, 1P,E15.6)') ' Y-INTERCEPT B = ', B WRITE (UNIT=*, FMT='(A, 1P,E15.6)') ' CORRELATION R = ', R END