home *** CD-ROM | disk | FTP | other *** search
- C
- C ..................................................................
- C
- C SUBROUTINE TAB2
- C
- C PURPOSE
- C PERFORM A TWO-WAY CLASSIFICATION FOR TWO VARIABLES IN AN
- C OBSERVATION MATRIX (OR A MATRIX SUBSET) OF THE FREQUENCY,
- C PERCENT FREQUENCY, AND OTHER STATISTICS OVER GIVEN CLASS
- C INTERVALS.
- C
- C USAGE
- C CALL TAB2(A,S,NOV,UBO,FREQ,PCT,STAT1,STAT2,NO,NV)
- C
- C DESCRIPTION OF PARAMETERS
- C A - OBSERVATION MATRIX, NO BY NV
- C S - INPUT VECTOR GIVING SUBSET OF A. ONLY THOSE
- C OBSERVATIONS WITH A CORRESPONDING NON-ZERO S(J) ARE
- C CONSIDERED. VECTOR LENGTH IS NO.
- C NOV - VARIABLES TO BE CROSS-TABULATED. NOV(1) IS VARIABLE
- C 1, NOV(2) IS VARIABLE 2. VECTOR LENGTH IS 2. NOV
- C MUST BE GREATER THAN OR EQUAL TO 1 AND LESS THAN
- C OR EQUAL TO NV.
- C UBO - 3 BY 2 MATRIX GIVING LOWER LIMIT, NUMBER OF
- C INTERVALS, AND UPPER LIMIT OF BOTH VARIABLES TO BE
- C TABULATED (FIRST COLUMN FOR VARIABLE 1, SECOND
- C COLUMN FOR VARIABLE 2). IF LOWER LIMIT IS EQUAL TO
- C UPPER LIMIT FOR VARIABLE 1, THE PROGRAM USES THE
- C MINIMUM AND MAXIMUM VALUES ON EACH VARIABLE. NUMBER
- C OF INTERVALS MUST INCLUDE TWO CELLS FOR UNDER AND
- C ABOVE LIMITS.
- C FREQ - OUTPUT MATRIX OF FREQUENCIES IN THE TWO-WAY
- C CLASSIFICATION. ORDER OF MATRIX IS INT1 BY INT2,
- C WHERE INT1 IS THE NUMBER OF INTERVALS OF VARIABLE 1
- C AND INT2 IS THE NUMBER OF INTERVALS OF VARIABLE 2.
- C INT1 AND INT2 MUST BE SPECIFIED IN THE SECOND
- C POSITION OF RESPECTIVE COLUMN OF UBO MATRIX.
- C PCT - OUTPUT MATRIX OF PERCENT FREQUENCIES, SAME ORDER
- C AS FREQ.
- C STAT1 - OUTPUT MATRIX SUMMARIZING TOTALS, MEANS, AND
- C STANDARD DEVIATIONS FOR EACH CLASS INTERVAL OF
- C VARIABLE 1. ORDER OF MATRIX IS 3 BY INT1.
- C STAT2 - SAME AS STAT1 BUT OVER VARIABLE 2. ORDER OF MATRIX
- C IS 3 BY INT2.
- C NO - NUMBER OF OBSERVATIONS. NO MUST BE GREATER THAN
- C OR EQUAL TO 1.
- C NV - NUMBER OF VARIABLES FOR EACH OBSERVATION. NV
- C MUST BE GREATER THAN OR EQUAL TO 1.
- C
- C REMARKS
- C IF S IS NULL, OUTPUT AREAS ARE SET TO ZERO
- C
- C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
- C NONE
- C
- C METHOD
- C INTERVAL SIZES FOR BOTH VARIABLES ARE CALCULATED FROM THE
- C GIVEN INFORMATION OR OPTIONALLY FROM THE MINIMUM AND MAXIMUM
- C VALUES. THE FREQUENCY AND PERCENT FREQUENCY MATRICES ARE
- C DEVELOPED. MATRICES STAT1 AND STAT2 SUMMARIZING TOTALS,
- C MEANS, AND STANDARD DEVIATIONS ARE THEN CALCULATED.
- C THE DIVISOR FOR STANDARD DEVIATION IS ONE LESS THAN THE
- C NUMBER OF OBSERVATIONS USED IN EACH CLASS INTERVAL.
- C
- C ..................................................................
- C
- SUBROUTINE TAB2(A,S,NOV,UBO,FREQ,PCT,STAT1,STAT2,NO,NV)
- DIMENSION A(1),S(1),NOV(2),UBO(3,2),FREQ(1),PCT(1),STAT1(1),
- 1STAT2(2),SINT(2)
- DIMENSION WBO(3,2)
- DO 5 I=1,3
- DO 5 J=1,2
- 5 WBO(I,J)=UBO(I,J)
- C
- C DETERMINE LIMITS
- C
- DO 40 I=1,2
- IF(UBO(1,I)-UBO(3,I)) 40, 10, 40
- 10 VMIN=1.0E38
- VMAX=-1.0E38
- IJ=NO*(NOV(I)-1)
- DO 35 J=1,NO
- IJ=IJ+1
- IF(S(J)) 15,35,15
- 15 IF(A(IJ)-VMIN) 20,25,25
- 20 VMIN=A(IJ)
- 25 IF(A(IJ)-VMAX) 35,35,30
- 30 VMAX=A(IJ)
- 35 CONTINUE
- UBO(1,I)=VMIN
- UBO(3,I)=VMAX
- 40 CONTINUE
- C
- C CALCULATE INTERVAL SIZE
- C
- 45 DO 50 I=1,2
- 50 SINT(I)=ABS((UBO(3,I)-UBO(1,I))/(UBO(2,I)-2.0))
- C
- C CLEAR OUTPUT AREAS
- C
- INT1=UBO(2,1)
- INT2=UBO(2,2)
- INTT=INT1*INT2
- DO 55 I=1,INTT
- FREQ(I)=0.0
- 55 PCT(I)=0.0
- INTY=3*INT1
- DO 60 I=1,INTY
- 60 STAT1(I)=0.0
- INTZ=3*INT2
- DO 65 I=1,INTZ
- 65 STAT2(I)=0.0
- C
- C TEST SUBSET VECTOR
- C
- SCNT=0.0
- INTY=INT1-1
- INTX=INT2-1
- IJ=NO*(NOV(1)-1)
- IJX=NO*(NOV(2)-1)
- DO 95 J=1,NO
- IJ=IJ+1
- IJX=IJX+1
- IF(S(J)) 70,95,70
- 70 SCNT=SCNT+1.0
- C
- C CALCULATE FREQUENCIES
- C
- TEMP1=UBO(1,1)-SINT(1)
- DO 75 IY=1,INTY
- TEMP1=TEMP1+SINT(1)
- IF(A(IJ)-TEMP1) 80,75,75
- 75 CONTINUE
- IY=INT1
- 80 IYY=3*(IY-1)+1
- STAT1(IYY)=STAT1(IYY)+A(IJ)
- IYY=IYY+1
- STAT1(IYY)=STAT1(IYY)+1.0
- IYY=IYY+1
- STAT1(IYY)=STAT1(IYY)+A(IJ)*A(IJ)
- TEMP2=UBO(1,2)-SINT(2)
- DO 85 IX=1,INTX
- TEMP2=TEMP2+SINT(2)
- IF(A(IJX)-TEMP2) 90,85,85
- 85 CONTINUE
- IX=INT2
- 90 IJF=INT1*(IX-1)+IY
- FREQ(IJF)=FREQ(IJF)+1.0
- IX=3*(IX-1)+1
- STAT2(IX)=STAT2(IX)+A(IJX)
- IX=IX+1
- STAT2(IX)=STAT2(IX)+1.0
- IX=IX+1
- STAT2(IX)=STAT2(IX)+A(IJX)*A(IJX)
- 95 CONTINUE
- IF (SCNT)98,151,98
- C
- C CALCULATE PERCENT FREQUENCIES
- C
- 98 DO 100 I=1,INTT
- 100 PCT(I)=FREQ(I)*100.0/SCNT
- C
- C CALCULATE TOTALS, MEANS, STANDARD DEVIATIONS
- C
- IXY=-1
- DO 120 I=1,INT1
- IXY=IXY+3
- ISD=IXY+1
- TEMP1=STAT1(IXY)
- SUM=STAT1(IXY-1)
- IF(TEMP1-1.0) 120,105,110
- 105 STAT1(ISD)=0.0
- GO TO 115
- 110 STAT1(ISD)=SQRT(ABS((STAT1(ISD)-SUM*SUM/TEMP1)/(TEMP1-1.0)))
- 115 STAT1(IXY)=SUM/TEMP1
- 120 CONTINUE
- IXX=-1
- DO 140 I=1,INT2
- IXX=IXX+3
- ISD=IXX+1
- TEMP2=STAT2(IXX)
- SUM=STAT2(IXX-1)
- IF(TEMP2-1.0) 140,125,130
- 125 STAT2(ISD)=0.0
- GO TO 135
- 130 STAT2(ISD)=SQRT(ABS((STAT2(ISD)-SUM*SUM/TEMP2)/(TEMP2-1.0)))
- 135 STAT2(IXX)=SUM/TEMP2
- 140 CONTINUE
- DO 150 I=1,3
- DO 150 J=1,2
- 150 UBO(I,J)=WBO(I,J)
- 151 RETURN
- END
- GO TO 115
- 110 STAT1(ISD)=SQRT(ABS((STAT1(ISD)-SUM*SUM/TEMP1)/(TEMP1-1.0)))
- 115 STAT1(IXY)=SUM/TEMP1
- 120 CONT