5 COMMON PR(), ST(), RT(), CP(), SI(), f() 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 " S P O V R L A P . B A S " 70 PRINT "" 80 PRINT " --------------------------------------------------------" 90 PRINT " THIS PROGRAM COMPUTES:": PRINT 100 PRINT " 1. GENERAL and SPECIFIC indices of NICHE " 110 PRINT " OVERLAP. See papers by P.S. Petraitis " 120 PRINT " (1985, Ecology 66:1983-1985) and by E.P. " 130 PRINT " Smith (1984, Ecology 65:323-324). " 140 PRINT 150 PRINT " 2. Chi-square TEST STATISTIC for testing the " 160 PRINT " null hypotheses of SPECIFIC and COMPLETE " 170 PRINT " OVERLAP of pairs of species " 180 PRINT " " 190 PRINT " --------------------------------------------------------" 200 PRINT " " 210 PRINT "PRESS ANY KEY TO CONTINUE" 220 IF INKEY$ = "" THEN 220 230 CLS 240 PRINT "- - - - - - - - - - - PART I. DATA ENTRY - - - - - - - - - - - " 250 PRINT "" 260 PRINT "This program is based on the observed UTILIZATION " 270 PRINT " of RESOURCE CLASSES by species in a community. " 280 PRINT 290 PRINT "These data are organized into a DATA MATRIX where the " 300 PRINT " utilization (u) of N resources (columns) by S species (rows) " 310 PRINT " is recorded: (See Table 10.4 for example.) " 320 PRINT 330 PRINT " RESOURCE CLASS ": PRINT 340 PRINT " (1) (2) (3) (4) ...(N)": PRINT 350 PRINT " (1) u u u u ... u " 360 PRINT " 1,1 1,2 1,3 1,4 1,N " 370 PRINT " SPECIES (2) u u u u ... u " 380 PRINT " 2,1 2,2 2,3 2,4 2,N " 382 PRINT " : : : : : : " 390 PRINT " (S) u u u u ... u " 392 PRINT " S,1 S,2 S,3 S,4 S,N " 400 FOR I = 1 TO 2: PRINT " ": NEXT I 410 PRINT "PRESS ANY KEY TO CONTINUE" 420 IF INKEY$ = "" THEN 420 430 CLS 440 GOSUB 1370 450 CLS 460 PRINT "- - - - - - - - PART II. GENERAL OVERLAP - - - - - - - - - - " 470 PRINT "" 510 PRINT " " 520 DIM PR(S, N), ST(S), RT(N), CP(N), SI(S, S) 530 REM compute RESOURCE totals for each SPECIES across all RESOURCES 540 TR = 0 550 FOR SP = 1 TO S 560 ST(SP) = 0 570 FOR RS = 1 TO N 580 ST(SP) = ST(SP) + f(SP, RS) 590 NEXT RS 600 TR = TR + ST(SP) 610 NEXT SP 620 REM compute RESOURCE total for each RESOURCE across all SPECIES 630 FOR RS = 1 TO N 640 RT(RS) = 0 650 FOR SP = 1 TO S 660 RT(RS) = RT(RS) + f(SP, RS) 670 NEXT SP 680 CP(RS) = RT(RS) / TR 690 NEXT RS 700 REM compute PROPORTIONAL utilizations for species and totals 710 FOR SP = 1 TO S 720 FOR RS = 1 TO N 730 PR(SP, RS) = f(SP, RS) / ST(SP) 740 NEXT RS 750 NEXT SP 760 PRINT " " 770 PRINT " GENERAL OVERLAP " 780 PRINT " ------------------------------------------------- " 781 PRINT " Number ^ " 790 PRINT " of Spp. GO Gmin Gadj V df " 800 PRINT " ------ ------- ------- ------- ------- --- " 810 REM COMPUTE GI, GENERAL INDEX OF SPECIES NICHE OVERLAP 820 E = 0 830 ET = 0 840 FOR SP = 1 TO S 850 FOR RS = 1 TO N 860 E = E + (f(SP, RS) * (LOG(CP(RS)) - LOG(PR(SP, RS)))) 870 NEXT RS 880 ET = ET + (ST(SP) * LOG(ST(SP))) 890 NEXT SP 900 ET = ET - (TR * LOG(TR)) 910 REM COMPUTE THE CHI-SQUARE FOR THE GENERAL OVERLAP INDEX 920 CHISQ = -2 * E 930 DF = (S - 1) * (N - 1) 940 E = E / TR 950 GHAT = EXP(E) 960 GMIN = EXP(ET / TR) 970 GI = (GHAT - GMIN) / (1 - GMIN) 980 PRINT USING "#####"; S; 990 PRINT USING "######.###"; GHAT; GMIN; GI; CHISQ; 1000 PRINT USING "####"; DF 1010 PRINT " " 1020 PRINT " ================================================== " 1021 PRINT "PRESS ANY KEY TO CONTINUE" 1022 IF INKEY$ = "" THEN 1022 1025 CLS 1026 PRINT "- - - - - - - PART III. SPECIFIC OVERLAP - - - - - - - - - - " 1030 PRINT " " 1040 PRINT " SPECIFIC (Pairwise) NICHE OVERLAP " 1050 PRINT " ----------------------------------------- " 1060 PRINT " SPP. PAIR " 1070 PRINT " i k SO U df " 1080 PRINT " --- --- ------- ------- --- " 1090 REM COMPUTE SIs, SPECIFIC INDICES OF NICHE OVERLAP 1100 FOR SP = 1 TO S - 1 1110 FOR SQ = SP + 1 TO S 1120 ES1 = 0 1130 ES2 = 0 1140 FOR RS = 1 TO N 1150 ES1 = ES1 + (PR(SP, RS) * LOG(PR(SQ, RS))) + (-1 * (PR(SP, RS) * LOG(PR(SP, RS)))) 1160 ES2 = ES2 + (PR(SQ, RS) * LOG(PR(SP, RS))) + (-1 * (PR(SQ, RS) * LOG(PR(SQ, RS)))) 1170 NEXT RS 1180 REM PRINT " ES1 = ";ES1;" AND ES2 = ";ES2 1190 SI(SP, SQ) = EXP(ES1) 1200 SI(SQ, SP) = EXP(ES2) 1210 CHISQ1 = -2 * (ST(SP) * ES1) 1220 CHISQ2 = -2 * (ST(SQ) * ES2) 1230 DF = N - 1 1240 PRINT USING "####"; SP; SQ; 1250 PRINT USING "######.###"; SI(SP, SQ); CHISQ1; 1260 PRINT USING "####"; DF 1270 PRINT USING "####"; SQ; SP; 1280 PRINT USING "######.###"; SI(SQ, SP); CHISQ2; 1290 PRINT USING "####"; DF 1300 NEXT SQ 1310 NEXT SP 1350 END 1360 REM -----------SUBROUTINE FOR DATA ENTRY--------------------------- 1370 PRINT "Data INPUT options: ": PRINT 1380 PRINT " Option 1 - Data already exists in a STORED data file " 1390 PRINT " Option 2 - Data is to be manually entered from keyboard " 1400 PRINT " (and subsequently STORED, if desired) " 1410 INPUT "Choose OPTION: Enter 1 OR 2 "; OPT 1430 INPUT "INPUT Number of Resources...", N 1440 INPUT "INPUT Number of Species.....", S 1450 DIM f(S, N) 1455 IF OPT = 1 THEN GOTO 1680 ELSE IF OPT <> 2 THEN GOTO 1410 1460 PRINT "" 1470 PRINT "The data matrix is created one COLUMN (Resource) at a time. " 1480 PRINT " ENTER the observed resource utilization for the species " 1490 PRINT " " 1500 FOR RS = 1 TO N 1510 FOR SP = 1 TO S 1520 PRINT "SPECIES "; SP; " utilization of resource "; RS 1530 INPUT " "; f(SP, RS) 1531 IF f(SP, RS) < .0000001 THEN f(SP, RS) = .0000001 1540 NEXT SP 1550 NEXT RS 1560 INPUT "STORE This DATASET ON DISK ? (ENTER Y for YES / N for NO) "; A$ 1570 IF A$ = "N" OR A$ = "n" THEN GOTO 1800 1580 INPUT "Specify a name for this DATASET (e.g.,OVRLAP.DAT) "; OUTDAT$ 1590 INPUT "Specify DISK drive: ENTER A, B, C, etc. "; DD$ 1600 DD$ = DD$ + ":" 1610 OUTDAT$ = DD$ + OUTDAT$ 1620 OPEN OUTDAT$ FOR OUTPUT AS #1 1630 FOR RS = 1 TO N 1640 FOR SP = 1 TO S 1650 WRITE #1, f(SP, RS) 1660 NEXT SP: NEXT RS 1670 GOTO 1800 1680 INPUT "Specify name of DATA File (e.g., OVRLAP.DAT) "; DATAFIL$ 1690 INPUT "Specify DISK DRIVE where located: A, B, C, etc. "; DD$ 1700 DD$ = DD$ + ":" 1740 FILENAM$ = DD$ + DATAFIL$ 1750 OPEN "I", #1, FILENAM$ 1760 FOR RS = 1 TO N 1770 FOR SP = 1 TO S 1780 INPUT #1, f(SP, RS) 1781 IF f(SP, RS) < .0000001 THEN f(SP, RS) = .0000001 1790 NEXT SP: NEXT RS 1800 INPUT "Would you like to list the DATA ? (Y for Yes / N for NO) "; A$ 1810 IF A$ = "Y" OR A$ = "y" THEN GOTO 1820 ELSE GOTO 1920 1820 PRINT "LISTING OF THE DATA SET: ROWS=species, COLUMNS=resources. " 1830 PRINT " " 1840 FOR SP = 1 TO S 1850 FOR RS = 1 TO N 1860 PRINT f(SP, RS); 1870 NEXT RS: PRINT 1880 NEXT SP 1890 FOR I = 1 TO 2: PRINT "": NEXT I 1900 PRINT "PRESS ANY KEY TO CONTINUE" 1910 IF INKEY$ = "" THEN 1910 1920 CLOSE #1 1930 RETURN