IDENTIFICATION DIVISION. PROGRAM-ID. LINREG. AUTHOR. Dr David G Simpson. DATE-WRITTEN. February 2, 2002. DATE-COMPILED. February 2, 2002. SECURITY. None. * * Program: LINREG * * Programmer: Dr. David G. Simpson * Department of Physical Science * Prince George's Community College * Largo, Maryland 20774 * * Date: February 2, 2002 * * Language: COBOL * * 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. * * DATA DIVISION. WORKING-STORAGE SECTION. 77 DoneFlag PICTURE IS 9 VALUE 0. 88 AllDone VALUE 1. 77 B PICTURE IS S9(6)V9(6). 77 M PICTURE IS S9(6)V9(6). 77 N PICTURE IS S9(6)V9(6). 77 R PICTURE IS S9(6)V9(6). 77 SumX PICTURE IS S9(6)V9(6). 77 SumX2 PICTURE IS S9(6)V9(6). 77 SumXY PICTURE IS S9(6)V9(6). 77 SumY PICTURE IS S9(6)V9(6). 77 SumY2 PICTURE IS S9(6)V9(6). 77 Tmp1 PICTURE IS S9(6)V9(6). 77 Tmp2 PICTURE IS S9(6)V9(6). 77 X PICTURE IS S9(6)V9(6). 77 Y PICTURE IS S9(6)V9(6). 77 OutFormat PICTURE IS -Z(5)9.9(6). * PROCEDURE DIVISION. MainSection. DISPLAY " ". DISPLAY "LINREG - Perform linear regression". DISPLAY " (Enter X=-9999 to stop data entry and compute lin - "ear regression.)". DISPLAY " ". * PERFORM InitializeSums. PERFORM ReadData. PERFORM Compute-PrintResults. STOP RUN. * * Initialize sums * InitializeSums. MOVE ZERO TO N. MOVE ZERO TO SumX. MOVE ZERO TO SumX2. MOVE ZERO TO SumXY. MOVE ZERO TO SumY. MOVE ZERO TO SumY2. * * Read in data * ReadData. Move 0 TO DoneFlag. PERFORM UNTIL AllDone DISPLAY " " DISPLAY "Enter X: " WITH NO ADVANCING ACCEPT X IF X IS NOT EQUAL TO -9999 THEN DISPLAY "Enter Y: " WITH NO ADVANCING ACCEPT Y ADD 1 TO N ADD X TO SumX COMPUTE SumX2 = SumX2 + X * X COMPUTE SumXY = SumXY + X * Y ADD Y TO SumY COMPUTE SumY2 = SumY2 + Y * Y ELSE MOVE 1 TO DoneFlag END-IF END-PERFORM. * * Compute and print results. * Compute-PrintResults. COMPUTE M = (N * SumXY - SumX * SumY). COMPUTE M = M / (N * SumX2 - SumX**2). COMPUTE B = (SumY * SumX2 - SumX * SumXY). COMPUTE B = B / (N * SumX2 - SumX**2). COMPUTE Tmp1 = SumX2 - SumX ** 2 / N. COMPUTE Tmp2 = SumY2 - SumY ** 2 / N. COMPUTE R = (SumXY - SumX * SumY / N). COMPUTE R = R / (Tmp1 * Tmp2) ** 0.5. DISPLAY "Slope M = " WITH NO ADVANCING. MOVE M TO OutFormat. DISPLAY OutFormat. DISPLAY "y-intercept B = " WITH NO ADVANCING. MOVE B TO OutFormat. DISPLAY OutFormat. DISPLAY "Correlation R = " WITH NO ADVANCING. MOVE R TO OutFormat. DISPLAY OutFormat.