10 X$=SYS(CHR$(7)):R$=LEFT(X$,7):L$=RIGHT(X$,8) 20 REM ************************************************************* 30 REM 40 REM FITTING NORMAL OGIVE FUNCTION 50 REM 60 REM***************************************************************** 70 DIM #1,A1(111),A2(111),A3(111) 80 OPEN R$ AS FILE 1 120 A1(0)=27 130 A3(0)=0:A3(1)=0:A3(2)=0:A3(3)=0:A3(4)=0:A3(5)=0 140 X=0 150 PRINT L$ 160 PRINT " FITTING A NORMAL OGIVE UTILITY FUNCTION" 170 PRINT 180 PRINT "THIS MODULE WILL HELP YOU IN FINDING A NORMAL OGIVE FUNCTION" 190 PRINT "TO REPRESENT YOUR UTILITIES. YOU ARE ASKED TO SPECIFY THE" 200 PRINT "POINTS TO BE ASSIGNED UTILITIES .50 AND .75 AND THE LARGEST" 210 PRINT "AND SMALLEST POINTS TO BE ASSIGNED UTILITIES." 220 PRINT 230 PRINT "ONCE YOU HAVE PROVIDED THIS INFORMATION THE MODULE WILL COMPUTE" 240 PRINT "AND PRINT THE UTILITIES FOR THE ENDPOINTS AND 7 INTERMEDIATE" 250 PRINT "AND EQUALLY SPACED POINTS ON THIS INTERVAL. THERE WILL BE TWO" 260 PRINT "SETS OF UTILITIES - NORMAL OGIVE AND CORRECTED NORMAL. NORMAL" 270 PRINT "OGIVE UTILITIES WILL BE THOSE IMPLIED BY THE NORMAL OGIVE YOU" 280 PRINT "SPECIFIED. THE CORRECTED NORMAL UTILITIES WILL BE OBTAINED BY" 290 PRINT "LINEARLY TRANSFORMING THE NORMAL OGIVE UTILITIES SO THAT THE" 300 PRINT "SMALLEST POINT HAS UTILITY 0 AND THE LARGEST UTILITY 1." 310 PRINT 320 PRINT 330 PRINT "INPUT THE POINT TO BE ASSIGNED UTILITY 0."; 340 GOSUB 9000 350 S1=O1 360 PRINT "INPUT THE POINT TO BE ASSIGNED UTILITY 1."; 370 GOSUB 9000 380 IF S1M0 THEN 540 520 PRINT "REENTER. MUST BE GREATER THAN THE MEDIAN." 530 GOTO 480 540 S0=(O1-M0)/.6754 550 Y3=(S1-M0)/S0 560 GOSUB 8000 570 F1=P 580 Y3=(L1-M0)/S0 590 GOSUB 8000 600 F0=P-F1 610 PRINT L$ 620 PRINT " UTILITIES" 630 PRINT " POINT NORMAL OGIVE CORRECTED NORMAL" 640 FOR I=S1 TO L1 STEP (L1-S1)/8 650 Y3=(I-M0)/S0 660 GOSUB 8000 680A$="#######.## #.### #.###" 681 PRINT USING A$,I,P,(P-F1)/F0 690 NEXT I 700 GOSUB 730 710 GOTO 840 720 PRINT L$ 730 PRINT 750A$="NORMAL OGIVE MEAN = #######.## ST.DEV.=#######.##" 751 PRINT USING A$,M0,S0 760 RETURN 770 PRINT L$ 780 PRINT "HERE ARE THE PERCENTILES OF THE PREVIOUS NORMAL OGIVE." 790 PRINT 810A$=" 25TH=########.## 50TH=########.## 75TH=########.##" 811 PRINT USING A$,M0-.6754*S0,M0,M0+.6754*S0 820 PRINT 830 RETURN 840 PRINT 850 PRINT "IF YOU WANT THE UTILITY FOR SOME OTHER POINT TYPE THE POINT." 860 PRINT "IF YOU DO NOT TYPE '-7777'." 870 GOSUB 9000 880 IF O1=-7777 THEN 960 890 Y3=(O1-M0)/S0 900 GOSUB 8000 910A$="#######.## #.### #.###" 911 PRINT USING A$,O1,P,(P-F1)/F0 920 PRINT 930 PRINT "NEXT POINT OR '-7777'."; 940 GOSUB 9000 950 GOTO 880 960 PRINT 970 PRINT "TYPE THE NUMBER OF THE OPTION YOU WANT." 980 PRINT " 1. ACCEPT THIS NORMAL OGIVE FIT." 990 PRINT " 2. TRY A DIFFERENT NORMAL OGIVE AND CHANGE THE ENDPOINTS." 1000 PRINT " 3. TRY A DIFFERENT NORMAL OGIVE WITH THE SAME ENDPOINTS." 1010 PRINT " 4. EXIT MODULE" 1020 GOSUB 9000 1030 IF O1=2 THEN 1090 1040 IF O1=3 THEN 1150 1050 IF O1=4 THEN 1170 1060 IF O1 <> 1 THEN 1130 1070 REM 1080 GOTO 1170 1090 GOSUB 770 1100 GOTO 310 1110 CLOSE 1: CHAIN "RSTRT" 1120 IF O1=1 THEN 1170 1130 PRINT "REENTER. INPUT MUST BE NUMBER OF OPTION ." 1140 GOTO 1020 1150 GOSUB 770 1160 GOTO 420 1170 PRINT 1180 PRINT "IF YOU WANT TO FIND THE EXPECTED UTILITY WITH RESPECT TO" 1190 PRINT "SOME NORMAL DISTRIBUTION TYPE '1'." 1200 PRINT "IF YOU DO NOT TYPE '0'." 1210 GOSUB 9000 1220 IF O1=0 THEN 1070 1230 IF O1=1 THEN 1260 1240 PRINT "REENTER. INPUT MUST BE 0 OR 1." 1250 GOTO 1210 1260 A3(0)=M0:A3(1)=S0 1270 CLOSE 1: CHAIN "CMODS" 8000 REM ********************************************************** 8001 REM ROUTINE CALCULATES THE CDF FOR NORMAL DISTRIBUTION 8002 REM INPUT Y3 8003 REM OUTPUT P 8004 REM 8005 Y4=ABS(Y3) 8010 X1=X 8015 X=Y3 8020 T=1/(1+.231642*Y4) 8025 D=.398942*EXP(-X*X/2) 8030 C1=1.33027 8035 C2=1.82126 8040 C3=1.78148 8045 C4=.356564 8050 C5=.319382 8055 P=1-D*T*((((C1*T-C2)*T+C3)*T-C4)*T+C5) 8060 IF X >= 0 THEN 8070 8065 P=1-P 8070 X=X1 8075 RETURN 8076 REM 8077 REM END OF NORMAL CDF ROUTINE 8078 REM ********************************************************** 9000 REM--SUBROUTINE THAT DETERMINES IF RESTART HAS BEEN REQUESTED. 9005 INPUT O1 9015 IF O1=-9999 THEN 9025 9020 RETURN 9025 CLOSE 1: CHAIN "RSTRT" 9035 REM*************END ROUTINE 9999 END