5 COMMON X(), F(), E(), E2(), F2() 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 " N E G B I N O M . B A S " 70 PRINT 80 PRINT " -----------------------------------------------------------" 90 PRINT " CHI-SQUARE TEST (GOODNESS-OF-FIT) FOR AGREEMENT WITH A" 100 PRINT " NEGATIVE BINOMINAL DISTRIBUTION " 110 PRINT " -----------------------------------------------------------" 120 PRINT 130 PRINT " This Test is Based On: ": PRINT 140 PRINT " OBSERVED data: # Sampling Units with 0,1,2...r individuals" 150 PRINT " EXPECTED data: # Sampling Units with 0,1,2,..r individuals" 160 PRINT " based on NEGATIVE BIONOMINAL Probabilities" 165 PRINT " -----------------------------------------------------------" 170 PRINT " NOTE: The TOTAL number of sampling units should be > 40" 180 PRINT " -----------------------------------------------------------" 190 FOR I = 1 TO 3: PRINT : NEXT I 200 PRINT "PRESS ANY KEY TO CONTINUE" 210 IF INKEY$ = "" THEN 210 220 CLS 230 DEF FNF (VAR) = LOG(VAR) / LOG(10) 240 DIM X(100), F(100), E(100), E2(101), F2(101) 250 PRINT "- - - - - - - - - -PART I. DATA ENTRY- - - - - - - - - - ": PRINT "" 260 PRINT "This program requires data TABULATED in the form" 270 PRINT " of a FREQUENCY DISTRIBUTION - for example: ": PRINT "" 280 PRINT " x = Fx = Frequency " 290 PRINT " Number of Individuals (Number of Sampling Units" 300 PRINT " PER Sampling Unit Containing x individuals)" 310 PRINT " 0 119 " 320 PRINT " 1 62 " 330 PRINT " 2 6 " 340 PRINT " 3 2 ": PRINT 350 PRINT "To use this program, first enter the LARGEST frequency class" 360 PRINT " i.e., x INDIVIDUALS per SU, that occurs in your data set (in the" 370 INPUT " above example, x = 3). Largest x or FREQUENCY CLASS = "; CLASSES 380 PRINT : PRINT "Next, INPUT your OBSERVED FREQUENCY DATA " 390 PRINT 400 PRINT " __x__,__F(x)__" 410 FOR I = 1 TO CLASSES + 1: X(I) = I - 1 420 PRINT " "; I - 1; : INPUT " ", F(I) 430 NEXT I 440 X(CLASSES + 2) = 0: F(CLASSES + 2) = 0 450 REM CALCULATE TOTAL NUMBER OF SAMPLING UNITS IN DATA SET (N), 460 REM TOTAL NUMBER OF INDIVIDUALS (S1), & SUMS OF SQUARES (S2) 470 N = 0: S1 = 0: S2 = 0 480 FOR I = 1 TO CLASSES + 2 490 N = N + F(I): REM TOTAL NUMBER OF SAMPLING UNITS 500 S1 = S1 + (X(I) * F(I)): REM TOTAL NUMBER OF INDIVIDUALS 510 S2 = S2 + ((X(I) * X(I)) * F(I)): REM SUMS OF SQS OF INDIVIDUALS 520 NEXT I 530 REM CALCULATE INDEX OF DISPERSION, GREEN'S INDEX, K OF NEG. BINOM 540 MEAN = S1 / N: REM MEAN 550 VAR = (S2 - (MEAN * S1)) / (N - 1): REM VARIANCE 560 ID = VAR / MEAN: REM INDEX DISP (EQ. 3.6) 570 CS = ID * (N - 1): REM CHI-SQ (EQ. 3.7B) 580 DS = SQR(2 * CS) - SQR(2 * (N - 1) - 1): REM D STATISTIC (EQ. 3.8) 590 GI = (ID - 1) / (S1 - 1): REM GREEN'S INDEX (EQ 3.10) 600 CLS : PRINT "SUMMARY OF YOUR DATA SET: " 610 PRINT "TOTAL number of sampling units................ "; N 620 PRINT "TOTAL number of individuals .................. "; S1 630 PRINT "Number of Individuals/Sampling Unit " 640 PRINT " MEAN = "; MEAN 650 PRINT " VARIANCE = "; VAR 660 PRINT "VARIANCE/MEAN ratio (Index of Dispersion) .... "; ID 670 PRINT " Chi-Square Statistic (Eq.3.7a) ....... "; CS 680 PRINT " d Statistic (Eq. 3.8) ................ "; DS 690 PRINT "GREEN'S Index ................................ "; GI 700 PRINT : PRINT "PRESS ANY KEY TO CONTINUE" 710 IF INKEY$ = "" THEN 710 720 CLS 730 PRINT "- - - PART II. ESTIMATION OF PARAMETER K OF NEGATIVE BINOMINAL " 740 PRINT 750 K = MEAN ^ 2 / (VAR - MEAN): REM K ESTI BY EQN 3.5 760 IF MEAN > 4 AND K > 4 THEN GOTO 770 ELSE GOTO 800 770 PRINT " The estimate of k using Eqn 3.5 is "; K 780 PRINT " Since the mean ("; MEAN; ") is also > 4.0, this is the preferred" 790 PRINT " estimate of parameter k": GOTO 1090 800 PRINT " The estimate of k using Eqn 3.5 is "; K; " and the mean is "; MEAN 810 PRINT " Since BOTH are NOT > 4.0, k will be estimated using EQN 3.4" 820 PRINT : PRINT 830 PRINT " The objective is to choose different ESTIMATED VALUES of parameter" 840 PRINT " k until the RIGHT-HAND-SIDE of EQN 3.4 matches the LEFT-HAND-SIDE." 850 PRINT " At each iteration, select either a LOWER or HIGHER estimated value" 860 PRINT " of k. NOTE: When selecting a value for k, use the DIFFERENCE as " 870 PRINT " as a guide; for LARGE differences, select larger increments for k" 880 PRINT " and for SMALL differences, make small incremental changes in k " 890 PRINT 900 PRINT "Iteration LEFT H.S. RIGHT H.S. DIFFERENCE" 910 ITER = 0 920 PRINT " 0 ------ -------- ---------- INITIAL Esti of k ="; K 930 LHS = FNF(N / F(1)): REM LEFT -HAND-SIDE OF EQN 3.4 940 RHS = K * FNF(1 + MEAN / K): REM RIGHT-HAND-SIDE OF EQN 3.4 950 DIFF = LHS - RHS 960 IF ITER = 0 THEN GOTO 970 ELSE GOTO 1010 970 IF DIFF = 0 THEN GOTO 1080 980 IF DIFF > 0 THEN CODE$ = "HIGHER" ELSE CODE$ = " LOWER" 990 ITER = 1 1000 GOTO 1050 1010 DIFF2% = DIFF * 10000! 1020 IF ABS(DIFF2%) = 0 THEN GOTO 1080 ELSE GOTO 1030 1030 ITER = ITER + 1 1040 IF DIFF > 0 THEN CODE$ = "HIGHER" ELSE CODE$ = " LOWER" 1050 PRINT USING " ### #.#### #.#### ##.#####"; ITER; LHS; RHS; DIFF; 1060 PRINT " Enter a "; CODE$; : INPUT " Esti of k = ", K 1070 GOTO 940 1080 PRINT : PRINT "** The ESTIMATE OF PARAMETER k using EQN 3.4 is ="; K: PRINT 1090 PRINT " HIT ANY KEY TO CONTINUE" 1100 IF INKEY$ = "" THEN 1100 1110 CLS 1120 PRINT "- - -PART III. COMPUTING THE CHI-SQUARE STATISTIC- - - ": PRINT "" 1130 PRINT "The CHI-SQ. STATISTIC is based on: OBS FREQS (Fx) & EXP FREQS (Ex)" 1140 PRINT " As a general rule, no EXPECTED (Ex) value should ever be < 1 " 1150 PRINT " (Cochran 1954) or, more rigorously, much less than 5 (Poole 1974)" 1160 PRINT " If your data has many Fx's with only 1 SU (this often happens in" 1170 PRINT " tails of the distributions), biased values of CHI-SQ. may result" 1180 PRINT " and POOLING of Ex's should be done so that no Ex < 5. Otherwise " 1190 PRINT " this is not a strict rule and minimum EX values of 1 or 3 may be " 1200 PRINT " tried. In cases where POOLING significantly affects the results " 1210 PRINT " of the test, we recommend the more conservative values. " 1220 PRINT 1230 INPUT " ENTER MINIMUM VALUE of Ex allowed: ", MINEXPFQ: CLS 1240 PRINT "Your data will be pooled in both the UPPER and LOWER tails of the" 1250 PRINT "FREQUENCY distribution if any Ex value is LESS THAN ", MINEXPFQ 1260 PRINT 1270 REM CALCULATE THE EXPECTED NUMBER OF SAMPLING UNITS WITH ZERO INDIVIDUALS 1280 E(1) = ((1 + (MEAN / K)) ^ (-K)) * N 1290 REM CALCULATE THE EXPECTED NUMBER OF SAMPLING UNITS WITH 1,2,etc. INDIVS." 1300 SUMEXP = E(1): FOR I = 2 TO CLASSES + 1 1310 E(I) = (MEAN / (MEAN + K)) * ((K + I - 1 - 1) / (I - 1)) * E(I - 1) 1320 SUMEXP = E(I) + SUMEXP 1330 NEXT I 1340 E(CLASSES + 2) = N - SUMEXP 1350 REM CHECK FOR EXPECTED FREQUENCIES <1 AND COMBINE (UPPER & LOWER TAILS) 1360 REM LOWER TAIL 1370 KK = 0: E2(1) = 0: F2(1) = 0 1380 E2(1) = E(1 + KK) + E2(1) 1390 F2(1) = F(1 + KK) + F2(1) 1400 IF E2(1) > MINEXPFQ THEN GOTO 1420 1410 KK = KK + 1: GOTO 1380 1420 FOR I = 2 TO CLASSES + 2 - KK 1430 E2(I) = E(KK + I) 1440 F2(I) = F(KK + I) 1450 NEXT I 1460 REM UPPER TAIL 1470 JMAX = CLASSES + 2 - KK: E2(JMAX) = 0: E2(JMAX + 1) = 0: F2(JMAX) = 0: L = 0: LL = 0 1480 JMAX = JMAX - LL 1490 E2(JMAX) = E(CLASSES + 2 - L) + E2(JMAX + 1) 1500 F2(JMAX) = F(CLASSES + 2 - L) + F2(JMAX + 1) 1510 IF E2(JMAX) > MINEXPFQ AND E2(JMAX - 1) > MINEXPFQ THEN GOTO 1530 1520 L = L + 1: LL = 1: GOTO 1480 1530 REM COMPUTE THE CHI-SQUARE VALUES 1540 PRINT "# INDIV/SU OBS FREQ EXP FREQ 2 " 1550 PRINT " (x) (Fx) (Ex) (Fx-Ex) /Ex " 1560 PRINT "---------- -------- -------- ----------- " 1590 CHISQ = 0: LINES = 0 1600 FOR I = 1 TO JMAX: LINES = LINES + 1 1610 IF LINES = 15 THEN INPUT " HIT ENTRY/RETURN KEY to Continue ", DD: LINES = DD 1620 CHISQI = ((F2(I) - E2(I)) ^ 2) / E2(I) 1630 CHISQ = CHISQI + CHISQ 1640 IF I = JMAX THEN PRINT USING ">= ###"; KK; 1650 IF I = 1 THEN PRINT USING "0 - ###"; KK; 1660 IF I > 1 AND I < JMAX THEN PRINT USING " ###"; KK; 1670 PRINT USING " #####"; F2(I); 1680 PRINT USING " #####.##"; E2(I); CHISQI 1690 KK = KK + 1 1700 NEXT I 1710 REM CALCULATE DEGREES OF FREEDOM FOR NEG. BINOMINAL 1720 DF = JMAX - 2 - 1 1730 PRINT 1740 PRINT "TOTAL CHI-SQUARE = "; CHISQ; " WITH D.F. = "; DF 1750 FOR I = 1 TO 2: PRINT : NEXT I 1760 PRINT "Hit ANY KEY to Continue" 1770 IF INKEY$ = "" THEN 1770 1780 PRINT " NO Expected (Ex) value was allowed to be less than ", MINEXPFQ 1790 PRINT " Would you like to run this analysis again using a DIFFERENT" 1800 PRINT " MINIMAL allowable size for EXPECTED frequencies? " 1810 INPUT " ENTER Y OR N..."; A$: IF A$ = "Y" OR A$ = "y" THEN GOTO 1230 1820 END