home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 062.REGRESS.BAS < prev    next >
BASIC Source File  |  1979-12-31  |  4KB  |  85 lines

  1. 100 REM
  2. 110 REM "Linear Regression Program" by Randy Hawkins
  3. 120 REM (C) Copyright 1989, One Thousand Magazine and Randy Hawkins
  4. 130 REM
  5. 132 COMMON RH: IF RH = 0 THEN SYSTEM
  6. 134 CLEAR: KEY (17) ON: KEY 17, CHR$(0) + CHR$(1)
  7. 136 ON KEY (17) GOSUB 780
  8. 140 SCREEN 0: WIDTH 80: KEY OFF: COLOR 14,0: CLS: DIM X(20),Y(20)
  9. 150 PRINT "LINEAR REGRESSION PROGRAM": PRINT
  10. 160 PRINT "This program will statistically evaluate the relationship"
  11. 170 PRINT "existing between two groups of variables, and allow you to"
  12. 180 PRINT "predict the value of either variable at specified value(s)"
  13. 190 PRINT "of the other.": PRINT
  14. 200 REM
  15. 210 REM Accept names for each set of variables
  16. 220 REM
  17. 230 PRINT "What is the name of the first"
  18. 240 LINE INPUT "variable or group of measurements? "; XNAME$
  19. 250 PRINT: PRINT "What is the name of the other"
  20. 260 LINE INPUT "variable or group of measurements? "; YNAME$
  21. 270 REM
  22. 280 REM Accept X and Y values
  23. 290 REM
  24. 300 N = N + 1: PRINT: PRINT "Enter a measured or observed"
  25. 310 PRINT "value for "; XNAME$;: INPUT X(N): PRINT
  26. 320 PRINT "When "; XNAME$; " equals"; X(N); "what is"
  27. 330 PRINT "the corresponding value of ";YNAME$;: INPUT Y(N)
  28. 340 IF N = 1 THEN 300 ELSE PRINT
  29. 350 PRINT "Do you want to enter another pair of points (Y/N)? ";
  30. 360 A$ = INKEY$: IF A$ = "Y" OR A$ = "y" THEN PRINT "Y": GOTO 300
  31. 370 IF A$ = "N" OR A$ = "n" THEN PRINT "N" ELSE 360
  32. 380 REM
  33. 390 REM Present Regression Options
  34. 400 REM
  35. 410 PRINT: PRINT "Program Options": PRINT
  36. 420 PRINT "1 ... Review All Entries in Table Form"
  37. 430 PRINT "2 ... Add More Data Points"
  38. 440 PRINT "3 ... Calculate Correlation Coefficient"
  39. 450 PRINT "4 ... Given "; XNAME$; ", Predict Value for "; YNAME$
  40. 460 PRINT "5 ... Given "; YNAME$; ", Predict Value for "; XNAME$
  41. 470 PRINT "6 ... Begin a New Study": PRINT "7 ... Exit this Program"
  42. 480 PRINT: PRINT "Enter the number of your selection --> ";
  43. 490 A$ = INKEY$: IF A$ < "1" OR A$ > "7" THEN 490
  44. 500 PRINT A$: PRINT: ON VAL(A$) GOTO 540,300,630,680,710,770,780
  45. 510 REM
  46. 520 REM Data Table
  47. 530 REM
  48. 540 PRINT: PRINT XNAME$; CHR$(32); CHR$(61); X(1); SPC(5);
  49. 550 B = POS(0): PRINT YNAME$; CHR$(32); CHR$(61); Y(1)
  50. 560 FOR A = 2 TO N: PRINT XNAME$; CHR$(32); CHR$(61); X(A);
  51. 570 PRINT TAB(B); YNAME$; CHR$(32); CHR$(61); Y(A): NEXT A
  52. 580 PRINT: PRINT "Press <ANY KEY> to continue...": A$ = INKEY$
  53. 590 WHILE A$ = "": A$ = INKEY$: WEND: GOTO 410
  54. 600 REM
  55. 610 REM Correlation coefficient
  56. 620 REM
  57. 630 GOSUB 820: PRINT "For this set of data, the correlation"
  58. 640 PRINT "coefficient is equal to"; ABS(R2)*100; "%.": GOTO 410
  59. 650 REM
  60. 660 REM Use slope and intercept for predictions
  61. 670 REM
  62. 680 GOSUB 820: PRINT "Enter a value for "; XNAME$; " --> ";
  63. 690 INPUT "", XNEW: YNEW = SLOPE * XNEW + INTER
  64. 700 PRINT "Predicted Value of "; YNAME$; " --> "; YNEW: GOTO 410
  65. 710 GOSUB 820: PRINT "Enter a value for "; YNAME$; " --> ";
  66. 720 INPUT "", YNEW: XNEW = (YNEW - INTER) / SLOPE
  67. 730 PRINT "Predicted Value of "; XNAME$; " --> "; XNEW: GOTO 410
  68. 740 REM
  69. 750 REM Restart program or quit
  70. 760 REM
  71. 770 GOTO 134
  72. 780 CLS: LOCATE 12, 30: PRINT "One Moment Please...": RUN "menu"
  73. 790 REM
  74. 800 REM Calculate key statistical quantities
  75. 810 REM
  76. 820 SX = 0: SY = 0: SX2 = 0: SY2 = 0: SXY = 0
  77. 830 FOR A = 1 TO N: SX = SX + X(A): SY = SY + Y(A)
  78. 840 SX2 = SX2 + X(A) * X(A): SY2 = SY2 + Y(A) * Y(A)
  79. 850 SXY = SXY + X(A) * Y(A): NEXT A
  80. 860 SLOPE = (SXY - SX * SY / N) / (SX2 - SX * SX / N)
  81. 870 INTER = (SY - SLOPE * SX) / N
  82. 880 STDVX = SQR((SX2 - SX * SX / N) / (N - 1))
  83. 890 STDVY = SQR((SY2 - SY * SY / N) / (N - 1))
  84. 900 R = SLOPE * STDVX / STDVY: R2 = R * R: RETURN
  85.