# Stepwise Multiple Linear Regression

Language: GWBasic.

Objective: Performs stepwise multiple linear regression.

***** Begin of Program Listing *****

```10 ON ERROR GOTO 9000
100 CLS : KEY OFF: SCREEN 1: SCREEN 0: LOCATE 5
110 PRINT STRING\$(40, "*"); : PRINT "*"; TAB(40); "*";
115 BF\$ = "L   O   T   H   A   R": PRINT "*"; TAB((40 - LEN(BF\$)) / 2 + 1); BF\$; TAB(40); "*"; : PRINT "*"; TAB(40); "*"; : PRINT "*"; TAB(40); "*";
120 BF\$ = "STEPWISE MULTIPLE LINEAR REGRESSION": PRINT "*"; TAB((40 - LEN(BF\$)) / 2 + 1); BF\$; TAB(40); "*"; : PRINT "*"; TAB(40); "*"; : PRINT "*"; TAB(40); "*";
130 BF\$ = "Developed by:": PRINT "*"; TAB((40 - LEN(BF\$)) / 2 + 1); BF\$; TAB(40); "*"; : PRINT "*"; TAB(40); "*";
140 BF\$ = "Antonio Augusto GORNI - OTPL": PRINT "*"; TAB((40 - LEN(BF\$)) / 2 + 1); BF\$; TAB(40); "*"; : PRINT "*"; TAB(40); "*";
150 BF\$ = "Lattest Revision: 27/05/1990": PRINT "*"; TAB((40 - LEN(BF\$)) / 2 + 1); BF\$; TAB(40); "*"; : PRINT "*"; TAB(40); "*"; : PRINT STRING\$(40, "*");
160 FOR I = 1 TO 50000: NEXT I: SCREEN 2: SCREEN 0
1000 CLS : B\$ = CHR\$(7)
1250 NOBS = 250: REM NO. MAX DE OBSERVACOES/VARIAVEL
1260 NVAR = 28: REM NO.MAX DE VARIAVEIS
1270 DIM X(NVAR, NOBS), WT(NOBS), WSUM(NVAR), WMEAN(NVAR)
1280 DIM R(NVAR, NVAR), SIGMA(NVAR), B(NVAR), SB(NVAR)
1290 DIM VNAM\$(NVAR), T95(33), Y(NOBS), E1(NVAR - 1, NVAR - 1)
1300 FOR I = 1 TO 33: REM INICIALIZAR A MATRIZ DA ESTAT. T
1320 NEXT I
1330 DATA 12.706,4.303,3.182,2.776,2.571,2.447,2.365
1340 DATA 3.306,2.262,2.228,2.201,2.179,2.16,2.145
1350 DATA 2.131,2.12,2.11,2.101,2.093,2.086,2.08
1360 DATA 2.074,2.069,2.064,2.06,2.056,2.052,2.048
1370 DATA 2.045,2.042,2.021,2.0,1.98
1410 FOR I = 1 TO NOBS
1420 WT(I) = 1
1430 NEXT I
1440 CLS : LOCATE 12: INPUT "List Program Options (Y/N)? ", Y\$
1445 IF Y\$ <> "Y" AND Y\$ <> "N" THEN PRINT B\$: GOTO 1440
1450 IF (Y\$ <> "Y") THEN GOTO 1480
1460 GOSUB 7440
1470 GOTO 1480
1480 PRINT : PRINT
1490 CLS : LOCATE 10: INPUT "Data Input via Keyboard or Disk (K/D)? ", K\$
1500 IF (K\$ <> "K") AND (K\$ <> "D") THEN PRINT B\$: GOTO 1490
1510 IF K\$ = "K" THEN 1540
1520 GOSUB 6960
1530 GOTO 1910
1540 CLS : INPUT "Name of the Dependent Variable? ", TEMP\$
1550 PRINT : INPUT "Number of Independent Variables? ", IV
1560 IF (IV > 0) AND (IV < NVAR) THEN 1580
1570 PRINT : PRINT "Must be Positive and <"; NVAR; "!": GOTO 1550
1580 VNAM\$(IV + 1) = TEMP\$
1590 PRINT : FOR I = 1 TO IV
1600 PRINT "Name of the Independent Variable #"; I; ": ";
1610 INPUT "", VNAM\$(I)
1620 NEXT I
1630 PRINT : INPUT "Do You Want to Perform Forecasting (Y/N)? ", F\$
1640 IF (F\$ <> "Y") AND (F\$ <> "N") THEN PRINT B\$: GOTO 1630
1650 IF F\$ = "N" THEN I4 = 0: GOTO 1710
1660 PRINT : INPUT "Number of Periods to Forecast? ", I4
1670 PRINT : PRINT "Number of Points for Each Independent Variable,"
1690 INPUT "Incluinding Points to Be Used in Forecasting? ", IO
1700 GOTO 1730
1710 PRINT : PRINT "Number of Points for Each Independent Variable? ";
1720 INPUT "", IO
1730 IF IO >= (IV + 2 + I4) THEN 1750
1740 PRINT : PRINT "Number of Points Must be Greater than "; IV + 2 + I4: GOTO 1650
1750 IF IO <= NOBS THEN 1770
1760 PRINT : PRINT "Number of Points Must be Greater than "; NOBS + 1: GOTO 1650
1770 IT = IV + 1: IH = IO - I4
1780 PRINT : PRINT : PRINT : PRINT "Enter with Data:"
1790 FOR I = 1 TO IT
1800 PRINT : IF I <> IT THEN 1830
1810 PRINT : PRINT : PRINT IH; " Values Required for the Dependent Variable "; VNAM\$(IT); ".": PRINT
1820 GOTO 1850
1830 PRINT : PRINT : PRINT IO; " Values Required for the Independent Variable "; VNAM\$(I); ".": PRINT
1840 I5 = IO
1850 IF I = IT THEN I5 = IH
1860 FOR J = 1 TO I5
1870 PRINT "Value for the Point "; J;
1880 INPUT "? ", X(I, J)
1890 NEXT J
1900 NEXT I
1910 FLAG1 = 0: CLS : PRINT : BF\$ = "OPTIONS FOR DATA HANDLING": PRINT TAB((80 - LEN(BF\$)) / 2 + 1); : COLOR 0, 7: PRINT BF\$: COLOR 7, 0
1920 PRINT "--------------------------------------------------------------------------------": LOCATE 6: NCOL = 26
1930 PRINT TAB(NCOL); " 1 - List Data"
1940 PRINT TAB(NCOL); " 2 - Correct Data"
1950 PRINT TAB(NCOL); " 3 - Add Data"
1960 PRINT TAB(NCOL); " 4 - Add Indendent Variable"
1970 PRINT TAB(NCOL); " 5 - Delete Variable"
1980 PRINT TAB(NCOL); " 6 - Perform Regression"
1990 PRINT TAB(NCOL); " 7 - Study Another Model"
2000 PRINT TAB(NCOL); " 8 - Save Data in Disk"
2010 PRINT TAB(NCOL); " 9 - Weight Data "
2020 PRINT TAB(NCOL); "10 - Transforma Data"
2030 PRINT TAB(NCOL); "11 - End"
2040 PRINT : PRINT : PRINT : INPUT "Your Choice? ", IP
2050 IF (IP < 1) OR (IP > 11) THEN PRINT B\$: GOTO 1910
2060 CLS : IF IP = 1 THEN GOSUB 5700
2070 IF IP = 2 THEN GOSUB 5910
2080 IF IP = 3 THEN GOSUB 6260
2090 IF IP = 4 THEN GOSUB 6690
2100 IF IP = 5 THEN GOSUB 6530
2110 IF IP = 6 THEN GOTO 2180
2120 IF IP = 7 THEN GOTO 1410
2130 IF IP = 8 THEN GOSUB 6810
2140 IF IP = 9 THEN GOSUB 7140
2150 IF IP = 10 THEN FLAG1 = 1: GOSUB 7200
2160 IF IP = 11 THEN LOCATE 12: PRINT "*** END OF RUN ***": LOCATE 22: ON ERROR GOTO 0: END
2170 GOTO 1910
2180 CLS : PRINT : BF\$ = "AVAILABLE OPTIONS": PRINT TAB((80 - LEN(BF\$)) / 2 + 1); : COLOR 0, 7: PRINT BF\$: COLOR 7, 0
2190 PRINT "--------------------------------------------------------------------------------": LOCATE 8: NCOL = 26
2200 PRINT TAB(NCOL); "1 - Multiple Regression"
2210 PRINT : PRINT TAB(NCOL); "2 - Stepwise Multiple Regression"
2220 PRINT : PRINT TAB(NCOL); "3 - Data Handling Options": PRINT
2230 LOCATE 20: INPUT "Your Choice? ", IC
2235 CLS
2240 IF (IC < 1) OR (IC > 3) THEN PRINT B\$: GOTO 2180
2250 IF IC = 3 THEN 1910
2260 C\$ = "S"
2270 IF IC = 2 THEN C\$ = "N"
2280 IR = 1
2290 PRINT : INPUT "Show Solution after Each Iteraction (Y/N)? ", P\$
2300 IF (P\$ <> "Y") AND (P\$ <> "N") THEN PRINT B\$: GOTO 2290
2310 IF P\$ = "N" THEN IR = IR + 1
2320 PRINT
2330 INPUT "Output via Screen or Printer (S/P)? ", O\$
2340 IF (O\$ <> "S") AND (O\$ <> "P") THEN PRINT B\$: GOTO 2330
2355 IF O\$ = "S" THEN PRINT : PRINT "Enter Data Identification Message.": INPUT "", BUF\$: PRINT : PRINT : PRINT "Prepare Printer;": INPUT "Press  to Continue...", BF\$
2358 PRINT : PRINT
2360 IF C\$ = "S" THEN 2400
2370 CLS : PRINT "Stepwise Multiple Regression"
2380 PRINT "--------------------------------------------------------------------------------"
2390 PRINT : PRINT : GOTO 2420
2400 CLS : PRINT "Multiple Regression"
2410 PRINT "--------------------------------------------------------------------------------": PRINT : PRINT
2420 IF O\$ = "S" THEN 2500
2440 IF C\$ = "S" THEN 2480
2450 LPRINT "Stepwise Multiple Regression"
2460 LPRINT STRING\$(80, "-"); : LPRINT
2470 GOTO 2500
2480 LPRINT "Multiple Regression"
2490 LPRINT STRING\$(80, "-"); : LPRINT
2500 F1 = 3.29: IF O\$ = "P" THEN LPRINT BUF\$: LPRINT
2510 F2 = 3.29
2520 TL = .0001
2530 IDS = 1
2540 ISTP = 1
2550 WDTA = 0
2560 FOR I = 1 TO IH
2570 WDTA = WDTA + WT(I)
2580 NEXT I
2590 FOR I = 1 TO IT
2600 WSUM(I) = 0
2610 FOR J = 1 TO IH
2620 WSUM(I) = WSUM(I) + WT(J) * X(I, J)
2630 NEXT J
2640 NEXT I
2650 REM
2660 FOR I = 1 TO IT
2670 FOR J = 1 TO IT
2680 R(I, J) = 0
2690 FOR K = 1 TO IH
2700 R(I, J) = R(I, J) + WT(K) * X(I, K) * X(J, K)
2710 NEXT K
2720 NEXT J
2730 NEXT I
2740 FOR I = 1 TO IT
2750 WMEAN(I) = WSUM(I) / WDTA
2760 NEXT I
2770 REM
2780 FOR I = 1 TO IT
2790 FOR J = 1 TO IT
2800 R(I, J) = R(I, J) - WSUM(I) * WSUM(J) / WDTA
2810 NEXT J
2820 NEXT I
2830 FOR I = 1 TO IT
2840 SIGMA(I) = R(I, I) ^ .5
2850 NEXT I
2860 REM
2870 FOR I = 1 TO IT
2880 FOR J = 1 TO IT
2890 R(I, J) = R(I, J) / (SIGMA(I) * SIGMA(J))
2900 NEXT J
2910 NEXT I
2920 FOR I = 2 TO IT
2930 II = I - 1
2940 FOR J = 1 TO II
2950 R(I, J) = R(J, I)
2960 NEXT J
2970 NEXT I
2980 IF C = 2 THEN 3050
2990 GOSUB 7840
3000 IF DET <> 0 THEN 3050
3020 PRINT B\$: PRINT "It is Impossible to Find a Solution using Multiple Regression!": PRINT
3030 PRINT "The Variable Are Not Independent. Try the"
3040 PRINT "Stepwise Multiple Regression Option.": PRINT : INPUT "Tecle  para Continuar...", BF\$: GOTO 2180
3050 PHI = WDTA - 1
3060 INDEX = 1
3070 FOR J = 1 TO IT
3080 SB(J) = 0
3090 B(J) = 0
3100 NEXT J
3110 IF (R(IT, IT) > -9.999999E-06) AND (R(IT, IT) < 0) THEN R(IT, IT) = 0
3120 SY = SIGMA(IT) * (R(IT, IT) / PHI) ^ .5
3130 IF C\$ <> "S" THEN 4010
3140 IF ISTP <= 1 THEN 3300
3150 NN = ISTP - 1
3160 REM
3170 FOR I = 1 TO NN
3180 B(I) = R(I, IT) * SIGMA(IT) / SIGMA(I)
3190 IF R(I, I) > 0 THEN 3280
3210 PRINT B\$: PRINT "It is Impossible to Find the Solution Using Multiple Regression."
3220 PRINT "Variable "; VNAM\$(I); " is a Linear Combination of the Other Variables."
3240 PRINT
3250 PRINT "Try the Stepwise Regressio Option."
3260 PRINT : INPUT "Press  to Continue...", BF\$: GOTO 2180
3270 REM
3280 SB(I) = SY * R(I, I) ^ .5 / SIGMA(I)
3290 NEXT I
3300 IF IR > 1 THEN 3680
3310 B(IT) = WMEAN(IT)
3320 NN = IT - 1
3330 FOR I = 1 TO NN
3340 B(IT) = B(IT) - B(I) * WMEAN(I)
3350 NEXT I
3360 REM
3370 DETER = 1 - R(IT, IT)
3380 IF DETER < .000001 THEN DETER = 0
3390 DVEST = SY
3400 IF DVEST < .000001 THEN DVEST = 0
3410 IF O\$ = "P" THEN 3590
3430 PRINT : PRINT "Regression #"; ISTP
3440 PRINT "--------------------------------------------------------------------------------"
3450 PRINT VNAM\$(IT); " = "; B(IT)
3460 FOR I = 1 TO NN
3470 IF B(I) = 0 THEN 3490
3480 PRINT " + "; B(I); " "; VNAM\$(I)
3490 NEXT I
3500 DVEST = INT(DVEST * 10 ^ 4 + .5) / INT(10 ^ 4 + .5)
3510 DETER = INT(DETER * 10 ^ 7 + .5) / INT(10 ^ 7 + .5)
3520 PRINT : PRINT "Determination Coeficient = "; DETER
3530 PRINT "Standard Deviation of the Estimative = "; DVEST
3540 IF ISTP <> (IDS * 3) THEN 3570
3550 IF ISTP = IT THEN 3680
3560 IDS = IDS + 1: PRINT : COLOR 31, 0: INPUT "Press  to Continue...", Y\$: COLOR 7, 0: CLS
3570 PRINT : GOTO 3680
3590 LPRINT : LPRINT : LPRINT "Regression #"; ISTP
3600 LPRINT VNAM\$(IT); " = "; B(IT)
3610 FOR I = 1 TO NN
3620 IF B(I) = 0 THEN 3640
3630 LPRINT " + "; B(I); " "; VNAM\$(I)
3640 NEXT I
3650 DETER = INT(DETER * 10 ^ 7 + .5) / INT(10 ^ 7 + .5)
3660 LPRINT : LPRINT "Determination Coeficient = "; DETER
3670 LPRINT "Standard Deviation of the Estimative = "; DVEST
3680 ISTP = ISTP + 1
3690 IF C\$ <> "S" THEN 3840
3700 IF ISTP < IT THEN 3820
3710 IF ISTP > IT THEN 4370
3720 REM
3740 IF O\$ = "P" THEN LPRINT : LPRINT : LPRINT : LPRINT "Final Solution:" ELSE PRINT : PRINT "Final Solution:": PRINT
3750 GOTO 3780
3770 IF O\$ = "P" THEN LPRINT : LPRINT : LPRINT : LPRINT "Final Solution:" ELSE PRINT : PRINT "Final Solution:"
3780 IY = IR
3790 IR = 3
3800 IF C\$ <> "S" THEN 3310
3810 IR = 1
3820 K = ISTP - 1
3830 PHI = PHI - 1
3840 IF IR > 2 THEN 4370
3850 REM
3860 FOR I = 1 TO IT
3870 IF I = K THEN 3920
3880 FOR J = 1 TO IT
3890 IF J = K THEN 3910
3900 R(I, J) = R(I, J) - R(I, K) * R(K, J) / R(K, K)
3910 NEXT J
3920 NEXT I
3930 FOR I = 1 TO IT
3940 IF I = K THEN 3970
3950 R(I, K) = -R(I, K) / R(K, K)
3960 R(K, I) = R(K, I) / R(K, K)
3970 NEXT I
3980 R(K, K) = 1 / R(K, K)
3990 IF C\$ <> "S" THEN 3060
4000 GOTO 3110
4010 IX = 0
4020 VX = 0
4030 IM = 0
4040 VM = 99999!
4050 IF (R(INDEX, INDEX) - TL) > 0 THEN 4200
4060 IF (INDEX + 1) >= IT THEN 4090
4070 INDEX = INDEX + 1
4080 GOTO 4050
4090 IF R(IT, IT) <= 0 THEN 3720
4100 IF (VM * PHI / R(IT, IT)) >= F2 THEN 4140
4110 K = IM
4120 PHI = PHI + 1
4130 GOTO 3300
4140 IF R(IT, IT) <= VX THEN 4170
4150 REM
4160 IF (VX * (PHI - 1) / (R(IT, IT) - VX)) <= F1 THEN 3720
4170 K = IX
4180 PHI = PHI - 1
4190 GOTO 3300
4200 V = R(INDEX, IT) * R(IT, INDEX) / R(INDEX, INDEX)
4210 IF V = 0 THEN 4060
4220 IF V > 0 THEN 4330
4230 REM
4240 B(INDEX) = R(INDEX, IT) * SIGMA(IT) / SIGMA(INDEX)
4250 REM
4260 SB(INDEX) = SY * R(INDEX, INDEX) ^ .5 / SIGMA(INDEX)
4270 REM
4280 REM
4290 IF (V + VM) <= 0 THEN 4060
4300 VM = -V
4310 IM = INDEX
4320 GOTO 4060
4330 IF (V - VX) <= 0 THEN 4060
4340 VX = V
4350 IX = INDEX
4360 GOTO 4060
4370 IF O\$ = "P" THEN 4400
4390 IF O\$ = "S" THEN PRINT : COLOR 31, 0: INPUT "Press  to Continue...", Y\$: COLOR 7, 0: CLS : PRINT
4400 IR = IY
4410 II = IT - 1
4420 REM
4430 FOR J = 1 TO IH
4440 Y(J) = B(IT)
4450 FOR I = 1 TO II
4460 Y(J) = Y(J) + B(I) * X(I, J)
4470 NEXT I
4480 NEXT J
4490 IGI = II - 1
4510 LOCATE 10: INPUT "Do You Want to See the Forecast Limits (Y/N)? ", F\$: IF F\$ <> "Y" AND F\$ <> "N" THEN PRINT B\$: GOTO 4510
4512 IF O\$ = "P" THEN PRINT : INPUT "Do You Want to Print the Forecast Limits (Y/N)? ", BUF\$: IF BUF\$ <> "Y" AND BUF\$ <> "N" THEN PRINT B\$: GOTO 4512
4514 IF BUF\$ = "N" THEN O\$ = "S"
4520 IF F\$ <> "Y" THEN 4740
4530 PRINT : INPUT "Do You Want to Use t Statistics to Determine Limits (Y/N)? ", L\$
4550 IF (L\$ <> "Y") AND (L\$ <> "N") THEN PRINT B\$: GOTO 4530
4560 IF L\$ = "Y" THEN 4600
4570 INPUT "Entre com o Valor da Estatistica : ", T
4580 GOTO 4740
4590 REM
4600 IF PHI > 30 THEN 4640
4610 IBI = PHI
4620 T = T95(IBI)
4630 GOTO 4740
4640 IF PHI > 40 THEN 4670
4650 T = T95(30) - (PHI - 30) * .0021
4660 GOTO 4740
4670 IF PHI > 60 THEN 4700
4680 T = T95(31) - (PHI - 40) * .00105
4690 GOTO 4740
4700 IF PHI > 120 THEN 4730
4710 T = T95(32) - (PHI - 60) * .02 / 60
4720 GOTO 4740
4730 T = T95(33)
4740 SAS = SIGMA(IT) ^ 2 * R(IT, IT) / PHI
4750 IF O\$ = "P" THEN 5020
4760 CLS : PRINT "Values Confrontation"; : COLOR 0, 7: PRINT "Real x Forecast"; : COLOR 7, 0: PRINT " para "; VNAM\$(IT): PRINT
4770 PRINT "Real", "Forecast", "Difference"
4780 PRINT "---------------------------------------------"
4790 IC = 1
4800 FOR J = 1 TO IH
4810 IF J <> (IC * 18) THEN 4840
4820 IC = IC + 1
4830 PRINT : COLOR 31, 0: INPUT "Press  to Continue...", Y\$: COLOR 7, 0: CLS
4831 CLS : PRINT "Values Confrontation "; : COLOR 0, 7: PRINT "Real x Forecast"; : COLOR 7, 0: PRINT " para "; VNAM\$(IT): PRINT
4832 PRINT "Real", "Forecast", "Difference"
4834 PRINT "---------------------------------------------"
4840 DI = X(IT, J) - Y(J)
4850 IF X(IT, J) <> 0 THEN 4880
4860 IF DI <> 0 THEN PDI = 999999!
4870 GOTO 4890
4880 PDI = DI / X(IT, J) * 100
4890 OBS = X(IT, J)
4900 Y(J) = INT(1000 * Y(J) + .5) / 1000
4910 DI = INT(10 ^ 5 * DI + .5) / 10 ^ 5
4920 PRINT OBS, Y(J), DI
4930 NEXT J
4940 IF F\$ <> "Y" THEN PRINT : PRINT : COLOR 31, 0: PRINT "Press  to Continue..."; : COLOR 7, 0: INPUT "", BF\$:  CLS : GOTO 5680
4950 PRINT : COLOR 31, 0: INPUT "Press  to Continue...", Y\$: COLOR 7, 0: CLS
4960 CLS : PRINT "Confidence Limits for the Forecast Values"
4970 PRINT : PRINT "Degrees  of Freedom = "; PHI
4980 PRINT : PRINT "t Statistics = "; T
4985 LOCATE 20: INPUT "Press  to Continue...", BF\$: CLS
4990 PRINT : PRINT "Inferior Limit"; TAB(20); "Forecast"; TAB(40); "Superior Limit"
5000 PRINT STRING\$(60, "-")
5010 GOTO 5190
5020 REM
5030 LPRINT : LPRINT : LPRINT "Real"; TAB(20); "Forecast"; TAB(40); "Difference"; TAB(60); "% Difference": LPRINT STRING\$(80, "-");
5040 FOR J = 1 TO IH
5050 DI = X(IT, J) - Y(J)
5060 IF X(IT, J) <> 0 THEN 5090
5070 IF DI <> 0 THEN PDI = 999999!
5080 GOTO 5110
5090 OBS = X(IT, J)
5100 PDI = DI / X(IT, J) * 100
5110 LPRINT OBS; TAB(20); Y(J); TAB(40); DI; TAB(60); PDI
5120 NEXT J
5130 IF F\$ <> "Y" THEN 5680
5140 LPRINT : LPRINT : LPRINT "Confidence Limits for the Forecast Values:"
5150 LPRINT : LPRINT "Degrees of Freedom ="; PHI
5160 LPRINT : LPRINT "t Statistic = "; T
5170 LPRINT : LPRINT "Inferior Limit"; TAB(20); "Forecast"; TAB(40); "Superior Limit"
5180 LPRINT STRING\$(60, "-")
5190 XM = IH
5200 IC = 1
5210 FOR I = 1 TO IO
5220 IF I <> (IC * 19) THEN 5270
5230 IC = IC + 1
5240 IF O\$ <> "S" THEN 5270
5260 PRINT : COLOR 31, 0: INPUT "Press  to Continue...", Y\$: COLOR 7, 0: CLS
5261 PRINT : PRINT "Inferior Limit"; TAB(20); "Forecast"; TAB(40); "Superior Limit"
5262 PRINT STRING\$(60, "-")
5270 VARY = SAS / XM
5280 Y(I) = B(IT)
5290 IF IGI <= 0 THEN 5500
5300 FOR J = 1 TO IGI
5310 IF SB(J) = 0 THEN 5350
5320 IF (SIGMA(J) = 0) OR (SIGMA(J) > 1E+20) THEN 5350
5330 XSB = SAS * R(J, J) / (SIGMA(J) ^ 2)
5340 GOTO 5360
5350 XSB = 0
5360 Y(I) = Y(I) + B(J) * X(J, I)
5370 DI = X(J, I) - WMEAN(J)
5380 VARY = VARY + XSB * DI ^ 2
5390 KK = J + 1
5400 FOR K = KK TO II
5410 IF SB(K) = 0 THEN 5460
5420 IF (SIGMA(J) = 0) OR (SIGMA(J) >= 1E+20) THEN 5460
5430 IF (SIGMA(K) = 0) OR (SIGMA(K) >= 1E+20) THEN 5460
5440 XSB = SAS * R(J, K) / (SIGMA(J) * SIGMA(K))
5450 GOTO 5470
5460 XSB = 0
5470 VARY = VARY + 2 * XSB * DI * (X(K, I) - WMEAN(K)) ^ 2
5480 NEXT K
5490 NEXT J
5500 IF SB(II) <= 0 THEN 5540
5510 IF (SIGMA(II) = 0) OR (SIGMA(II) >= 1E+20) THEN 5540
5520 XSB = SAS * R(II, II) / SIGMA(II) ^ 2
5530 GOTO 5550
5540 XSB = 0
5550 Y(I) = Y(I) + B(II) * X(II, I)
5560 VARY = VARY + XSB * (X(II, I) - WMEAN(II)) ^ 2
5570 SVARY = ABS(VARY + SAS) ^ .5
5580 LLM = Y(I) - SVARY * T
5590 ULM = Y(I) + SVARY * T
5600 IF O\$ = "P" THEN 5630
5610 PRINT LLM; TAB(20); Y(I); TAB(40); ULM
5620 GOTO 5650
5630 REM
5640 LPRINT LLM; TAB(20); Y(I); TAB(40); ULM
5650 NEXT I
5670 IF O\$ = "S" THEN PRINT : COLOR 31, 0: INPUT "Pressi  to Continue...", Y\$: COLOR 7, 0: CLS
5680 REM
5690 GOTO 2180
5700 REM
5710 PRINT : INPUT "Variable to be Listed? ", ID\$
5720 GOSUB 6190
5730 IF IL = 0 THEN 5770
5740 PRINT : INPUT "Variable Not Found - Try Again (Y/N)? ", Y\$
5750 IF Y\$ <> "Y" THEN RETURN
5760 GOTO 5710
5770 MM = IO
5780 IF I = IT THEN MM = IH
5790 PRINT : PRINT "Data Listing for "; VNAM\$(I); " :"
5800 PRINT "--------------------------------------------------------------------------------": PRINT
5810 IC = 1
5820 FOR J = 1 TO MM
5830 IF IC <= 18 THEN 5860
5850 IC = 1: PRINT : COLOR 31, 0: INPUT "Press  to Continue...", Y\$: COLOR 7, 0: CLS
5852 PRINT : PRINT "Data Listing for "; VNAM\$(I); " :"
5854 PRINT "--------------------------------------------------------------------------------": PRINT
5860 IC = IC + 1: PRINT "#"; J, X(I, J)
5870 NEXT J
5880 PRINT : INPUT "Do You Want to List Another Variable (Y/N)? ", Y\$
5890 IF Y\$ = "Y" THEN 5700
5900 RETURN
5910 REM
5920 PRINT
5930 CLS : INPUT "Name of the Variable to be Modified? ", ID\$
5940 GOSUB 6190
5950 IF IL = 0 THEN 5990
5960 PRINT : INPUT "Variable not Found - Do You Want to Try Again (Y/N)? ", Y\$
5970 IF Y\$ <> "Y" THEN RETURN
5980 GOTO 5920
5990 I5 = IO
6000 IF I = IT THEN I5 = IH
6010 PRINT : INPUT "All Data of this Variable Must be Modified (Y/N)? ", Y\$
6020 IF Y\$ = "Y" THEN 6110
6030 PRINT
6040 INPUT "Index of the Point to be Modified? ", J
6050 IF (J < 1) OR (J > I5) THEN PRINT B\$: GOTO 6030
6060 PRINT : INPUT "New Data? ", X(I, J)
6070 PRINT : INPUT "Do You Want to Modify Another Point of This Variable (Y/N)? ", Y\$
6090 IF Y\$ = "Y" THEN 6030
6100 RETURN
6110 I5 = IO
6112 PRINT : INPUT "Do You Want to Modify the Name of this Variable (Y/N)? ", BF\$: IF BF\$ <> "Y" THEN 6120
6114 PRINT : INPUT "New Name? ", VNAM\$(I)
6120 IF I = IT THEN I5 = IH
6130 PRINT : PRINT I5; " Needed Values for "; VNAM\$(I): PRINT
6140 FOR J = 1 TO I5
6150 PRINT "Enter a New Value for the Index "; J;
6160 INPUT ": ", X(I, J)
6170 NEXT J
6180 GOTO 6070
6190 REM
6200 IL = 0
6210 FOR I = 1 TO IT
6220 IF ID\$ = VNAM\$(I) THEN RETURN
6230 NEXT I
6240 IL = 1
6250 RETURN
6260 REM
6270 PRINT : INPUT "Do You Want to Perform Forecast (Y/N)? ", F\$
6280 IF (F\$ <> "Y") AND (F\$ <> "N") THEN PRINT B\$: GOTO 6270
6290 IF F\$ = "N" THEN I4 = 0: GOTO 6310
6300 INPUT "Number of Periods to Forecast? ", I4: PRINT
6310 PRINT : PRINT "Number of of Point for Each Independent Variable,"
6320 INPUT "Incluindind Points Required in Forecasting? ", IA
6340 IF IA > (IV + 2 - I4) THEN 6360
6350 PRINT : PRINT "Number of Points Must be Greater than "; IV + 2 - I4: GOTO 6310
6360 IF IA <= NOBS THEN I1 = IH + 1: I2 = IA: GOTO 6380
6370 PRINT : PRINT "Number of Points Must be Lower than "; NOBS + 1: GOTO 6310
6380 FOR I = 1 TO IT
6390 IF I = IT THEN I1 = IH + 1: I2 = IA - I4
6400 IF I <> IT THEN 6440
6410 IF I1 >= I2 THEN 6510 ELSE PRINT : PRINT : PRINT "Enter Additional Points for the ";
6420 PRINT "Dependent Variable"; VNAM\$(IT); "."
6430 GOTO 6460
6440 PRINT : PRINT : PRINT "Enter Additional Points for the Independent Variable  "; VNAM\$(I); "."
6460 PRINT : FOR J = I1 TO I2
6470 PRINT "Value for the Point "; J; "? ";
6480 INPUT "", X(I, J)
6490 NEXT J
6500 NEXT I
6510 IO = IA: IH = IO - I4
6520 RETURN
6530 REM
6540 PRINT : INPUT "Variable to be Deleted? ", ID\$: PRINT
6550 GOSUB 6190
6560 IF IL = 0 THEN 6600
6580 IF Y\$ <> "Y" THEN RETURN
6590 GOTO 6540
6600 FOR J = I TO IT - 1
6610 VNAM\$(J) = VNAM\$(J + 1)
6620 FOR K = 1 TO IO
6630 X(J, K) = X(J + 1, K)
6640 NEXT K
6650 NEXT J
6660 IV = IV - 1
6670 IT = IT - 1
6680 RETURN
6690 REM
6700 VNAM\$(IT + 1) = VNAM\$(IT)
6710 PRINT : INPUT "Name of the Variable to be Added? ", VNAM\$(IT): PRINT
6720 PRINT IO; "Values Required for "; VNAM\$(IT): PRINT
6730 FOR J = 1 TO IO
6740 X(IT + 1, J) = X(IT, J)
6750 PRINT "Value for the Index "; J;
6760 INPUT "? ", X(IT, J)
6770 NEXT J
6780 IT = IT + 1
6790 IV = IV + 1
6800 RETURN
6810 REM
6820 LOCATE 12: INPUT "Disk File Name (? to List Directory)? ", NAM\$: IF NAM\$ = "?" THEN PRINT : FILES "*.STP": PRINT : INPUT "Press  to Continue...", NAM\$: CLS : GOTO 6820 ELSE NAM\$ = NAM\$ + ".STP"
6830 OPEN "O", #1, NAM\$
6850 WRITE #1, IT, IH, I4
6860 ID = IO
6870 FOR I = 1 TO IT
6880 WRITE #1, VNAM\$(I)
6890 IF I = IT THEN ID = IH
6900 FOR J = 1 TO ID
6910 WRITE #1, X(I, J)
6920 NEXT J
6930 NEXT I
6940 CLOSE #1
6950 RETURN
6960 REM
6970 LOCATE 12: INPUT "Disk File Name (? to List Directory)? ", NAM\$: IF NAM\$ = "?" THEN PRINT : FILES "*.stp": PRINT : INPUT "Press  to Continue... ", NAM\$: CLS : GOTO 6970 ELSE NAM\$ = NAM\$ + ".STP"
6980 OPEN "I", #1, NAM\$
7000 INPUT #1, IT, IH, I4
7010 IO = IH + I4
7020 IV = IT - 1
7030 IF I4 > 0 THEN F\$ = "Y"
7040 ID = IO
7050 FOR I = 1 TO IT
7060 INPUT #1, VNAM\$(I)
7070 IF I = IT THEN ID = IH
7080 FOR J = 1 TO ID
7090 INPUT #1, X(I, J)
7100 NEXT J
7110 NEXT I
7120 CLOSE #1
7130 RETURN
7140 REM
7150 FOR I = 1 TO IH
7160 PRINT "Weight for the Point "; I; "? ";
7170 INPUT "", WT(I)
7180 NEXT I
7190 RETURN
7200 REM
7210 GOSUB 7790
7220 MM = IO
7230 FOR I = 1 TO IT
7240 IF I = IT THEN MM = IH
7250 PRINT : PRINT "Transformation for the Variable "; VNAM\$(I); "? ";
7260 INPUT "", TC\$
7270 IF TC\$ = "N" THEN 7420
7280 IF TC\$ = "E" THEN IK = 1: GOTO 7320
7290 IF TC\$ = "P" THEN IK = 2: GOTO 7310
7295 IF TC\$ = "X" THEN IK = 3: GOTO 7320
7300 PRINT B\$: GOTO 7250
7310 PRINT : INPUT "Exponente Value (X^N)? ", EX: PRINT
7320 FOR J = 1 TO MM
7330 ON IK GOTO 7340, 7400
7340 IF X(I, J) > 0 THEN 7380
7350 PRINT "There is No Logarithm of a Negative Number!"
7360 PRINT "The Value of the Element in Hand is "; X(I, J)
7370 PRINT : GOTO 7410
7380 X(I, J) = LOG(X(I, J))
7390 GOTO 7410
7400 X(I, J) = X(I, J) ^ EX: GOTO 7410
7405 X(I, J) = EXP(X(I, J))
7410 NEXT J
7420 NEXT I
7430 RETURN
7440 REM
7450 CLS : PRINT : COLOR 0, 7: PRINT "Available Options:": COLOR 7, 0
7460 PRINT "--------------------------------------------------------------------------------"
7470 PRINT "Data Input:"
7480 PRINT : PRINT "K = Keyboard"
7490 PRINT "D = Disk File"
7500 PRINT : COLOR 0, 7: PRINT "Data Treatment:": COLOR 7, 0
7510 PRINT : PRINT "Correct Data"
7530 PRINT "Delete Variables"
7550 PRINT "Weight Data"
7560 PRINT "Transform Data"
7570 PRINT "Salve Data in Disk"
7580 PRINT : COLOR 0, 7: PRINT "Results Output:": COLOR 7, 0
7590 PRINT : PRINT "S = Screen"
7600 PRINT "P = Printer"
7610 PRINT : COLOR 31, 0: INPUT "Press  to Continue...", Y\$: COLOR 7, 0
7615 CLS
7630 PRINT : COLOR 0, 7: PRINT "Statistical Options:": COLOR 7, 0
7640 PRINT : PRINT "Multiple Regression"
7650 PRINT "Stepwise Regression"
7660 PRINT : COLOR 0, 7: PRINT "Results:": COLOR 7, 0
7670 PRINT : PRINT "S = Show Solution in Each Iteraction"
7680 PRINT "N = Show Only Final Solution Final"
7690 PRINT : COLOR 0, 7: PRINT "Data Weighting Schemes:": COLOR 7, 0
7700 PRINT : PRINT "Uniform, Program Default"
7710 PRINT "Non-Uniform, Weights Supplied by the User"
7720 PRINT : COLOR 0, 7: PRINT "Confidence Limits:": COLOR 7, 0
7730 PRINT : PRINT "Y = t-95 Statistics t-95, Program Default"
7740 PRINT "N = t-95 Statistics Supplied by the User"
7750 PRINT : PRINT : PRINT : COLOR 31, 0: INPUT "Press  to Continue...", Y\$: COLOR 7, 0
7755 CLS
7760 PRINT : COLOR 0, 7: PRINT "Forecasting Horizon:": COLOR 7, 0
7770 PRINT : PRINT "S = Required Forecasting"
7780 PRINT "N = Forecasting Not Required"
7790 PRINT : COLOR 0, 7:  PRINT "Available Transformations:": COLOR 7, 0
7800 PRINT : PRINT "N = No Transform"
7810 PRINT "E = Neperian Logarithm"
7820 PRINT "P = Polinomial X ^ N"
7822 PRINT "X = Exponential"
7825 IF FLAG1 = 1 THEN RETURN ELSE PRINT : PRINT : PRINT : COLOR 31, 0: INPUT "Press  to Continue...", Y\$: COLOR 7, 0: CLS
7830 RETURN
7840 REM
7850 FOR I = 1 TO IV
7860 FOR J = 1 TO IV
7870 REM
7880 E1(I, J) = R(I, J)
7890 NEXT J
7900 NEXT I
7910 REM
7920 DET = 1
7930 FOR I = 1 TO IV - 1
7940 REM
7950 IF E1(I, I) = 0 THEN GOSUB 8110
7960 IF DET = 0 THEN RETURN
7970 FOR J = I + 1 TO IV
7980 REM
7990 XM = E1(J, I) / E1(I, I)
8000 FOR K = I TO IV
8010 REM
8020 E1(J, K) = E1(J, K) - XM * E1(I, K)
8030 NEXT K
8040 NEXT J
8050 NEXT I
8060 REM
8070 FOR I = 1 TO IV
8080 DET = DET * E1(I, I)
8090 NEXT I
8100 RETURN
8110 REM
8120 REM
8130 REM
8140 FOR J = J + 1 TO IV
8150 IF E1(J, I) = 0 THEN GOTO 8210
8160 FOR K = 1 TO IV
8170 REM
8180 E1(I, K) = E1(I, K) + E1(J, K)
8190 NEXT K
8200 RETURN
8210 NEXT J
8220 REM
8230 DET = 0
8240 RETURN
9000 PRINT : PRINT : PRINT B\$: COLOR 31, 0: PRINT "Error "; ERR; " in Line "; ERL; "!": COLOR 7, 0: PRINT : PRINT : INPUT "Press  to Continue...", BF\$: RESUME 1910
```

***** End of Program Listing ******