home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1989-07-05 | 14.8 KB | 258 lines
1 ' CONTINGENCY TABLES --- CONTY.BAS --- by Dr Russell Langley 2 GOTO 400 4 '<UNK! {000A}>--- Press Enter --- 5 IF PR THEN RETURN ELSE PRINT TAB(40);:PRINT "Press <Enter> to continue.";:IN$=INKEY$:WHILE INKEY$<>CHR$(13):WEND:LOCATE,40:PRINT SPACE$(26):RETURN 7 '<UNK! {000A}>*** Redirect to Block *** 9 ON QB GOTO 405,177 :STOP '=start,printout.<UNK! {000A}><UNK! {000A}>--- Another go? --- 10 CLOSE:IF HEAD=1 THEN LPRINT" ":LPRINT STRING$(79,61)STRING$(4,10) 11 DO$="run this program again now":GOSUB 20:IF Z$="Y" THEN 2 ELSE 30 19 '<UNK! {000A}>--- Yes/No? --- 20 PRINT:PRINT"Do you want to "+DO$; 21 INPUT" (Y/N)";Z$:IF Z$="" THEN Z$="N":RETURN ELSE Z$=CHR$(ASC(Z$) AND 95):IF Z$="Y" OR Z$="N" THEN RETURN ELSE PRINT"WHAT? ";:GOTO 21 29 '<UNK! {000A}>--- Errors & End --- 30 IF ERR THEN BEEP ELSE RUN"MENU" 39 ON ERROR GOTO 0:END'<UNK! {000A}><UNK! {000A}>--- Messages --- 40 BEEP:PRINT "---> Sorry, that entry is illegal.":RETURN 43 COLOR 23,0:PRINT:PRINT"Working";:COLOR 7,0:RETURN 46 ZZ$=STRING$(37-LEN(Z$)\2,177):LOCATE 1,1:PRINT ZZ$" ";:COLOR 15,0:PRINT Z$;:COLOR 7,0:PRINT" "ZZ$:RETURN 'Display brightened Z$ at top of screen 49 '<UNK! {000A}>*** Vetted Decoding of FF X(I,J) from X$ ***<UNK! {000A}> Needs I, M. 50 K=1:L=M 51 KX=0:FOR J=K TO L:Y$=SPACE$(10):KY=0 52 KX=KX+1:IF KX>LEN(X$) THEN IF J=L THEN 54 ELSE 57 53 Z$=MID$(X$,KX,1):IF INSTR("-.0123456789",Z$) THEN KY=KY+1:MID$(Y$,KY,1)=Z$:GOTO 52 ELSE IF Z$<>" " THEN 58 ELSE IF KY=0 THEN 52 54 X(I,J)=VAL(Y$) 55 NEXT J:IF KX>=LEN(X$) THEN 60 56 PLAY"L8O3CO2C":PRINT"Only the first"L"values have been read in that line. Re-do it";:GOSUB 21:IF Z$="Y" THEN 59 ELSE 60 57 PLAY"L32O4CEG>C":PRINT"Not enough values in the line above. Please re-do whole line.":GOTO 59 58 PLAY"L16O3CEL4>B":PRINT"That line contains a `non-numeric' entry. Please re-do whole line." 59 PRINT"Row"STR$(I);:INPUT X$:IF RIGHT$(X$,1)<>"/" THEN 51 ELSE X$=LEFT$(X$,LEN(X$)-1):N=I+(X$=""):IF X$>"" THEN 51 60 RETURN 159 '<UNK! {000A}>--- Show/Print Answers --- 160 PR=0:CLOSE:OPEN "SCRN:" FOR OUTPUT AS #2:QB=-(QB<>2)*QB-(QB=2)*QBB:RETURN 161 DO$="print these results":GOSUB 20:IF Z$="N" THEN PR=0:RETURN 162 PR=1:IF ID$="" THEN LINE INPUT "Problem ID? ";ID$:GOTO 164 163 LINE INPUT"Problem ID (null = unchanged)? ";Z$:IF Z$>"" THEN ID$=Z$ 164 RETURN 165 QBB=QB:QB=2:CLS:LOCATE 8,1 166 PRINT TAB(12)"KEYTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENCLOSE" 167 PRINT TAB(12)"OPEN OPEN" 168 PRINT TAB(12)"OPEN TURN PRINTER ON. OPEN" 169 PRINT TAB(12)"OPEN OPEN" 170 PRINT TAB(12)"OPEN Then PRESS <ENTER> to start printing ..... or .. OPEN" 171 PRINT TAB(12)"OPEN OPEN" 172 PRINT TAB(12)"OPEN To send Printer Codes in Basic before printing, OPEN" 173 PRINT TAB(12)"OPEN press <Ctrl-Break>, & start printing by GOTO 9. OPEN" 174 PRINT TAB(12)"OPEN OPEN" 175 PRINT TAB(12)"SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENLOAD":IN$=INKEY$ 176 IN$=INKEY$:IF IN$<>CHR$(13) THEN 176 177 CLS:PRINT"Printing .....":LOCATE 4,1:CLOSE:OPEN "LPT1:" FOR OUTPUT AS #2 178 PRINT #2,STRING$(79,61):PRINT #2,DAT$;TAB(42-LEN(T$(OP))\2);T$(OP);TAB(73)VER$:PRINT #2,STRING$(79,61):HEAD=1 179 PRINT #2,CHR$(10)"Problem: "ID$;CHR$(10) 180 RETURN 199 '<UNK! {000A}>*** Show a Row of Data *** 200 PRINT"Row"STR$(I)": ";:FOR J=1 TO M:PRINT USING"#######";X(I,J);:NEXT J:PRINT:RETURN 339 '<UNK! {000A}>--- Date --- 340 DAT$=MID$(DATE$,4,2)+" "+MID$("JanFebMarAprMayJunJulAugSepOctNovDec",-2+3*VAL(LEFT$(DATE$,2)),3)+" "+RIGHT$(DATE$,4):RETURN 349 '<UNK! {000A}> *** Contingency Specials ***<UNK! {000A}>--- Ln X! --- 350 LF=0:IF X>1 THEN FOR J=2 TO X:LF=LF+LOG(J):NEXT J 351 RETURN 359 '<UNK! {000A}>--- L Tail Prob --- 360 CP=P(A):FOR I=1 TO A-1:I1=I-1:P(A-I)=P(A-I1)*(A-I1)*(D-I1)/(B+I)/(C+I):CP=CP+P(A-I):IF P(A-I)<=9.8E-08 THEN I=A 361 NEXT I:RETURN 370 P(0)=P(1)*(D-A)/R1/C1:RETURN 379 '<UNK! {000A}>--- R Tail Prob --- 380 FOR I=1 TO AA-2:J=I-1:IF DD=0 THEN 382 381 PP(AA-I)=PP(AA-J)*(AA-J)*(DD-J)/(BB+I)/(CC+I):CQ=CQ+PP(AA-I):GOTO 383 382 PP(AA-I)=PP(AA-J)*(AA-J)/(BB+I)/(CC+I):CQ=CQ+PP(AA-I) 383 IF CQ>CP THEN CQ=CQ-PP(AA-I):I=AA 384 NEXT I:RETURN 389 '<UNK! {000A}>--- Screen Headers --- 390 CLS:GOSUB 340:PRINT DAT$;TAB(40-LEN(T$(OP))\2);:COLOR 0,7:PRINT " "T$(OP)" ";:COLOR 7,0:PRINT TAB(73)VER$:LOCATE 3,1,0:K=12:RETURN 399 '<UNK! {000A}>--- Start --- 400 KEY OFF:CLEAR:SCREEN 0,0,0,0:CLS:ON ERROR GOTO 30 401 DEFINT I-K:MXR=20:MXC=10:HEAD=0:VER$="(RL,4)" 402 DIM X(MXR,MXC),E(MXR,MXC),R(MXR),C(MXC),XI(MXR),XJ(MXC),P(100),PP(100),T$(4) 403 T$(1)="CHI-SQUARED FOR 2 x 3 OR LARGER TABLES":T$(2)="YATES' CHI-SQUARED FOR 2 x 2 TABLES":T$(3)="FISHER'S EXACT TEST FOR 2 x 2 TABLES":T$(4)="CHI-SQUARED GOODNESS OF FIT, R x 1 TABLES" 404 MA$=", & MEASURES OF ASSOCIATION" 405 QB=1:QBB=QB:CLOSE:CLS:Z$="M E N U F O R C O N T I N G E N C Y T A B L E S":GOSUB 46 406 LOCATE 3,8:PRINT"Press the NUMBER of your choice, and then press <ENTER> to run it.":PRINT STRING$(80,196) 407 LOCATE 6,1:K=6:PRINT"<UNK! {000A}>"TAB(K)"1. "T$(1)MA$".<UNK! {000A}><UNK! {000A}>"TAB(K)"2. "T$(2)MA$".<UNK! {000A}><UNK! {000A}>"TAB(K)"3. "T$(3)"." 408 PRINT"<UNK! {000A}>"TAB(K)"4. "T$(4)".<UNK! {000A}><UNK! {000A}>"TAB(K)"5. Return to Main Menu." 409 PRINT:PRINT" Note: Data entry only from keyboard for these analyses.":PRINT 410 LOCATE,K-3:INPUT"===> Option (1-5) ";OP:ON OP GOTO 467,452,412,553,30:BEEP:PRINT"No, please enter 1, 2, 3, 4, or 5.":GOTO 410 411 '<UNK! {000A}>--- Fisher's Tests --- 412 QB=1:GOSUB 390 413 PRINT TAB(K)"KEYTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENCLOSE" 414 PRINT TAB(K)"OPEN OPEN" 415 PRINT TAB(K)"OPEN This computes probabilities for cell frequencies in OPEN" 416 PRINT TAB(K)"OPEN 2 x 2 contingency tables, provided that OPEN" 417 PRINT TAB(K)"OPEN both 1st row total & 1st column total are < 101. OPEN" 418 PRINT TAB(K)"OPEN OPEN" 419 PRINT TAB(K)"OPEN It compares PROPORTIONS in 2 random binomial samples, OPEN" 420 PRINT TAB(K)"OPEN or seeks ASSOCIATION between 2 qualities tallied as OPEN" 421 PRINT TAB(K)"OPEN matched observations from 1 random sample. OPEN" 422 PRINT TAB(K)"OPEN OPEN" 423 PRINT TAB(K)"OPEN If trouble, try <Ctrl-Break> & GOTO 9. OPEN" 424 PRINT TAB(K)"OPEN OPEN" 425 PRINT TAB(K)"SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENLOAD":LOCATE ,,1 426 PRINT:PRINT TAB(9)"Enter your 2 x 2 table of cell counts by ROWS, in Free Format,":PRINT TAB(9)"with the first cell (A) the smallest or equal smallest count.":PRINT 427 INPUT"Row 1 ";X$:IF X$="" THEN 427 ELSE I=1:M=2:GOSUB 50:A=X(1,1):B=X(1,2) 428 INPUT"Row 2 ";X$:IF X$="" THEN 428 ELSE I=2:GOSUB 50:C=X(2,1):D=X(2,2):R1=A+B:R2=C+D:C1=A+C:C2=B+D:N=R1+R2 429 IF R1>100 THEN BEEP:PRINT"Sorry, your Row 1 Total exceeds 100.":GOTO 11 430 IF C1>100 THEN BEEP:PRINT"Sorry, your Column 1 Total exceeds 100.":GOTO 11 431 GOSUB 43:X=R1:GOSUB 350:LT=LF:X=R2:GOSUB 350:LT=LT+LF:X=C1:GOSUB 350:LT=LT+LF:X=C2:GOSUB 350:LT=LT+LF:X=N:GOSUB 350:LT=LT-LF:X=A:GOSUB 350 432 LB=LF:X=B:GOSUB 350:LB=LB+LF:X=C:GOSUB 350:LB=LB+LF:X=D:GOSUB 350:LB=LB+LF:P(A)=EXP(LT-LB):CP=P(A):IF A=0 THEN 436 ELSE IF A=1 THEN 435 433 FOR I=1 TO A-1:J=I-1:P(A-I)=P(A-J)*(A-J)*(D-J)/(B+I)/(C+I):CP=CP+P(A-I):IF P(A-I)<=9.8E-08 THEN I=A:FLAG=1 434 NEXT I:IF FLAG=1 THEN FLAG=0:GOTO 436 435 P(0)=P(1)*(D-A)/R1/C1:CP=CP+P(0) 436 IF R1=R2 OR C1=C2 THEN CQ=CP:GOTO 444 ELSE IF A<R1*C1/N THEN 442 437 ' --- If A > EXP --- 438 CP=1-CP+P(A):IF CP>0.5 THEN CQ=CP:GOTO 444 439 CQ=0:FOR I=0 TO A:CQ=CQ+P(I):IF CQ>CP THEN CQ=CQ-P(I):I=A 440 NEXT I:GOTO 444 441 ' --- If A < EXP, calc R Tail --- 442 IF R1<C1 THEN AA=R1 ELSE AA=C1 443 BB=R1-AA:CC=C1-AA:DD=R2-CC:LB=0:X=AA:GOSUB 350:LB=LF:X=BB:GOSUB 350:LB=LB+LF:X=CC:GOSUB 350:LB=LB+LF:X=DD:GOSUB 350:LB=LB+LF:PP(AA)=EXP(LT-LB):CQ=PP(AA):IF CQ<CP THEN GOSUB 380 ELSE CQ=0 444 LOCATE ,1:PRINT SPACE$(10);:LOCATE ,1:GOSUB 160:F$="#### ####":CQ=CP+CQ:IF CQ>1 THEN CQ=1 445 PRINT #2,"DATA:":PRINT #2,USING F$;A;B:PRINT #2,USING F$;C;D 446 PRINT #2,:PRINT #2,USING"Probability (this particular table) =###.#!";P(A)*100;"%" 447 PRINT #2,USING"1-Tail Probability (this or any more extreme table) = ###.#!";CP*100;"%":PRINT #2,USING"2-Tail Probability (this or any less likely table) = ###.#!";CQ*100;"%" 448 ' --- Printout? --- 449 IF PR=0 THEN GOSUB 161:IF PR=1 THEN GOSUB 165:GOTO 445 450 GOSUB 160:GOTO 10 451 '<UNK! {000A}>--- Yates' Chi-Sq --- 452 QB=1:GOSUB 390 453 PRINT TAB(K)"KEYTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENCLOSE" 454 PRINT TAB(K)"OPEN OPEN" 455 PRINT TAB(K)"OPEN This computes probabilities for cell frequencies OPEN" 456 PRINT TAB(K)"OPEN in 2 x 2 contingency tables. OPEN" 457 PRINT TAB(K)"OPEN OPEN" 458 PRINT TAB(K)"OPEN It compares PROPORTIONS in 2 random binomial samples, OPEN" 459 PRINT TAB(K)"OPEN or seeks ASSOCIATION between 2 qualities tallied OPEN" 460 PRINT TAB(K)"OPEN as matched observations from 1 random sample. OPEN" 461 PRINT TAB(K)"OPEN OPEN" 462 PRINT TAB(K)"OPEN If trouble, try <Ctrl-Break> & GOTO 9. OPEN" 463 PRINT TAB(K)"OPEN OPEN" 464 PRINT TAB(K)"SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENLOAD":LOCATE ,,1 465 R=2:C=2:LC=1:GOTO 486 466 '<UNK! {000A}>--- Ordinary Chi-Sq --- 467 QB=1:GOSUB 390 468 PRINT TAB(K)"KEYTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENCLOSE" 469 PRINT TAB(K)"OPEN OPEN" 470 PRINT TAB(K)"OPEN This computes probabilities for cell frequencies OPEN" 471 PRINT TAB(K)"OPEN in large contingency tables. OPEN" 472 PRINT TAB(K)"OPEN OPEN" 473 PRINT TAB(K)"OPEN It compares PROPORTIONS in 1 or more samples OPEN" 474 PRINT TAB(K)"OPEN of counts of various kinds, or seeks OPEN" 475 PRINT TAB(K)"OPEN ASSOCIATION between 2 multinomial qualities tallied OPEN" 476 PRINT TAB(K)"OPEN as matched observations from 1 random sample. OPEN" 477 PRINT TAB(K)"OPEN OPEN" 478 PRINT TAB(K)"OPEN Entries are vetted & can be corrected if necessary. OPEN" 479 PRINT TAB(K)"OPEN OPEN" 480 PRINT TAB(K)"OPEN If trouble, try <Ctrl-Break> & GOTO 9. OPEN" 481 PRINT TAB(K)"OPEN OPEN" 482 PRINT TAB(K)"SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENLOAD":LOCATE ,,1:PRINT 483 PRINT"How many ROWS (2-"RIGHT$(STR$(MXR),2)") ";:INPUT R:IF R<2 OR R>MXR THEN BEEP:GOTO 483 484 PRINT"How many COLS (2-"RIGHT$(STR$(MXC),2)") ";:INPUT C:IF C<2 OR C>MXC THEN BEEP:GOTO 484 485 IF C<10 THEN LC=1 ELSE LC=2 486 PRINT:PRINT"Enter"STR$(R)" x "RIGHT$(STR$(C),LC)" Contingency Table by ROWS (in Free Format):":PRINT:M=C:I=1 487 PRINT"Row"I;:INPUT X$:IF X$="" THEN 487 ELSE GOSUB 50:I=I+1:IF I<=R THEN 487 488 IF OP=2 THEN 494 ELSE CLS:PRINT"DATA READ WAS:":PRINT:PRINT SPACE$(7);:FOR J=1 TO C:PRINT USING" Col #";J;:NEXT J:PRINT:FOR I=1 TO R:GOSUB 200:IF I=10 THEN GOSUB 5 489 NEXT I 490 DO$="make any CHANGES to those values":GOSUB 20:IF Z$="N" THEN 494 491 INPUT"Change which ROW ";RR:IF RR<1 OR RR>R THEN 491 492 INPUT"Change which COL ";CC:IF CC<1 OR CC>C THEN 492 493 PRINT"Present value ="X(RR,CC);:INPUT" Correct value ";X(RR,CC):IF OP=4 THEN 570 ELSE 488 494 GOSUB 43:N=0:FOR I=1 TO R:R(I)=0:FOR J=1 TO C:R(I)=R(I)+X(I,J):NEXT J:N=N+R(I):NEXT I:FOR J=1 TO C:C(J)=0:FOR I=1 TO R:C(J)=C(J)+X(I,J):NEXT I:NEXT J 495 GOSUB 538:CLS:F1$="##### ":F2$=" :#####":F3$="#####.#" 496 ' --- Answers --- 497 GOSUB 160 498 PRINT #2,"OBSERVED & EXPECTED VALUES, CONTRIBUTIONS TO CHI-SQUARED, & MARGINAL TOTALS.":PRINT #2,SPACE$(17)".... Any E < 5 will be marked `---' ...." 499 CH=0:FOR I=1 TO R:X=R(I)/N 500 PRINT #2,:PRINT #2,USING"Row##: ";I;:FOR J=1 TO C:PRINT #2,USING F1$;X(I,J);:NEXT J:PRINT #2,USING F2$;R(I):PRINT #2,"Expec: "; 501 FOR J=1 TO C:E(I,J)=X*C(J) 502 IF E(I,J)>=5 THEN PRINT #2,USING F3$;E(I,J); ELSE PRINT #2," ---";USING"#.#";E(I,J); 503 NEXT J:PRINT #2,:PRINT #2,"Contr: "; 504 IF OP=2 THEN 506 505 FOR J=1 TO C:T=(X(I,J)-E(I,J))^2/E(I,J):CH=CH+T:PRINT #2,USING F3$;T;:NEXT J:PRINT #2,:GOTO 507 506 FOR J=1 TO C:T=(ABS(X(I,J)-E(I,J))-0.5)^2/E(I,J):CH=CH+T:PRINT #2,USING F3$;T;:NEXT J:PRINT #2, 507 IF I/5=INT(I/5) THEN GOSUB 5 508 NEXT I 509 FOR J=1 TO C+2:PRINT #2,STRING$(7,".");:NEXT J:PRINT #2,:PRINT #2,"Total: ";:FOR J=1 TO C:PRINT #2,USING F1$;C(J);:NEXT J:PRINT #2,USING F2$;N 510 ' --- Larger Tables --- 511 IF OP=2 THEN 517 ELSE PRINT #2,:PRINT #2,USING"CHI-SQUARED =#####.##, d.f. =####";CH;(R-1)*(C-1):GOSUB 5:IF R<C THEN X=R-1 ELSE X=C-1 512 PRINT #2,USING"Cramer's C =###.####";SQR(CH/(X*N)):GOSUB 548 513 ' --- Printout? --- 514 IF PR=0 THEN GOSUB 161:IF PR=1 THEN GOSUB 165:GOTO 498 515 GOSUB 160:GOTO 10 516 ' --- Yates' Phi, Phi-Limits, Yule's Q --- 517 TP=X(1,1)*X(2,2)-X(1,2)*X(2,1):PH=TP/SQR(R(1)*R(2))/SQR(C(1)*C(2)):TM=R(1):OT=C(1):IF R(2)>TM THEN TM=R(2):OT=C(2) 518 IF C(1)>TM THEN TM=C(1):OT=R(1) 519 IF C(2)>TM THEN TM=C(2):OT=R(2) 520 PU=SQR(((N-TM)/TM)*(OT/(N-OT))):PL=-SQR(((N-TM)/TM)*((N-OT)/OT)):YQ=TP/(X(1,1)*X(2,2)+X(1,2)*X(2,1)) 521 ' --- Odds Ratio & S.E. LN ODS (SO) --- 522 K=0:IF X(1,1)=0 OR X(2,2)=0 THEN K=1:OD=0 ELSE IF X(1,2)=0 OR X(2,1)=0 THEN K=2 523 IF K=0 THEN OD=X(1,1)*X(2,2)/X(1,2)/X(2,1):SO=SQR(1/X(1,1)+1/X(1,2)+1/X(2,1)+1/X(2,2)):GOTO 525 524 SO=SQR(1/(X(1,1)+0.5)+1/(X(1,2)+0.5)+1/(X(2,1)+0.5)+1/(X(2,2)+0.5)) 525 PRINT #2, 526 PRINT #2,USING"Yates' CHI-SQ =#####.##, d.f. = 1";CH:GOSUB 5 527 PRINT #2,USING"PHI Coefficient =###.####";PH 528 PRINT #2,USING"PHI Limits here =###.#### !####.####";PL;"&";PU 529 PRINT #2,USING"Yule's Q =###.####";YQ 530 PRINT #2,USING"S.E. of Q =###.####";(1-YQ^2)*0.5*SO 531 PRINT #2, 532 IF K=2 OR OD>1E+08 THEN PRINT #2,"Odds Ratio = Infinity":PRINT #2,"Ln Odds Ratio = Infinity":GOSUB 548:GOTO 514 533 IF K=0 AND OD>100 THEN PRINT #2,USING"Odds Ratio =########.##";OD:GOTO 535 534 IF K=0 THEN PRINT #2,USING"Odds Ratio =######.####";OD 535 IF K=0 THEN PRINT #2,USING"Ln Odds Ratio =######.####";LOG(OD):PRINT #2,USING "S.E. Ln Odds =######.####";SO:GOSUB 548:GOTO 514 536 PRINT #2,USING"Odds Ratio =#######.####";OD:PRINT #2,"Ln Odds Ratio = Minus Infinity":GOSUB 548:GOTO 514 537 ' --- Lambda --- 538 FOR I=1 TO R:XI(I)=X(I,1):FOR J=2 TO C:IF X(I,J)>XI(I) THEN XI(I)=X(I,J) 539 NEXT J:NEXT I 540 FOR J=1 TO C:XJ(J)=X(1,J):FOR I=2 TO R:IF X(I,J)>XJ(J) THEN XJ(J)=X(I,J) 541 NEXT I:NEXT J 542 RM=R(1):FOR I=2 TO R:IF R(I)>RM THEN RM=R(I) 543 NEXT I 544 CM=C(1):FOR J=2 TO C:IF C(J)>CM THEN CM=C(J) 545 NEXT J 546 TA=0:FOR J=1 TO C:TA=TA+XJ(J):NEXT J:TA=TA-RM:TB=0:FOR I=1 TO R:TB=TB+XI(I):NEXT I:TB=TB-CM:BA=N-RM:BB=N-CM 547 RETURN 548 PRINT #2, 549 PRINT #2,USING"Lambda (A), for predicting ROW =##.####";TA/BA 550 PRINT #2,USING"Lambda (B), for predicting COL =##.####";TB/BB 551 PRINT #2,USING"Lambda (Symmetric Version) =##.####";(TA+TB)/(BA+BB):RETURN 552 '<UNK! {000A}>--- R x 1 Tables --- 553 QB=1:GOSUB 390:F1$=" OBSERVED EXPECTED ":F2$=": ###### ######.###" 554 PRINT TAB(K)"KEYTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENCLOSE" 555 PRINT TAB(K)"OPEN OPEN" 556 PRINT TAB(K)"OPEN This compares a column of 2-20 OBSERVED OPEN" 557 PRINT TAB(K)"OPEN cell counts with their EXPECTED values. OPEN" 558 PRINT TAB(K)"OPEN OPEN" 559 PRINT TAB(K)"OPEN It computes a Chi-Squared value which tells the OPEN" 560 PRINT TAB(K)"OPEN probability of the differences being due to chance. OPEN" 561 PRINT TAB(K)"OPEN OPEN" 562 PRINT TAB(K)"OPEN If trouble, try <Ctrl-Break> & GOTO 9. OPEN" 563 PRINT TAB(K)"OPEN OPEN" 564 PRINT TAB(K)"SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENLOAD":LOCATE ,,1 565 PRINT:PRINT"Your R x 1 Frequency Table is to be entered as R rows, each with 2 entries ---<UNK! {000A}>an OBSERVED count (whole number), & its EXPECTED value (up to 3 decimal places).":PRINT 566 'PRINT"Observed counts will be whole numbers, but expected values can have<UNK! {000A}>up to 3 decimal places if necessary.":? 567 PRINT"How many rows (2-"RIGHT$(STR$(MXR),2)") ";:INPUT R:IF R<2 OR R>MXR THEN BEEP:GOTO 567 568 PRINT"Enter OBSERVED & EXPECTED frequencies (in Free Format):":C=2:M=C:I=1 569 PRINT"Row"I;:INPUT X$:IF X$=""THEN 569 ELSE GOSUB 50:I=I+1:IF I<=R THEN 569 570 SO=0:SE=0:FOR I=1 TO R:SO=SO+X(I,1):SE=SE+X(I,2):NEXT I 571 CLS:PRINT"DATA READ WAS:":PRINT:PRINT F1$:FOR I=1 TO R:PRINT USING"Row###"+F2$;I;X(I,1);X(I,2):IF I=15 THEN GOSUB 5 572 NEXT I 573 PRINT STRING$(28,"."):PRINT USING"Totals"+F2$;SO;SE 574 IF ABS(SO-SE)>0.000899999 THEN BEEP:PRINT:PRINT"Note: OBSERVED & EXPECTED TOTALS DIFFER. FIX THIS!!!<UNK! {000A}>":GOTO 491 575 DO$="make any CHANGES to those values":GOSUB 20:IF Z$="Y" THEN 491 576 CH=0:FOR I=1 TO R:P(I)=(X(I,1)-X(I,2))^2/X(I,2):CH=CH+P(I):NEXT I:IF PR=0 THEN CLS:GOSUB 160 577 ' --- Show data & answers --- 578 PRINT #2,F1$+" CONTRIB TO CHI-SQ" 579 FOR I=1 TO R:PRINT #2,USING"Row###"+F2$+" ######.##";I;X(I,1);X(I,2);P(I):IF I=15 THEN GOSUB 5 580 NEXT I 581 PRINT #2,STRING$(28,"."):PRINT #2,USING"TOTALS"+F2$;SO;SE 582 PRINT #2,:PRINT #2,USING"CHI-SQUARED =#####.##";CH:PRINT #2,"NOTE: The d.f. depend on the number of constraints when calculating the E's." 583 IF PR=0 THEN GOSUB 161:IF PR=1 THEN GOSUB 165:GOTO 578 584 IF PR=1 THEN GOSUB 160:GOTO 10 585 'end