2 COMMON W(), S1(), S2(), S4(), D1(), D2(), B(), R1() 3 COMMON X(), V(), K4(), K6(), C(), P() 10 CLS 20 PRINT " STATISTICAL ECOLOGY: A PRIMER ON METHODS AND COMPUTING " 30 PRINT 40 PRINT " I N T E R A C T I V E B A S I C P R O G R A M " 50 PRINT 60 PRINT " P C R E G . B A S " 70 PRINT 80 PRINT " --------------------------------------------------------------" 90 PRINT " SIMPLE and MULTIPLE Linear REGRESSSION of PRINCIPAL " 100 PRINT " COMPONENTS (Coordinates) for SUs obtained from a " 110 PRINT " PCA onto ENVIRONMENTAL VARIABLES measured in these " 120 PRINT " same SUs." 130 PRINT " ---------------------------------------------------------------" 140 FOR I = 1 TO 5: PRINT : NEXT I: PRINT "PRESS ANY KEY TO CONTINUE" 150 IF INKEY$ = "" THEN 150 160 CLS 170 PRINT "-------------------PART I. DATA ENTRY --------------------------" 180 PRINT "This PROGRAM utilizes a DATA MATRIX composed of N ROWS (the SU's)" 190 PRINT " and K COLUMNS (n ENVIRONMENTAL FACTORS + m PRINCIPAL COMPONENT " 200 PRINT " SCORES [Coordinates]): " 210 PRINT " ENVIRONMENTAL " 220 PRINT " For Example: FACTORS COMPONENTS " 230 PRINT " ------------------ ------------" 240 PRINT " (X1) (X2) (X3) (Y1) (Y2) " 250 PRINT " (1) 1.62 2.28 2.58 -.33 -.45 " 260 PRINT " SUs (2) 2.22 2.00 1.00 -.33 +.22 " 270 PRINT " : : : " 280 PRINT " (5) 3.72 5.55 3.33 +.78 +.99 " 290 PRINT 300 PRINT "The following ANALYSES are conducted: " 310 PRINT " 1. Simple LINEAR regression, Yi = B0 + B1 Xj for all combinations" 320 PRINT " of i=1 to m COMPONENTS and j=1 to n ENVIRONMENTAL FACTORS." 330 PRINT " 2. MULTIPLE LINEAR regression, Yi = BO + B1 X1 + B2 X2 + ... Bn Xn" 340 PRINT " for i = 1 to m COMPONENTS." 350 PRINT 360 GOSUB 2120 370 CLS 380 PRINT "----------------PART II. SIMPLE LINEAR REGRESSION-------------------" 390 PRINT 400 PRINT "Simple LINEAR Regression of PRINCIPAL COMPONENT Coordinates" 410 PRINT " [PC] onto ENVIRONMENTAL FACTORS [EF]": PRINT 420 PRINT "STEP 1. Basic Statistics:" 430 PRINT " Standard Standard " 440 PRINT "Variable Mean Variance Deviation Error " 450 PRINT "-------- ------- -------- --------- -------- " 460 K = 1 470 FOR J = 1 TO K2 480 S1(J) = 0 490 S2(J) = 0 500 FOR I = 1 TO N1 510 S1(J) = S1(J) + W(I, J) 520 S2(J) = S2(J) + W(I, J) * W(I, J) 530 NEXT I 540 D1(J) = S1(J) / N1 550 D2(J) = (S2(J) - ((S1(J) * S1(J)) / N1)) 560 D3 = D2(J) / (N1 - 1) 570 D4 = SQR(D3) 580 D5 = D4 / SQR(N1) 590 IF J > N2 THEN GOTO 630 600 PRINT "[EF] "; 610 PRINT USING "###"; J; 620 GOTO 660 630 PRINT "[PC] "; 640 PRINT USING "###"; K; 650 K = K + 1 660 PRINT USING "########.##"; D1(J); 680 PRINT USING "############.##"; D3; D4; D5 690 NEXT J 700 PRINT : PRINT "HIT ANY KEY TO CONTINUE" 710 IF INKEY$ = "" THEN 710 720 CLS 730 PRINT "STEP 2. Regression of all PAIR-WISE combinations of Yi and Xj:": PRINT 740 PRINT " ----Regression----- Standard" 750 PRINT "COMPARISON Coefficients 2 Error of t " 760 PRINT "[PC] [EF] (Bo) (B1) R (B1) Statistic df" 770 PRINT "---- ---- --------- --------- ----- --------- --------- ---" 780 F1 = N1 - 2 790 FOR L = 1 TO N3 800 M = N2 + L 810 K3 = N2 - 1 820 FOR J = 1 TO K3 830 FOR J2 = J TO K3 840 K = J2 + 1 850 S3 = 0 860 FOR I = 1 TO N1 870 S3 = S3 + (W(I, J) * W(I, K)) 880 NEXT I 890 X(J, K) = S3 - ((S1(J) * S1(K)) / N1) 900 NEXT J2 910 NEXT J 920 FOR J = 1 TO N2 930 S3 = 0 940 FOR I = 1 TO N1 950 S3 = S3 + (W(I, J) * W(I, M)) 960 NEXT I 970 S4(L, J) = S3 - ((S1(J) * S1(M)) / N1) 980 B(L, J) = S4(L, J) / D2(J) 990 A = D1(M) - (B(L, J) * D1(J)) 1000 S5 = (S4(L, J) * S4(L, J)) / D2(J) 1010 S6 = S5 / D2(M) 1020 S7 = D2(M) - S5 1030 S8 = S7 / F1 1040 S9 = SQR(S8 / D2(J)) 1050 T = (B(L, J) - 0) / S9 1060 PRINT USING "####"; L; J; 1070 PRINT USING "#######.###"; A; B(L, J); S6; S9; T; 1080 PRINT USING "######"; F1 1090 NEXT J 1100 PRINT " " 1110 NEXT L 1120 IF N2 < 2 THEN GOTO 2110 1130 PRINT "PRESS ANY KEY TO CONTINUE" 1140 IF INKEY$ = "" THEN 1140 1150 CLS 1160 PRINT "----------------PART III. MULTIPLE LINEAR REGRESSION-------------------" 1170 PRINT "MULTIPLE LINEAR Regression of PRINCIPAL COMPONENT Coordinates" 1180 PRINT " [PC] onto ENVIRONMENTAL FACTORS [EF]" 1190 FOR L = 1 TO N3 1200 M = N2 + L 1210 PRINT " " 1220 PRINT "Regression Equation: Intercept and Partial Regression Coefficients" 1230 PRINT : PRINT " for PRINCIPAL COMPONENT #"; L 1240 REM - SETUP THE SYSTEM OF SIMULTANEOUS LINEAR EQUATIONS 1250 N4 = N2 + 1 1260 FOR J = 1 TO N2 1270 I = J + 1 1280 V(J, J) = D2(J) 1290 V(J, N4) = S4(L, J) 1300 IF I > N2 THEN GOTO 1350 1310 FOR K = I TO N2 1320 V(J, K) = X(J, K) 1330 V(K, J) = V(J, K) 1340 NEXT K 1350 NEXT J 1360 REM - SOLVE THE SYSTEM OF LINEAR EQUATIONS 1370 FOR J = 1 TO N2 1380 K4(J) = 0 1390 NEXT J 1400 FOR J = 1 TO N2 1410 K5 = J + 1 1420 M1 = 0 1430 FOR K = 1 TO N2 1440 IF M1 >= ABS(V(K, J)) THEN GOTO 1480 1450 IF K4(K) > 0 THEN GOTO 1480 1460 K6(J) = K 1470 M1 = ABS(V(K, J)) 1480 NEXT K 1490 IF ABS(M1) < 1E-09 THEN GOTO 2100 1500 K7 = K6(J) 1510 K4(K7) = 1 1520 FOR K = 1 TO N2 1530 IF K7 = K THEN GOTO 1580 1540 G = -V(K, J) / V(K7, J) 1550 FOR I = K5 TO N4 1560 V(K, I) = V(K, I) + (G * V(K7, I)) 1570 NEXT I 1580 NEXT K 1590 NEXT J 1600 FOR J = 1 TO N2 1610 K7 = K6(J) 1620 C(J) = V(K7, N4) / V(K7, J) 1630 NEXT J 1640 B0 = D1(M) 1650 FOR J = 1 TO N2 1660 B0 = B0 - (C(J) * D1(J)) 1670 NEXT J 1680 PRINT " " 1690 PRINT " Y("; L; ") = "; 1700 PRINT USING "#####.##"; B0; 1710 PRINT " + "; 1720 FOR J = 1 TO N2 1730 PRINT USING "###.###"; C(J); 1740 PRINT " * X("; 1750 PRINT USING "##"; J; 1760 PRINT ")"; 1770 IF J < N2 THEN PRINT " + "; 1780 NEXT J 1790 PRINT " " 1800 R2 = 0: R4 = 0 1810 FOR J = 1 TO N2 1820 R1(J) = (C(J) * S4(L, J)) / D2(M) 1830 R2 = R2 + R1(J) 1835 R1(J) = (ABS(C(J) * S4(L, J))) / D2(M) 1836 R4 = R4 + R1(J) 1840 NEXT J 1850 F2 = N1 - N2 - 1 1860 F = (R2 / N2) / ((1 - R2) / F2) 1870 PRINT 1880 PRINT " 2 " 1890 PRINT "Coefficient of Multiple Determination: R = "; 1900 PRINT USING "#.###"; R2 1910 PRINT "F Ratio = "; 1920 PRINT USING "###.###"; F; 1930 PRINT " (df ="; N2; ","; F2; ")" 1940 PRINT " 2" 1950 PRINT "Percent Contribution of each Environmental Factor to R " 1960 PRINT " Environmental Percentage " 1970 PRINT " Factor Contribution " 1980 PRINT " ------------- ------------ " 1990 FOR J = 1 TO N2 2000 R3 = (R1(J) / R4) * 100 2010 PRINT USING "##########"; J; 2020 PRINT USING "#############.#"; R3 2030 NEXT J 2040 PRINT " " 2050 PRINT "HIT ANY KEY TO CONTINUE" 2060 IF INKEY$ = "" THEN 2060 2070 IF L < N3 THEN CLS 2080 NEXT L 2090 GOTO 2110 2100 PRINT " NO UNIQUE SOLUTION EXISTS" 2110 END 2120 REM -----------SUBROUTINE FOR DATA ENTRY--------------------------- 2130 PRINT "Data INPUT options: " 2140 PRINT " Option 1 - Data already exists in a STORED data file " 2150 PRINT " Option 2 - Data is to be manually entered from keyboard " 2160 PRINT " (and subsequently STORED, if desired) " 2170 INPUT "Choose OPTION: Enter 1 OR 2 "; OPT 2180 PRINT 2190 INPUT "INPUT No. of SUs ....................", N1 2200 INPUT "INPUT No. of Environmental Factors...", N2 2210 INPUT "INPUT No. of Principal Components ...", N3 2220 K1 = N2 + 1: K2 = N2 + N3 2230 DIM W(N1, K2), S1(K2), S2(K2), S4(K2, K2), D1(K2), D2(K2), B(N3, N2), R1(K2) 2240 DIM X(K2, K2), V(K2, K2), K4(N2), K6(N2), C(N2), P(N1) 2250 IF OPT = 1 THEN GOTO 2460 2260 PRINT "The DATA MATRIX is created one ROW (or SU) at a time. " 2270 PRINT 2280 FOR SU = 1 TO N1 2290 P(SU) = SU: COLL = 0 2300 FOR COL = 1 TO K2 2310 IF COL <= N2 THEN PRINT "Environmental Factor"; COL; " for SU "; SU 2320 IF COL > N2 THEN COLL = COLL + 1: PRINT "Component"; COLL; " for SU "; SU 2330 INPUT " "; W(SU, COL) 2340 NEXT COL: NEXT SU 2350 INPUT "STORE This DATASET ON DISK ? (ENTER Y for YES / N for NO) "; A$ 2360 IF A$ = "N" OR A$ = "n" THEN GOTO 2560 2370 INPUT "Specify a name for this DATASET (e.g., REG.DAT) "; OUTDAT$ 2380 INPUT "Specify DISK drive: ENTER A, B, C, etc. "; DD$ 2390 OUTDAT$ = DD$ + ":" + OUTDAT$ 2400 OPEN OUTDAT$ FOR OUTPUT AS #1 2410 FOR SU = 1 TO N1 2420 FOR COL = 1 TO K2 2430 WRITE #1, W(SU, COL) 2440 NEXT COL: NEXT SU 2450 GOTO 2560 2460 INPUT "Specify name of DATA File (e.g., ORDIN.DAT) "; DATAFIL$ 2470 INPUT "Specify DISK DRIVE where located: A, B, C, etc. "; DD$ 2480 FILENAM$ = DD$ + ":" + DATAFIL$ 2490 OPEN "I", #1, FILENAM$ 2500 FOR SU = 1 TO N1 2510 P(SU) = SU 2520 FOR COL = 1 TO K2 2530 P(SU) = SU 2540 INPUT #1, W(SU, COL) 2550 NEXT COL: NEXT SU 2560 INPUT "Would you like to list the DATA ? (Y for Yes / N for NO) "; A$ 2570 IF A$ = "Y" OR A$ = "y" THEN GOTO 2580 ELSE GOTO 2690 2580 PRINT "Listing of the DATA SET:": PRINT 2590 PRINT " Cols 1 -"; N2; "[Envir. Factors] Cols"; N2 + 1; "-"; K2; "[Components]" 2600 PRINT 2610 FOR SU = 1 TO N1: PRINT "SU # "; SU; "= "; 2620 FOR COL = 1 TO K2 2630 PRINT USING "#####.##"; W(SU, COL); 2640 NEXT COL: PRINT 2650 NEXT SU 2660 FOR I = 1 TO 2: PRINT "": NEXT I 2670 PRINT "PRESS ANY KEY TO CONTINUE" 2680 IF INKEY$ = "" THEN 2680 2690 CLOSE #1 2700 CLS 2710 RETURN 2720 PRINT 2730 PRINT "Press ANY KEY to continue..." 2740 IF INKEY$ = "" THEN 2740 2750 PRINT 2760 RETURN