3  REM       HISTOG:    A HISTOGRAM FORMED FROM A SET OF NUMBERS   
4  REM
5  REM       36055    REV B      3/72       
6  REM
7  REM ****  CONTRIBUTED PROGRAM **************************************
9000  REM  *****  HISTOG  *****  STATISTICS PROGRAM  *****
9001  REM  *****  VERSION 2  *****  11/17/70  *****
9002  REM  FORMS HISTOGRAM OF SET OF NUMBERS
9003  DIM G[100],F[100]
9004  LET N=100
9005  READ W0,W1,W9
9006  REM --  FIND MEAN AND STANDARD DEVIATION OF RAW DATA
9007  W5=S=C=Z=0
9008  FOR W3=1 TO W9
9009  READ G[W3]
9010  W5=W5+G[W3]
9011  S=S+(G[W3]^2)
9012  NEXT W3
9013  D=SQR((S-(W5^2/W9))/(W9-1))
9014  W5=W5/W9
9015  REM  --  FIND MEDIAN OF RAW DATA
9016  W3=0
9017  FOR I=2 TO W9
9018  IF G[I-1] <= G[I] THEN 9023
9019  W3=G[I-1]
9020  G[I-1]=G[I]
9021  G[I]=W3
9022  W3=1
9023  NEXT I
9024  IF W3 THEN 9016
9025  IF 2*INT(W9/2)#W9 THEN 9028
9026  W6=(G[W9/2]+G[W9/2+1])/2
9027  GOTO 9030
9028  W6=G[INT(W9/2+1)]
9029  REM  --  BUILD SCALED DATA COLUMNS
9030  RESTORE 9901
9031  MAT G=ZER
9032  FOR W3=1 TO W9
9033  READ W2
9034  LET W2=INT(((W2-W1)/W0)+.0001)+1
9035  LET G[W2]=G[W2]+1
9036  NEXT W3
9037  REM  --  CHECK FOR UPPER LIMIT
9038  FOR W3=1 TO N
9039  IF G[W3]=0 THEN 9041
9040  LET W4=W3
9041  NEXT W3
9042  REM  --  FIND MAXIMUM OF SCALED COLUMN OF DATA
9043  W7=0
9044  FOR W3=1 TO W4
9045  IF G[W3] <= W7 THEN 9047
9046  W7=G[W3]
9047  NEXT W3
9048  REM  --  OUTPUT  
9049  PRINT '10
9050  GOSUB 9090
9051  PRINT '13;
9052  PRINT TAB(23);'10'10"***  HISTOGRAM  ***"'10'10
9053  GOSUB 9090
9054  PRINT '10TAB(5);W9"DATA POINTS TOTAL"TAB(37)"CELL SIZE="W0
9055  PRINT TAB(6)'10"MEAN="W5;TAB(37)"MEDIAN="W6
9056  PRINT '10;TAB(6);"STANDARD DEVIATION="D
9057  PRINT TAB(6)'10"MAXIMUM FREQUENCY="W7
9058  PRINT TAB(6)'10"MAXIMUM FREQUENCIES AT:";
9059  FOR W3=1 TO W4
9060  IF G[W3]#W7 THEN 9064
9061  PRINT W1+(W3-1)*W0;
9062  IF W0=1 THEN 9064
9063  PRINT "+",
9064  NEXT W3
9065  PRINT '10
9066  GOSUB 9090
9067  PRINT '13'10'10;TAB(30);"% OF MAXIMUM"
9068  PRINT TAB(10);"0";TAB(19);"20";TAB(29);"40";TAB(39)"60";
9069  PRINT TAB(49);"80";TAB(59);"100"
9070  FOR W3=1 TO 6
9071  PRINT TAB(W3*10);"!";
9072  NEXT W3
9073  PRINT '13'10;TAB(10);
9074  FOR W3=1 TO 5
9075  PRINT "+---------";
9076  NEXT W3
9077  PRINT "+"
9078  FOR W3=1 TO W4+1
9079  IF (W3-1)/5#INT((W3-1)/5) THEN 9083
9080  PRINT W1+(W3-1)*W0;
9081  IF W0=1 THEN 9083
9082  PRINT "+";
9083  PRINT '13;TAB(9);"-!";
9084  FOR W6=1 TO G[W3]*50/W7
9085  PRINT "*";
9086  NEXT W6
9087  PRINT '13
9088  NEXT W3
9089  GOTO 9094
9090  FOR I=1 TO 72
9091  PRINT "-";
9092  NEXT I
9093  RETURN 
9094  PRINT '10;'10;"DO YOU WISH TO TEST FOR NORMALITY IN THIS DATA SET?"
9095  PRINT "YES=1,NO=0"
9096  INPUT Q
9097  IF Q <= .5 THEN 9999
9098  DEF FNF()=.39894*(EXP(-.5*^2))
9099  A=-6
9100  E=.0001
9101  PRINT TAB(15);"THEORETICAL","OBSERVED"
9102  PRINT "MID-POINT","FREQUENCY","FREQUENCY";'10
9103  FOR I=1 TO W4-1
9104  B=((W1+I*W0)-W5)/D
9105  LET H=B-A
9106  LET T=(FNF(A)+FNF(B))*H
9107  LET M=0
9108  LET T=(T+M)/2
9109  LET M=0
9110  FOR X=A+H/2 TO B STEP H
9111  LET M=M+FNF(X)
9112  NEXT X
9113  LET M=M*H
9114  LET S=(T+2*M)/3
9115  LET H=H/2
9116  IF ABS(T-M)/ABS(S)>E THEN 9108
9117  F[I]=S*W9
9118  PRINT W1+(I-.5)*W0,F[I],G[I]
9119  C=C+((G[I]-F[I])^2)/F[I]
9120  A=B
9121  Z=Z+F[I]
9122  NEXT I
9123  F[W4]=W9-Z
9124  C=C+((G[W4]-F[W4])^2)/F[W4]
9125  PRINT W1+(W4-.5)*W0,F[W4],G[W4]
9126  PRINT '10"CALCULATED VALUE OF CHI SQUARE IS";C;"WITH";W4-3;"D.F."
9127  STOP 
9999  END 
