LINREG: PROCEDURE OPTIONS (MAIN) ; /********************************************************************** L I N R E G PROGRAM: LINREG PROGRAMMER: DR. DAVID G. SIMPSON DEPARTMENT OF PHYSICAL SCIENCE PRINCE GEORGE'S COMMUNITY COLLEGE LARGO, MARYLAND 20774 DATE: JANUARY 21, 2002 LANGUAGE: PL/I DESCRIPTION: THIS PROGRAM PERFORMS A LINEAR REGRESSION ANALYSIS FOR A SET OF DATA GIVEN AS (X,Y) PAIRS. THE OUTPUT FROM THE PROGRAM IS THE SLOPE AND Y-INTERCEPT OF THE LEAST- SQUARES BEST FIT STRAIGHT LINE THROUGH THE DATA POINTS. ********************************************************************* ********************************************************************** VARIABLE DECLARATIONS *********************************************************************/ DECLARE B FLOAT, M FLOAT, N FLOAT, R FLOAT, STR CHARACTER(40), SUMX FLOAT, SUMX2 FLOAT, SUMXY FLOAT, SUMY FLOAT, SUMY2 FLOAT, X FLOAT, Y FLOAT; /* PRINT INTRODUCTORY MESSAGE */ PUT SKIP EDIT ('LINREG - PERFORM LINEAR REGRESSION') (A) ; PUT SKIP EDIT (' (ENTER END TO STOP DATA ENTRY AND '|| 'COMPUTE LINEAR REGRESSION.)') (A) ; /* INITIALIZE SUMS */ N = 0.0 ; SUMX = 0.0 ; SUMX2 = 0.0 ; SUMXY = 0.0 ; SUMY = 0.0 ; SUMY2 = 0.0 ; /* START OF DATA ENTRY LOOP */ DO WHILE (STR ^= 'END' & STR ^= 'end') ; PUT EDIT (' ENTER X Y: ') (A) ; GET LIST (STR) ; IF (STR = 'END') | (STR = 'end') THEN GO TO DONE ; GET STRING (STR) LIST (X, Y) ; /* COMPUTE SUMS */ N = N + 1.0 ; SUMX = SUMX + X ; SUMX2 = SUMX2 + X * X ; SUMXY = SUMXY + X * Y ; SUMY = SUMY + Y ; SUMY2 = SUMY2 + Y * Y ; DONE: /* END OF LOOP */ END ; /* COMPUTE AND PRINT RESULTS. */ M = N * SUMXY - SUMX * SUMY ; M = M / (N * SUMX2 - SUMX * SUMX) ; B = (SUMY * SUMX2 - SUMX * SUMXY) ; B = B / (N * SUMX2 - SUMX * SUMX) ; R = (SUMXY - SUMX * SUMY / N) ; R = R / SQRT((SUMX2 - SUMX*SUMX/N) * (SUMY2 - SUMY*SUMY/N)) ; PUT SKIP EDIT ('SLOPE M = ', M) (A, E(15,6)) ; PUT SKIP EDIT ('Y-INTERCEPT B = ', B) (A, E(15,6)) ; PUT SKIP EDIT ('CORRELATION R = ', R) (A, E(15,6)) ; END LINREG ;