1 ' CORRELATIONS --- COREL.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
6 PRINT TAB(14);:PRINT "Press <Enter> to continue, or `/' to end viewing.";:IN$=INKEY$:WHILE IN$<>CHR$(13) AND IN$<>"/":IN$=INKEY$:WEND:LOCATE,14:PRINT SPACE$(50):IF IN$="/" THEN I=N:RETURN ELSE RETURN
7 '<UNK! {000A}><UNK! {000A}>*** Redirect to Block ***
9 ON QB GOTO 400,177,412:STOP '=start,printout,etc - CLOSE (exc 177)<UNK! {000A}><UNK! {000A}>--- Another go? ---
10 CLOSE:IF HD$="" THEN LPRINT STRING$(79,61)STRING$(4,10)
11 GOTO 400
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"
31 IF ERR=70 THEN INPUT"Can't write to that disk. Remove its Write-Protect tab, then press <Enter>.";Z$:RESUME
32 IF ERR=71 THEN INPUT"That drive is empty or its gate is open. Fix, then press <Enter>.";Z$:RESUME
33 IF ERR=210 THEN RESUME 9 'from #86
39 ON ERROR GOTO 0:END'<UNK! {000A}><UNK! {000A}>--- Messages ---
40 BEEP:PRINT "---> Sorry, that entry is illegal.":RETURN
41 BEEP:PRINT "---> Sorry, double quotes are not allowed here.":RETURN
42 BEEP:PRINT"* * * Can't Do That.":QB=4:GOTO 9
43 COLOR 23,0:PRINT:PRINT"Working";:COLOR 7,0:RETURN
44 LOCATE,1:PRINT"Ok, done.";:GOTO 5
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, Q(0) from #96 or #256, & UT>0 if UT matrix.<UNK! {000A}> Signals NEG=1 for Spearman's r.
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 IF Q(0) THEN Q(J)=VAL(Y$) ELSE X(I,J)=VAL(Y$):IF X(I,J)<0 THEN NEG=1
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
69 '<UNK! {000A}>--- K/b Input of all X(I,J) in FF ---<UNK! {000A}> Needs first I, M, Q>0 (sample #), KN(Q), & if UT matrix UT>0. Returns N.
70 PRINT"Enter data from keyboard, ";:IF M=1 THEN PRINT "pressing <Enter> after each number.":GOTO 72
71 PRINT"in Free Format, pressing <Enter> at end of each row."
72 PRINT"Null entry duplicates previous row. Signal `end-of-data' by entering a `/'"
73 PRINT "Row"STR$(I-KN(Q-1));:INPUT X$:IF X$=""THEN IF I>1 THEN FOR J=1 TO M:X(I,J)=X(I-1,J):NEXT J:I=I+1:LOCATE CSRLIN-1,POS(0)+9:PRINT"Ditto":GOTO 73
74 IF RIGHT$(X$,1)="/" THEN X$=LEFT$(X$,LEN(X$)-1):N=I+(X$=""):IF X$="" THEN 76
75 GOSUB 50:IF N=0 THEN IF I<MXR THEN I=I+1:GOTO 73 ELSE N=MXR
76 RETURN
79 '<UNK! {000A}>--- Disk Input of X(I,J), N, M, etc ---<UNK! {000A}> Needs MNR, MNC, & NEEDVARS. Also ZZ$="UTOK" if UT is acceptable.
80 QD=1:IO$="I":GOSUB 110:CLS:PRINT "Loading data from disk.":INPUT #1,FL$,VR$
81 IF LEFT$(VR$,4)<>"(RL," THEN BEEP:PRINT "Unreadable file --- not made by our Data Filer/Editor program.":GOTO 86
83 IF UT>0 AND ZZ$<>"UTOK" THEN PRINT "This file is an upper triangular matrix, which this program can't use!":GOTO 86
84 PRINT"File has"N"rows of data. ";:IF N<MNR THEN PRINT "--- Not enough!":GOTO 86 ELSE IF N>MXR THEN PRINT"--- Too many!":GOTO 86
85 PRINT:PRINT"File has"M"column variables. ";:IF M<MNC THEN PRINT "--- Not enough!" ELSE IF M>MXC THEN PRINT"Too many!" ELSE 88
86 CLOSE:BEEP:GOSUB 5:ERROR 210
87 ' Select variables
88 PRINT:IF VN$="N" THEN PRINT "The"M"variables are not named.":GOTO 90
89 PRINT "Variables in file are:":FOR J=1 TO M:INPUT #1,VN$(J):PRINT J;VN$(J),:NEXT J:PRINT
90 IF M=MNC OR UT>0 THEN 100 ELSE PRINT
91 IF NEEDVARS=0 THEN PRINT"How many filed column variables are to be IGNORED (0-"MID$(STR$(M-MNC),2)")";:INPUT ND:IF ND<0 OR ND>M-MNC THEN 91 ELSE IF ND=0 THEN 100
92 IF NEEDVARS=1 THEN PRINT"This test analyses only 1 column variable at a time.":ND=M-1
93 IF NEEDVARS=2 THEN PRINT"This test analyses only 2 column variables.":ND=M-2
94 IF ND=1 THEN PRINT "Number of the variable to be IGNORED (1-"MID$(STR$(M),2)")";:INPUT X$:Q(1)=VAL(X$):IF Q(1)<1 OR Q(1)>M THEN GOSUB 40:GOTO 94 ELSE 97
95 PRINT MID$(STR$(ND),2)" numbers of variables to be IGNORED (in ascending order & Free Format):":INPUT X$:IF VAL(X$)<1 THEN GOSUB 40:GOTO 95
96 Q(0)=1:MM=M:M=ND:GOSUB 50:Q(0)=0:M=MM
97 KK=1:L=1:FOR J=1 TO M:IF J=Q(KK) THEN KK=KK+1 ELSE VN$(L)=VN$(J):L=L+1
98 NEXT J
99 ' Now read numerical data from disk
100 PRINT:COLOR 23,0:PRINT"Loading numbers";:COLOR 7,0:FOR I=1 TO N:KK=1:LL=1:L=M
101 FOR J=1 TO L:INPUT #1,Z
102 IF J=Q(KK) THEN KK=KK+1 ELSE X(I,LL)=Z:LL=LL+1
103 NEXT J:NEXT I:CLOSE:LOCATE,1:PRINT SPACE$(15):M=M-ND:RETURN
109 '<UNK! {000A}>--- Get Filespec ---
110 IF IO$="O" AND FL$>"" THEN PRINT "Will you file this data under the name "FL$;:GOSUB 21:IF Z$="Y" THEN 115
111 LINE INPUT "Filename (I will add .DAT extension)? ";FL$:IF FL$="" THEN 111 ELSE IF MID$(FL$,2,1)=":" THEN DR$=LEFT$(FL$,1):FL$=MID$(FL$,3)
112 ER=0:FOR I=1 TO LEN(FL$):Z$=MID$(FL$,I,1):IF INSTR(" .,/\|?*:;[]+="+CHR$(34),Z$) THEN ER=1
113 NEXT I
114 IF ER=0 AND FL$>"" AND LEN(FL$)<9 THEN FL$=FL$+".DAT" ELSE BEEP:PRINT "Invalid filename. Will you try again";:GOSUB 21:IF Z$="Y" THEN 111 ELSE 2
115 INPUT "Which drive (A,B,C,D)";DR$:IF DR$="" THEN 115
116 DR$=CHR$(ASC(DR$) AND 95):IF INSTR("ABCD",DR$)=0 THEN 115
117 INPUT "Which directory (e.g. WORK, MYDATA, or Null Entry if root) ";DR2$:IF DR2$="" THEN DR$=DR$+":" ELSE DR$=DR$+":\"+DR2$+"\"
129 '<UNK! {000A}>*** Open File, IO$= "I" ***
130 IF IO$="O" THEN STOP
131 '
132 '
133 '
134 ON ERROR GOTO 136:OPEN DR$+FL$ FOR INPUT AS #1 'for input
253 INPUT"Which transform (+/- 1 to 9, or 10)";T%:IF T%=10 THEN 273 ELSE IF ABS(T%)<1 OR ABS(T%)>9 THEN PRINT"WHAT? ";:GOTO 253
254 IF M=1 THEN NT=1:Q(1)=1:GOTO 257 ELSE PRINT"How many variables are to have this transform (max"STR$(M)")";:INPUT NT:IF NT<1 OR NT>M THEN 254 ELSE IF NT=M THEN FOR J=1 TO M:Q(J)=J:NEXT J:GOTO 257
255 IF NT=1 THEN INPUT"Which variable # ";X$:Q(1)=VAL(X$):IF Q(1)<1 OR Q(1)>M THEN PRINT"Silly":GOTO 255 ELSE 257
256 PRINT"Which"NT"variables (#'s in Free Format)";:INPUT X$:I=1:MM=M:M=NT:Q(0)=1:GOSUB 50:Q(0)=0:M=MM:FOR J=1 TO NT:IF Q(J)>0 AND Q(J)<=M THEN NEXT J ELSE PRINT"Value"J"is out-of-bounds. Try again.":GOTO 256
262 IF X(I,K)>=Z THEN X(I,K)=(SIN(X(I,K)/A))^2:IF T%=-U THEN 271 ELSE X(I,K)=H*X(I,K):GOTO 271 ELSE T%=U:GOTO 272
263 X(I,K)=X(I,K)+U
264 IF X(I,K)>Z THEN X(I,K)=B*LOG(X(I,K)):GOTO 271 ELSE 272
265 X(I,K)=EXP(X(I,K)/B):IF T%=-3 THEN 271 ELSE X(I,K)=X(I,K)-U:GOTO 271
266 X(I,K)=X(I,K)+U
267 IF X(I,K)<>Z THEN X(I,K)=H/X(I,K):IF T%=-6 THEN X(I,K)=X(I,K)-U:GOTO 271 ELSE 271 ELSE 272
268 X(I,K)=X(I,K)+P5
269 IF X(I,K)>=Z THEN X(I,K)=SQR(X(I,K)):GOTO 271 ELSE T%=7:GOTO 272
270 X(I,K)=X(I,K)*X(I,K):IF T%=-8 THEN X(I,K)=X(I,K)-P5
271 NEXT I:NEXT J:IF E$(0)=""THEN GOSUB 44:GOTO 273
272 BEEP:E$(0)="PROPORTION < 0":E$(1)="LOG 0 or Negative Number":E$(2)="DIVISION by 0":E$(3)="SQRT of Negative Number":PRINT:PRINT"Fatal Error: "E$((ABS(T%)-1)/2)", Row"I:GOSUB 5:END
273 RETURN
279 '<UNK! {000A}>--- Rank & Tie Corr Sub ---<UNK! {000A}> Ranks input X(II,Q), II=1 to NN, Q= a constant (e.g. 0).<UNK! {000A}> Returns ranks in RK(II), ave ranks if tied, & usually tie correction (TC).<UNK! {000A}> Alters II, JJ, LK(II), SM, EQ, AR!, & KT.
280 ERASE RK,LK:DIM RK(NN),LK(NN):FOR II=1 TO NN:IF RK(II)>0 THEN 284 ELSE SM=0:EQ=0:FOR JJ=1 TO NN:IF X(JJ,Q)<X(II,Q) THEN SM=SM+1 ELSE IF X(JJ,Q)=X(II,Q) THEN EQ=EQ+1:RK(JJ)=-1
281 NEXT JJ:IF EQ<2 THEN RK(II)=SM+1:GOTO 284
282 AR!=SM+(EQ+1)/2:FOR JJ=II TO NN:IF RK(JJ)=-1 THEN RK(JJ)=AR!
283 NEXT JJ
284 NEXT II:IF NO.TC THEN RETURN
285 ' Tie Correction
286 TC=0:FOR II=1 TO NN-1:IF LK(II) THEN 288 ELSE KT=1:FOR JJ=II+1 TO NN:IF ABS(RK(II)-RK(JJ))<0.1 THEN KT=KT+1:LK(JJ)=1
287 NEXT JJ:IF KT>1 THEN TC=TC+KT*KT*KT-KT
288 NEXT II:TC=TC/12:RETURN 'for Spearman & Rank Biserial.
349 '<UNK! {000A}>--- Number Sorter ---<UNK! {000A}>Convert numbers to sortable strings, then sort string array by:<UNK! {000A}> DEF SEG: STRSORT=VARPTR(STRSORT%(0)):CALL STRSORT(n,x$(0))<UNK! {000A}>where n = no. of elements, & x$(0) = 1st element of string array (J. Dorner).
350 PRINT:INPUT"Maximum number of decimal places in your data (0-5)";NDP:IF NDP<0 OR NDP>5 THEN 350 ELSE I=NDP-(NDP>0)+(NDP=5):DP#=10^I 'DP enhanced if NDP=1-4 to ensure accurate estimates of medians
363 R=(R(I)-R(J)*R(K))/SQR((1-R(J)*R(J))*(1-R(K)*R(K))):RETURN'<UNK! {000A}><UNK! {000A}>--- Set binomial X(I,B) = 0 or 1 ---
364 X=X(1,B):FOR I=2 TO N:IF X(I,B)>X THEN I=N ELSE IF X(I,B)<X THEN X=X(I,B):I=N
365 NEXT I:NB=0:FOR I=1 TO N:IF X(I,B)=X THEN X(I,B)=0 ELSE X(I,B)=1:NB=NB+1
366 NEXT I:RETURN'<UNK! {000A}><UNK! {000A}>--- Pearson r ---
370 A=0:B=0:C=0:D=0:E=0:FOR I=1 TO N:A=A+X(I,1):B=B+X(I,1)*X(I,1):C=C+X(I,2):D=D+X(I,2)*X(I,2):E=E+X(I,1)*X(I,2):NEXT I:B=B-A*A/N:D=D-C*C/N:E=E-A*C/N:R=E/SQR(B*D):DF=N-2:RQ=1-R*R:IF RQ>0 THEN T=R*SQR(DF/RQ):RETURN ELSE T=100000:RETURN
374 '<UNK! {000A}>--- Z for given P (Hastings p 191) ---
375 ET=SQR(LOG(1/P^2)):Z=ET-((2.30753+ET*0.27061)/(1+ET*(0.99229+ET*0.04481))):H=2.71828^(Z*Z/-2)/2.50663:RETURN'<UNK! {000A}><UNK! {000A}>--- Fisher's z ---
380 FZ=LOG((1+R)/(1-R))/2:SEZ=1/SQR(W):RETURN
381 Z=EXP(2*Z):RR=(Z-1)/(Z+1):RETURN
382 '<UNK! {000A}>--- Input & Validate Correlations for Partials ---
383 GOSUB 362:INPUT X$:GOSUB 390:IF L=501 OR L=-1 THEN 383 ELSE RETURN
384 '<UNK! {000A}>--- Input Correlations for Ave & Compares ---<UNK! {000A}> Needs I, J. Uses X$, L. Returns X(I,J) & N.
385 INPUT;" r: ",X$:IF X$="" THEN 385 ELSE IF X$="/" THEN N=I-1:GOTO 387
386 GOSUB 390:IF L=501 OR L=-1 THEN 385 ELSE X(I,J)=VAL(X$)
387 RETURN
389 '<UNK! {000A}>--- Validate X$ as a number (uses L) ---
390 FOR L=1 TO LEN(X$):IF INSTR("+-.0123456789",MID$(X$,L,1))=0 THEN PLAY"L16O3CEL4>B":PRINT" That contains a `non-numeric' entry. Please re-do.":L=500
391 NEXT L:IF L=501 OR J=2 AND (OP=7 OR OP=8) THEN 393
392 IF VAL(X$)<=-1 OR VAL(X$)>=1 THEN BEEP:PRINT" Correlations must be between -1 and +1.":L=-1
410 PRINT"<UNK! {000A}>"TAB(K)"6 "T$(6)TAB(43)"<--Data from keyboard (not files).<UNK! {000A}>"TAB(K)"7 "T$(7)TAB(43)"<--Ditto.<UNK! {000A}>"TAB(K)"8 "T$(8)TAB(43)"<--Ditto.<UNK! {000A}>"TAB(K)"9 "T$(9)TAB(43)"<--Ditto, with 3-4 variables.<UNK! {000A}>"TAB(K-1)"10 Return to Main Menu.<UNK! {000A}>"
411 PRINT:LOCATE,K-3:INPUT"===> Option (1-10) ";OP:IF OP=10 THEN 30 ELSE IF OP<1 OR OP>10 THEN PRINT"No, please enter a number from 1 to 10":GOTO 411 ELSE HD$=T$(OP):VER$="(RL,5)"
424 DO$="enter data from disk":GOSUB 20:PRINT:IF Z$="N" THEN 428
425 '<UNK! {000A}>--- Disk Entry ---
426 QD=1:MNR=4:MNC=2:GOSUB 80:GOSUB 5:GOTO 430
427 '<UNK! {000A}>--- K/b Entry ---
428 QD=0:PRINT"Ok, enter 4-400 paired values, 1 pair per line in Free Format, from keyboard.":IF OP>2 THEN PRINT TAB(5)"Note ---> Either can be the Binomial Variable, valued say 0 and 1."
429 I=1:M=2:Q=1:GOSUB 72
430 CLS:PRINT"Data read was:":FOR I=1 TO N:PRINT"Row #"MID$(STR$(I),2)": ";:FOR J=1 TO M:PRINT X(I,J);:NEXT J:PRINT:NEXT I:IF OP<6 AND N<4 THEN PRINT"Not enough rows to analyse. Will you add others";:GOSUB 21:IF Z$="N" THEN 2 ELSE 441
431 '<UNK! {000A}>--- Edit ---
432 PRINT:PRINT ED$(QD);:INPUT Z$:IF Z$="" THEN 442 ELSE LZ$=CHR$(ASC(Z$) AND 95):I=VAL(MID$(Z$,2))
433 IF LZ$="C" THEN 435 ELSE IF QD THEN 434 ELSE IF LZ$="D" THEN 439 ELSE IF LZ$="X" THEN 440
434 BEEP:IF QD=0 AND (LZ$="C" OR LZ$="D") THEN PRINT"C or D need a valid row number.":GOTO 432 ELSE PRINT"WHAT?":GOTO 432
435 IF I<1 OR I>N THEN 434 ELSE GOSUB 200
436 PRINT"Change which variable # (1 or 2)";:INPUT Z$:IF Z$="" THEN 432 ELSE J=VAL(Z$):IF J<1 OR J>M THEN BEEP:GOTO 436
437 PRINT"Old value = "X(I,J)" New value";:INPUT X$:IF X$="" THEN 432 ELSE FOR L=1 TO LEN(X$):IF INSTR("-+.0123456789",MID$(X$,L,1))=0 THEN PLAY"L16O3CEL4>B":PRINT"That contains a `non-numeric' entry. Please re-do it.":GOTO 437
438 NEXT L:X(I,J)=VAL(X$):PRINT"New ";:IF X(I,J)<0 THEN NEG=1:GOTO 430 ELSE 430
439 IF I<1 OR I>N OR (N<5 AND OP<6) THEN GOSUB 40:GOTO 432 ELSE N=N-1:FOR K=I TO N:FOR L=1 TO M:X(K,L)=X(K+1,L):NEXT L:NEXT K:PRINT"Ok, Row"I"Deleted.":GOSUB 5:GOTO 430
440 IF N=MXR THEN PRINT"No, you have maximum rows already.":GOTO 432
441 PRINT"Ok, you can add up to"MXR-N"extra rows in Free Format.":I=N+1:N=0:Q=1:GOSUB 72:GOTO 430
442 IF OP>5 THEN RETURN ELSE IF OP=1 OR OP=5 THEN DO$="transform this data":GOSUB 20:IF Z$="Y" THEN GOSUB 250:GOTO 430
443 '<UNK! {000A}>--- Branch ---
444 IF OP=6 THEN 750
445 IF OP<6 AND VN$<>"Y" THEN VN$(1)="Var #1":VN$(2)="Var #2"
446 IF OP=1 OR OP=3 THEN GOSUB 43
447 ON OP GOTO 500,550,600,650,650,750,800,800,900:STOP
556 Q=J:NN=N:GOSUB 280:IF J=2 THEN TY=TC ELSE TX=TC:FOR I=1 TO N:X(I,0)=RK(I):NEXT I
557 NEXT J
558 FOR I=1 TO N:SUMDSQ=SUMDSQ+(RK(I)-X(I,0))^2:NEXT I
559 DF=N-2:ZN=N*N*N-N:TC=TX+TY:IF TC>0.1 THEN 562
560 R=1-SUMDSQ/ZN*6:RQ=1-R*R:IF RQ>0 AND N>13 THEN T=R*SQR(DF/RQ)
561 GOTO 565
562 SSX=ZN/12-TX:SSY=ZN/12-TY:R=(SSX+SSY-SUMDSQ)/2/SQR(SSX*SSY):RQ=1-R*R:IF RQ>0 AND N>13 THEN T=R*SQR(DF/RQ) ELSE T=100000
563 R2=1-(SUMDSQ+TC)/ZN*6:RQ=1-R2*R2:IF RQ>0 AND N>13 THEN T2=R2*SQR(DF/RQ) ELSE T2=100000
564 '<UNK! {000A}>--- Spearman Answers ---
565 PS$=" (Langley, `PRAC STATS', p 204)"
566 GOSUB 395:FOR I=1 TO 3:X(I,1)=X(I,1)+CONST:X(I,2)=X(I,2)+CONST:NEXT I
567 GOSUB 396:IF TC>0.1 THEN 570
568 PRINT #2,CHR$(10)"No ties."STRING$(2,10)" Sum D Squared ="SUMDSQ;PS$
569 PRINT #2,TAB(4);USING T$(2)+" ="+F$;R:IF N>13 AND RQ>0 THEN PRINT #2,TAB(5)USING STDF$;T;:PRINT #2,DF:GOTO 574 ELSE PRINT #2,:GOTO 574
570 PRINT #2,CHR$(10)"Ties present, so for AGREEMENT between "VN$(1)" & "VN$(2)":":PRINT #2," Sum D Squared ="SUMDSQ;PS$
571 PRINT #2,TAB(4)T$(2)" =";USING F$;R;:IF N>13 AND T<>100000 THEN PRINT #2,TAB(5)USING STDF$;T;:PRINT #2,DF ELSE PRINT #2,
572 PRINT #2,CHR$(10)"or....for ACCURACY of "VN$(1)" or "VN$(2)":":PRINT #2," Sum D Squared + Tie Correction ="SUMDSQ+TC;PS$
573 PRINT #2,TAB(4);USING T$(2)+" ="+F$;R2;:IF N>13 AND T2<>100000 THEN PRINT #2,TAB(5)USING STDF$;T2;:PRINT #2,DF ELSE PRINT #2,
574 IF PR THEN J=1:K=2:GOSUB 190 ELSE GOSUB 161:IF PR THEN GOSUB 165:GOTO 567
575 GOTO 10
599 '<UNK! {000A}>--- Point Biserial ---
600 GOSUB 370:GOSUB 395
601 GOSUB 396
602 PRINT #2,:PRINT#2,TAB(7)T$(3)" =";USING F$;R;:PRINT #2,TAB(40)USING STDF$;T;:PRINT #2,DF:PRINT #2,CHR$(10)TAB(18)"95% & 99"CL$":":PRINT #2,TAB(8)"See Perry & Michael, `EDUC.PSYCHOL.MSMT.' 1954, p. 715"
603 IF PR THEN J=1:K=2:GOSUB 190 ELSE GOSUB 161:IF PR THEN GOSUB 165:GOTO 601
604 GOTO 10
649 '<UNK! {000A}>--- Rank Bis r ---
650 INPUT"<UNK! {000A}>Which # is your binomial variable (1 or 2)";B:IF B<1 OR B>2 THEN GOSUB 40:GOTO 650 ELSE PRINT"Ok, I will recode that variable to 0 and 1 (if it's not already scored so).":PRINT:GOSUB 5:GOSUB 43:IF OP=5 THEN 700
651 NN=N:Q=3-B:GOSUB 280:GOSUB 364
652 FOR I=1 TO N:XY=XY+RK(I)*X(I,B):NEXT I:R=(2*XY/NB-N-1)/(N-NB):GOSUB 395
653 GOSUB 396:PRINT #2,"<UNK! {000A}><UNK! {000A}>"TAB(20)T$(4)" =";USING F$;R:PRINT #2,CHR$(10)TAB(12)"Use Wilcoxon's Sum of Ranks for Significance."
654 IF PR THEN J=1:K=2:GOSUB 190 ELSE GOSUB 161:IF PR THEN GOSUB 165:GOTO 653
915 Q9=1:PRINT #2,"DATA:":FOR I=12 TO 14:ZZ=I:GOSUB 360:NEXT I:PRINT #2,:FOR I=23 TO 24:ZZ=I:GOSUB 360:NEXT I:I=34:ZZ=I:GOSUB 360:PRINT #2,P1$
916 FOR I=0 TO 2:ZZ=X(I):GOSUB 360:NEXT I:PRINT #2,:FOR I=3 TO 5:ZZ=X(I):GOSUB 360:NEXT I:PRINT #2,
917 FOR I=6 TO 8:ZZ=X(I):GOSUB 360:NEXT I:PRINT #2,:FOR I=9 TO 11:ZZ=X(I):GOSUB 360:NEXT I:PRINT #2,P2$:FOR I=35 TO 37:ZZ=X(I):GOSUB 360:NEXT I:PRINT #2,
918 FOR I=38 TO 40:ZZ=X(I):GOSUB 360:NEXT I:PRINT #2,
919 IF PR THEN GOSUB 193 ELSE GOSUB 161:IF PR THEN GOSUB 165:GOTO 915