home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib21a.dsk / AUGUST.1984 / REGRESS.bas < prev    next >
BASIC Source File  |  2023-02-26  |  10KB  |  198 lines

  1. 10  REM  ***********************
  2. 20  REM  *       REGRESS       *
  3. 30  REM  * BY KENNETH BUCHHOLZ *
  4. 40  REM  * COPYRIGHT (C)  1984 *
  5. 50  REM  * BY MICROSPARC, INC. *
  6. 60  REM  * LINCOLN, MA.  01773 *
  7. 70  REM  ***********************
  8. 80  DIM X(500),Y(500): HOME : POKE 32,5: PRINT : PRINT "******************************": REM  30 *'S
  9. 90  PRINT "*******    REGRESS    ********"
  10. 100  PRINT "******************************": REM  30 *'S
  11. 110  VTAB 12: POKE 32,0: PRINT : HTAB 9: PRINT "BY DR. KENNETH BUCHHOLZ"
  12. 120  VTAB 22: PRINT "** COPYRIGHT 1984 BY MICROSPARC, INC. **": VTAB 23: HTAB 8: PRINT "<PRESS ANY KEY TO START>": WAIT  -16384,128: POKE  -16368,0
  13. 130  ONERR  GOTO 1990
  14. 140  REM  *** MAIN MENU ***
  15. 150  HOME : PRINT  TAB( 18);"MENU": PRINT : PRINT 
  16. 160  PRINT  TAB( 5);"1.  ENTER DATA": PRINT 
  17. 170  PRINT  TAB( 5);"2.  REVIEW DATA": PRINT 
  18. 180  PRINT  TAB( 5);"3.  EDIT DATA": PRINT 
  19. 190  PRINT  TAB( 5);"4.  RUN REGRESSION": PRINT 
  20. 200  PRINT  TAB( 5);"5.  ROUTE REGRESSION STATISTICS": PRINT  TAB( 5);"       TO PRINTER IN SLOT 1": PRINT 
  21. 210  PRINT  TAB( 5);"6.  PREDICT Y FROM ENTERED X": PRINT 
  22. 220  PRINT  TAB( 5);"7.  PREDICT X FROM ENTERED Y": PRINT 
  23. 230  PRINT  TAB( 5);"8.  EXIT TO APPLESOFT": PRINT : PRINT 
  24. 240  PRINT  TAB( 16);"CHOICE:";: INPUT Z$
  25. 250  IF Z$ = "1"  THEN  GOTO 380
  26. 260  IF Z$ = "2"  THEN  GOTO 710
  27. 270  IF Z$ = "3"  THEN  GOTO 830
  28. 280  IF Z$ = "4"  THEN  HOME : GOSUB 1200: VTAB 23: PRINT  TAB( 8);"PRESS <RTN> TO CONTINUE";: INPUT Z$: GOTO 150
  29. 290  IF Z$ < >"5"  THEN  GOTO 330
  30. 300  IF C = 0  THEN  HOME : PRINT "NO DATA HAS BEEN ENTERED YET!": GOSUB 1980: GOTO 150
  31. 310  IF C = 1  THEN  HOME : PRINT "ONLY ONE DATA VALUE HAS BEEN ENTERED.": PRINT : PRINT "CANNOT DO REGRESSION ON ONLY ONE DATA": PRINT "   VALUE...": GOSUB 1980: GOTO 150
  32. 320  HOME : PRINT  CHR$(4);"PR#1": GOSUB 1200: PRINT : PRINT  CHR$(4);"PR#0": VTAB 23: PRINT  TAB( 7);"PRESS <RTN> TO CONTINUE";: INPUT Z$: GOTO 150
  33. 330  IF Z$ = "6"  THEN  GOTO 1540
  34. 340  IF Z$ = "7"  THEN  GOTO 1760
  35. 350  IF Z$ = "8"  THEN  GOTO 1960
  36. 360  GOTO 150
  37. 370  REM  *** DATA ENTRY MODE ***
  38. 380  HOME : PRINT  TAB( 15);"DATA ENTRY"
  39. 390  VTAB 3: PRINT "DO YOU WISH TO CLEAR EXISTING DATA";: INPUT Z$
  40. 400  IF Z$ = "Y"  OR Z$ = "YES"  THEN  GOTO 430
  41. 410  IF Z$ = "N"  OR Z$ = "NO"  THEN  GOTO 150
  42. 420  GOTO 390
  43. 430  VTAB 3: PRINT  SPC( 39): PRINT 
  44. 440  VTAB 3: FLASH : PRINT "PLEASE WAIT": NORMAL 
  45. 450  FOR N = 1 TO 500
  46. 460 X(N) = 0:Y(N) = 0
  47. 470  NEXT N
  48. 480 N = 0:XS = 0:SX = 0:SY = 0:XY = 0:A = 0:B = 0:R = 0:C = 0
  49. 490  VTAB 3: PRINT  SPC( 39): PRINT 
  50. 500  VTAB 4: PRINT "NAME OF X VARIABLE: ";: INPUT XN$: IF XN$ = ""  THEN XN$ = "NO NAME"
  51. 510  VTAB 4: PRINT  SPC( 39): PRINT : VTAB 4: PRINT "NAME OF X VARIABLE: ";XN$
  52. 520  VTAB 5: PRINT "NAME OF Y VARIABLE: ";: INPUT YN$: IF YN$ = ""  THEN YN$ = "NO NAME"
  53. 530  VTAB 5: PRINT  SPC( 39): PRINT : VTAB 5: PRINT "NAME OF Y VARIABLE: ";YN$
  54. 540  PRINT : PRINT 
  55. 550  FOR N = 1 TO 500
  56. 560 C = C +1
  57. 570  VTAB 10: PRINT  SPC( 35): PRINT "": VTAB 12: PRINT  SPC( 35): VTAB 20: HTAB 6: PRINT "(<RTN> TO END DATA ENTRY)"
  58. 580  VTAB 10: PRINT "X(";C;") = ";: INPUT X$
  59. 590  IF X$ < >""  THEN 630
  60. 600 C = C -1
  61. 610  IF C = 1  THEN  VTAB 15: PRINT "CAN NOT RUN REGRESSION ON ONLY ONE PAIR": PRINT "OF DATA VALUES.  BEGIN AGAIN...": FOR N = 1 TO 2000: NEXT N: GOTO 380
  62. 620  GOTO 150
  63. 630 X(C) =  VAL(X$)
  64. 640  VTAB 20: PRINT  SPC( 37): PRINT "": VTAB 12: PRINT "   Y(";C;") = ";: INPUT Y$
  65. 650 Y(C) =  VAL(Y$)
  66. 660  PRINT 
  67. 670  NEXT N
  68. 680  PRINT "MAXIMUM NUMBER OF DATA PAIRS (500) HAVE"
  69. 690  PRINT "BEEN ENTERED.": FOR J = 1 TO 1000: NEXT J: GOTO 150
  70. 700  REM  *** REVIEW DATA MODE ***
  71. 710  HOME : PRINT  TAB( 14);"REVIEW DATA": PRINT : PRINT 
  72. 720  IF C <2  THEN  VTAB 5: PRINT  TAB( 6);"NO DATA HAS BEEN ENTERED YET": GOSUB 1980: GOTO 150
  73. 730  VTAB 15: PRINT  TAB( 1);"NUMBER ON LEFT IS DATA PAIR SUBSCRIPT"
  74. 740  VTAB 17: PRINT  TAB( 4);"'<CTRL>S' TOGGLES LISTING ON/OFF"
  75. 750  VTAB 23: PRINT  TAB( 6);"PRESS <RTN> TO BEGIN LISTING";: INPUT Z$
  76. 760  HOME 
  77. 770  FOR N = 1 TO C
  78. 780  PRINT N;". X(";N;") = ";X(N); TAB( 20);"Y(";N;") = ";Y(N): PRINT 
  79. 790  NEXT N
  80. 800  PRINT : PRINT  TAB( 3);"PRESS <RTN> TO RETURN TO MAIN MENU";: INPUT Z$
  81. 810  GOTO 150
  82. 820  REM  *** EDIT DATA MODE ***
  83. 830  HOME : PRINT  TAB( 15);"EDIT DATA": PRINT : PRINT 
  84. 840  IF C <2  THEN  VTAB 15: PRINT  TAB( 6);"NO DATA HAS BEEN ENTERED YET": GOSUB 1980: GOTO 150
  85. 850  PRINT  TAB( 14);"INSTRUCTIONS": PRINT : PRINT 
  86. 860  PRINT "ENTER THE SUBSCRIPT # OF THE DATA PAIR"
  87. 870  PRINT "(AS GIVEN IN THE 'REVIEW DATA' LISTING)"
  88. 880  PRINT "TO BE EDITED.  THE CURRENT VALUES WILL"
  89. 890  PRINT "BE DISPLAYED.  ENTER NEW X,Y VALUES OR"
  90. 900  PRINT "PRESS <RTN> TO ACCEPT CURRENT VALUES."
  91. 910  VTAB 22: PRINT  TAB( 6);"PRESS <RTN> TO BEGIN EDITING"
  92. 920  PRINT  TAB( 8);"OR 'QUIT<RTN>' TO ABORT";: INPUT Z$
  93. 930  IF Z$ = "QUIT"  THEN  GOTO 150
  94. 940  HOME 
  95. 950  PRINT "X VARIABLE = ";XN$
  96. 960  PRINT "Y VARIABLE = ";YN$
  97. 970  PRINT 
  98. 980  VTAB 8: PRINT "   ('QUIT<RTN>' TO ABORT)"
  99. 990  VTAB 7: PRINT "SUBSCRIPT OF DATA PAIR TO EDIT";: INPUT Z$
  100. 1000  VTAB 8: PRINT  SPC( 39): PRINT 
  101. 1010  IF Z$ = "QUIT"  THEN 150
  102. 1020  IF  VAL(Z$) <1  OR  VAL(Z$) >C  THEN  VTAB 15: PRINT "NO DATA PAIR WITH THAT I.D. NUMBER": PRINT "EXISTS.  PLEASE TRY AGAIN...": GOSUB 1980: GOTO 940
  103. 1030 Z =  VAL(Z$)
  104. 1040  VTAB 10: PRINT  TAB( 6 + LEN(Z$));X(Z)
  105. 1050  VTAB 10: PRINT "X(";Z;")=";: INPUT RX$
  106. 1060  IF RX$ = ""  THEN  VTAB 10: PRINT "X(";Z;")=";X(Z);"          ": GOTO 1080: REM  10 SPACES BETWEEN SECOND PAIR OF QUOTES
  107. 1070 X(Z) =  VAL(RX$)
  108. 1080  VTAB 12: PRINT  TAB( 6 + LEN(Z$));Y(Z)
  109. 1090  VTAB 12: PRINT "Y(";Z;")=";: INPUT YR$
  110. 1100  IF YR$ = ""  THEN  VTAB 12: PRINT "Y(";Z;")=";Y(Z);"          ": GOTO 1120: REM  10 SPACES BETWEEN SECOND PAIR OF QUOTES
  111. 1110 Y(Z) =  VAL(YR$)
  112. 1120  PRINT : PRINT 
  113. 1130  PRINT "X(";Z;") CURRENTLY = ";X(Z): PRINT 
  114. 1140  PRINT "Y(";Z;") CURRENTLY = ";Y(Z)
  115. 1150  VTAB 23: PRINT  TAB( 6);"EDIT ANOTHER DATA PAIR (Y/N)";: INPUT Z$
  116. 1160  IF Z$ = "Y"  OR Z$ = "YES"  THEN  GOTO 940
  117. 1170  IF Z$ < >"N"  AND Z$ < >"NO"  THEN  GOTO 1150
  118. 1180  GOTO 150
  119. 1190  REM  *** CALCULATE REGRESSION STATISTICS ***
  120. 1200  PRINT  TAB( 9);"REGRESSION STATISTICS": PRINT 
  121. 1210  IF C = 0  THEN  VTAB 15: PRINT  TAB( 6);"NO DATA HAS BEEN ENTERED YET": GOSUB 1980: GOTO 150
  122. 1220  IF C = 1  THEN  VTAB 15: PRINT  TAB( 8);"CAN NOT RUN REGRESSION -": PRINT "ONLY ONE PAIR OF VALUES HAS BEEN ENTERED": FOR N = 1 TO 2000: NEXT N: GOTO 150
  123. 1230 N = 0:XS = 0:SX = 0:SY = 0:YS = 0:XY = 0:A = 0:B = 0:R = 0
  124. 1240  FOR N = 1 TO C
  125. 1250 XS = XS +(X(N) *X(N))
  126. 1260 YS = YS +(Y(N) *Y(N))
  127. 1270 SX = SX +X(N)
  128. 1280 SY = SY +Y(N)
  129. 1290 XY = XY +(X(N) *Y(N))
  130. 1300  NEXT N
  131. 1310 B = (XY -((SX *SY)/C))/(XS -((SX *SX)/C))
  132. 1320 A = (SY/C) -(B *(SX/C))
  133. 1330 R = (XY -((SX *SY)/C))/ SQR((XS -((SX *SX)/C)) *(YS -((SY *SY)/C)))
  134. 1340  PRINT "X VARIABLE: ";XN$
  135. 1350  PRINT "Y VARIABLE: ";YN$
  136. 1360  PRINT 
  137. 1370  PRINT "INTERMEDIATE STATISTICS:"
  138. 1380  PRINT "------------------------": REM  24 -S
  139. 1390  PRINT "SAMPLE SIZE (N):  ";C
  140. 1400  PRINT "SUM (X-SQUARED):  ";XS
  141. 1410  PRINT "SUM (Y-SQUARED):  ";YS
  142. 1420  PRINT "(SUM X)-SQUARED:  ";SX *SX
  143. 1430  PRINT "(SUM Y)-SQUARED:  ";SY *SY
  144. 1440  PRINT "SUM (X * Y):      ";XY: PRINT : REM  6 SPACES BETWEEN COLON AND LAST QUOTES
  145. 1450  PRINT "FINAL REGRESSION STATISTICS:"
  146. 1460  PRINT "----------------------------": REM  28 -S
  147. 1470  PRINT "EQUATION: Y = B X + A"
  148. 1480  PRINT "SLOPE (B) = ";B
  149. 1490  PRINT "Y-INTERCEPT (A) = ";A
  150. 1500  PRINT "CORRELATION (R) = ";R
  151. 1510  PRINT  TAB( 5);"R-SQUARED = ";R *R
  152. 1520  RETURN 
  153. 1530  REM  *** PREDICT Y FROM X ***
  154. 1540  HOME : PRINT  TAB( 12);"PREDICT Y FROM X": PRINT 
  155. 1550  PRINT  TAB( 12);"(<RTN> TO ABORT)": PRINT 
  156. 1560  IF C = 0  THEN  VTAB 15: PRINT  TAB( 6);"NO DATA HAS BEEN ENTERED YET": GOSUB 1980: GOTO 150
  157. 1570  IF B = 0  THEN  VTAB 15: PRINT  TAB( 3);"MUST RUN REGRESSION ANALYSIS FIRST": FOR N = 1 TO 2000: NEXT N: GOTO 150
  158. 1580  VTAB 22: PRINT  SPC( 39): PRINT : VTAB 22: PRINT "ROUTE OUTPUT TO PRINTER (Y/N)";: INPUT P$: IF P$ < >"Y"  AND P$ < >"N"  THEN 1580
  159. 1590  VTAB 10: PRINT  SPC( 39): PRINT 
  160. 1600  VTAB 10: PRINT "ENTER X VALUE:";: INPUT XP$
  161. 1610  IF XP$ = "" GOTO 150
  162. 1620 XP =  VAL(XP$)
  163. 1630  IF P$ = "Y"  THEN  PRINT  CHR$(4);"PR#1": PRINT "ENTERED X = ";XP: PRINT  CHR$(4);"PR#0"
  164. 1650  VTAB 11: PRINT  TAB( 5);"ENTERED X = ";XP
  165. 1660 YP = B *XP +A
  166. 1670  VTAB 12: PRINT  SPC( 39): PRINT 
  167. 1680  IF P$ = "Y"  THEN  PRINT  CHR$(4);"PR#1": PRINT "PREDICTED Y = "YP: PRINT : PRINT  CHR$(4);"PR#0"
  168. 1690  VTAB 12: PRINT  TAB( 5);"PREDICTED Y = ";YP
  169. 1700  VTAB 13: PRINT  SPC( 39): PRINT 
  170. 1710  VTAB 22: PRINT  TAB( 7);"WISH TO DO ANOTHER (Y/N)";: INPUT Z$
  171. 1720  IF Z$ = "Y"  OR Z$ = "YES"  THEN  GOTO 1540
  172. 1730  IF Z$ < >"N"  AND Z$ < >"NO"  THEN  GOTO 1710
  173. 1740  GOTO 150
  174. 1750  REM  *** PREDICT X FROM Y ***
  175. 1760  HOME : PRINT  TAB( 12);"PREDICT X FROM Y": PRINT 
  176. 1770  PRINT  TAB( 12);"(<RTN> TO ABORT)": PRINT 
  177. 1780  IF C = 0  THEN  VTAB 15: PRINT  TAB( 6);"NO DATA HAS BEEN ENTERED YET": GOSUB 1980: GOTO 150
  178. 1790  IF B = 0  THEN  VTAB 15: PRINT  TAB( 3);"MUST RUN REGRESSION ANALYSIS FIRST": FOR N = 1 TO 2000: NEXT N: GOTO 150
  179. 1800  VTAB 22: PRINT  SPC( 39): PRINT : VTAB 22: PRINT "ROUTE OUTPUT TO PRINTER (Y/N)";: INPUT P$: IF P$ < >"Y"  AND P$ < >"N"  THEN 1800
  180. 1810  VTAB 10: PRINT  SPC( 39): PRINT : VTAB 10: PRINT "ENTER Y VALUE";: INPUT YP$
  181. 1820  IF YP$ = ""  THEN  GOTO 150
  182. 1830 YP =  VAL(YP$)
  183. 1840  VTAB 11: PRINT  SPC( 39): PRINT 
  184. 1850  IF P$ = "Y"  THEN  PRINT  CHR$(4);"PR#1": PRINT "ENTERED Y = ";YP: PRINT  CHR$(4);"PR#0"
  185. 1860  VTAB 11: PRINT  TAB( 5);"ENTERED Y = ";YP
  186. 1870 XP = (YP -A)/B
  187. 1880  VTAB 12: PRINT  SPC( 39): PRINT 
  188. 1890  IF P$ = "Y"  THEN  PRINT  CHR$(4);"PR#1": PRINT "PREDICTED X = ";XP: PRINT : PRINT  CHR$(4);"PR#0"
  189. 1900  VTAB 12: PRINT  TAB( 5);"PREDICTED X = ";XP
  190. 1910  VTAB 13: PRINT  SPC( 39): PRINT 
  191. 1920  VTAB 22: PRINT  TAB( 7);"WISH TO DO ANOTHER (Y/N)";: INPUT Z$
  192. 1930  IF Z$ = "Y"  OR Z$ = "YES"  THEN 1760
  193. 1940  IF Z$ < >"N"  AND Z$ < >"NO"  THEN  GOTO 1920
  194. 1950  GOTO 150
  195. 1960  HOME : PRINT "APPLESOFT BASIC"
  196. 1970  END 
  197. 1980  VTAB 23: PRINT "       PRESS ANY KEY TO CONTINUE": WAIT  -16384,128: POKE  -16368,0: RETURN 
  198. 1990  HOME : VTAB 5: PRINT "ERROR #"; PEEK(222);" IN LINE "; PEEK(218) + PEEK(219) *256: GOSUB 1980: GOTO 150