3 REM GRGPLT: SIMPLE REGRESSION AND PLOT 7 REM **** CONTRIBUTED PROGRAM **************************************** 9 REM TRANSLATED FOR BASIC-PLUS BY DSAA 11 REM * PROGRAM NAME: GRGPLT $ * 12 REM * PERFORMS A SIMPLE REGRESSION AND PROVIDES A $ * 13 REM * PLOT OF THE DATA POINTS. ! ! * 14 REM * 15 REM * PROGRAMMED BY W.V. SHARPE ((MARCH, 1971 ! * 16 REM ********************************************************** 50 OPEN 'DATA.DAT' FOR OUTPUT AS FILE 1%:DIM #1%,X(500),Y(500) 51 D$='---------------' 52 X(500)=0:MAT X=ZER:Y(500)=0:MAT Y=ZER 100 REM -- N = NUMBER OF OBSERVATIONS 102 REM -- X = THE INDEPENDENT VARIABLE 104 REM -- Y = THE DEPENDENT VARIABLE 106 REM -- X1,X2 ARE LOWER-UPPER BOUNDS FOR X-AYIS 108 REM -- Y1,Y2 ARE LOWER-UPPER BOUNDS FOR Y-AXIS 110 REM -- X9 = NUMBER OF INTERVALS ON(X-QXIS 112 REM -- Y9 = NUMBER0OF INTERVALS ON Y-AXIS 114 REM -- X$,Y$ ARE NAMES OF THE VARIABLES 116 REM -- A1,A2,A9 ARE AVERAGE X,AVERAGE Y, AND INTERCEPT 120 REM ------------------------------------------ 3000PRINT 3010 PRINT'HOW MANY POINTS DO YOU HAVE'; 3011 INPUT N 3020 PRINT'FOR EACH POINT,"TYPE TWO VAlUES' 3021 PRINT' THE Y-VARIABLE FIRST, THEN THE X-VARIABLE' 3022 PRINT " SEPARATE THEM WITH A COMMA" 3023 PRINT'FOR EXAMPLE --' 3024 PRINT' PAIR 1? 34,56.7' 3025 PRINT 3030 FOR I=1 TO N 3031 PRINT 'PAIR';:PRINT USING'###',I; 3033 INPUT Y(I),X(I) 3040 NEXT I 3050 PRINT 3999 REM ---------------------------------- 4000 REM -- SUBROUTINE TO DO SIMPLE REGRESSIOO PLOT 4010 REM -- INPUTS ARE!N X(I),Y(I) VALUES 4050 PRINT 4052 PRINT'NAME OF Y=VARIABLE'; 4053 INPUT Y$ 4054 Y$=LEFT(Y$,15) 4055 PRINT'NAME OF X-VARIABLE'; 4056 INPUT X$ 4057 X$=LEFT(X$,15) 4062 PRINT'DO YOU WANT A LIST OF THE DATA'; 4063 INPUT A$ 4064 IF MID(A$,1,1)='N' THEN 4100 4072 PRINT 4073 PRINT Y$,X$ 4074 PRINT MID(D$,1,LEN(Y$)),MID(D$,1,LEN(X$)) 4075 FOR I=1 TO N 4076 PRINT Y(I),X(I) 4077 NEXT I 4078 PRINT 4100 REM -- FIND MI0X (M1) AND MAX X(M2) 4102 M1=X(1) 4103 M2=X(1) 4104 FOR I=2 TO N 4105 IF X(I)>M1 THEN 4107 4106 M1=X(I) 4107 IF X(I)M3 THEN 4126 4125 M3=Y(I) 4126 IF Y(I) M1 THEN 4553 4552 X1=M3 4553 Y1=X1 4554 X2=M2 4555 IF M4=0 THEN 4740 4739 S$=' ' 4740 PRINT ' ';:PRINT USING '\ \',Y$; 4741 PRINT' = ';:PRINT USING '######.#####',A9;:PRINT USING'!', S$;:PRINT USING '######.#####',B9;:PRINT '*';: PRINT USING '\ \',X$ 4744 PRINT 4745 GOSUB 6500 4750 IF A5>0 THEN 4760 4752 GOTO 9999 4760 PRINT 4800 PRINT 4805 IF A6=1 THEN 4900 4810 PRINT'Y-AXIS RUNS FROM ';Y1;' TO ';Y2 4820 PRINT'X-AXIS RUNS FROM ';X1;' TO ';X2 4830 PRINT 4840 GOTO 4990 4900 PRINT'Y-AXIS -- BOTTOM'; 4901 INPUT Y1 4902 PRINT' TOP'; 4903 INPUT Y2 4910 PRINT'X-AXIS -- LEFT'; 4911 INPUT X1 4912 PRINT' RIGHT'; 4913 INPUT X2 4990 FOR I=1 TO 3 4991 PRINT 4992 NEXT I 5000 REM -- NAME: REGPL2 5001 REM -- CHAINS FROM: REGPLT 5010 C$='*23456789' 5100 REM -- RESET ALL VALUES TO INTERVALS 5102 A6=A9+(B9*X1) 5103 Z1=INT((X9*(O-X1)/(X2-X1))+1.001) 5104 Z2=INT((Y9*(O-Y1)/(Y2-Y1))+1.001) 5105 A2=INT((Y9*(A2-Y1)/(Y2-Y1))+1.001) 5106 A1=INT((X9*(A1-X1)/(X2-X1))+1.001) 5107 A6=INT((Y9*(A6-Y1)/(Y2-Y1))+1.001) 5108 A8=(Y1-A9)/B9 5109 A8=INT((X9*(A8-X1)/(X2-X1))+1.001) 5110 FOR I=1 TO N 5120 Y(I)=INT((Y9*(Y(I)-Y1)/(Y2-Y1))+1.001) 5121 IF Y(I)<=Y9 THEN 5130 5122 Y(I)=Y9 5130 X(I)=INT((X9*(X(I)-X1)/(X2-X1))+1.001) 5131 IF X(I)<=X9 THEN 5140 5132 X(I)=X9 5140 NEXT I 5150 REM -- SORT ROWS 5160 N9=N 5170 N9=N9-1 5180 N8=0 5190 FOR I=1 TO N9 5200 IF Y(I)>Y(I+1) THEN 5320 5210 IF Y(I)A2 THEN 5380 5373 L$='M'+RIGHT (L$,2) 5374 GOTO 5390 5375 L$='L'+RIGHT(L$,2) 5376 GOTO 5390 5380 L$=' '+RIGHT(L$,2) 5390 REM -- PROCEED 5400 FOR C1=1 TO X9 5410 REM -- SET UP AXIS SYMBOL OR SPACE 5412 IF Y3=Z2 THEN 5426 5416 IF C1=Z1 THEN 5422 5418 P$=' ' 5420 GOTO 5500 5422 P$='!' 5423 L9=C1 5424 GOTO 5500 5426 IF C1=Z1 THEN 5432 5428 P$='-' 5429 L9=C1 5430 GOTO 5500 5432 P$='+' 5433 L9=C1 5500 REM -- FIND ENTRIES 5510 C9=0 5511 IF R1>N THEN 5600 5512 IF Y(R1)>Y3 THEN 5524 5513 IF Y(R1)C1 THEN 5600 5520 REM -- ROW CONTAINS AN ITEM 5522 C9=C9+1 5524 REM-- GOTO NEXT ROW 5525 R1=R1+1 5526 GOTO 5511 5600 REM -- PRINT CHARACTER 5610 IF C9=0 THEN 5630 5612 IF C9<=9 THEN 5620 5614 C9=9 5620 P$=MID(C$,C9,1) 5622 L9=C1 5630 L$=LEFT(L$,C1)+P$+RIGHT(L$,C1+2) 5650 NEXT C1 5660 L$=LEFT(L$,L9+1) 5665 PRINT L$ 5710 NEXT Y3 5720 REM -- PRINT HORIZONTAL AXIS 5730 PRINT 5740 L$=' '+RIGHT(L$,2) 5750 FOR I=1 TO X9 5751 IF I=A8 THEN 5756 5752 IF I<>A1 THEN 5760 5753 L$=LEFT(L$,I)+'M'+RIGHT(L$,I+2) 5754 GOTO 5770 5756 L$=LEFT(L$,I)+'L'+RIGHT(L$,I+2) 5757 GOTO 5770 5758 L$=LEFT(L$,I)+' '+RIGHT(L$,I+2) 5760 L$=LEFT(L$,I)+' '+RIGHT(L$,I+2) 5770 NEXT I 5785 PRINT L$;X$ 5790 FOR I=1 TO 5 5795 PRINT 5796 NEXT I 6000 GOTO 9999 6500 REM -- SUBROUTINE TO COMPUTE ADJ. R2 AND STD ERRORS 6510 IF N<3 THEN 6690 6520 T6=T4-T1*T1/N 6530 T7=(T3-T1*T2/N)/T6 6540 T8=(T2-T7*T1)/N 6550 T9=T5-T2*T2/N 6560 U1=T9-T7*T7*T6 6570 T9=T9/(N-1) 6580 U1=U1/(N-2) 6590 U2=(T9-U1)/T9 6600 U3=U1/T6 6610 U3=SQR(U3) 6620 U4=U1*T4/(T6*N) 6630 U4=SQR(U4) 6640 PRINT'STANDARD ERRORS ';:PRINT USING'######.#####', U4;:PRINTUSING ' ######.#####',U3 6652 PRINT'T-VALUES: ';:PRINT USING'######.#####',A9/U4; :PRINTUSING ' ######.#####',B9/U3 6660 PRINT 6670 PRINT'R-SQUARED -- UNADJUSTED: ';R2;' ADJUSTED: ';U2 6680 PRINT 6690 RETURN 9999 CLOSE 1%:KILL'DATA.DAT':END