1 REM **** HP BASIC PROGRAM LIBRARY ****************************** 2 REM 3 REM GRGPLT: SIMPLE REGRESSION AND PLOT 4 REM 5 REM 36542 REV A 6 REM 7 REM **** CONTRIBUTED PROGRAM *********************************** 9 REM ******************************************************** 10 REM * STANFORD GRADUATE SCHOOL OF BUSINESS * 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.F. SHARPE (MARCH, 1971) * 16 REM ******************************************************** 50 DIM X[500],Y[500],X$[25],Y$[25],A$[20],D$[15] 51 D$="---------------" 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-AXIS 108 REM -- Y1,Y2 ARE LOWER,UPPER BOUNDS FOR Y-AXIS 110 REM -- X9 = NUMBER OF INTERVALS ON X-AXIS 112 REM -- Y9 = NUMBER OF 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 ---------------------------------------------------- 1000 REM -- SEE IF DATA ALREADY ENTERED 1010 PRINT "DATA FROM TERMINAL OR DATA STATEMENTS"; 1011 INPUT A$ 1015 IF A$[1,1]="T" THEN 3000 1020 PRINT "HAVE YOU ENTERED THE DATA STATEMENTS ALREADY"; 1021 INPUT A$ 1030 IF A$[1,1]="Y" THEN 1150 1040 PRINT "ENTER DATA STATEMENTS BETWEEN LINES 2000 AND 2999" 1041 PRINT "FIRST, THE NUMBER OF OBSERVATIONS" 1042 PRINT "THEN THE OBSERVATIONS, ONE AT A TIME, WITH" 1043 PRINT "THE Y-VARIABLE FOLLOWED BY THE X-VARIABLE." 1044 PRINT "WHEN YOU HAVE ENTERED THE DATA STATEMENTS," 1045 PRINT "RUN THE PROGRAM AGAIN." 1046 STOP 1150 REM ------------------------------------- 1151 REM -- READ DATA FROM DATA STATEMENTS 1155 READ N 1160 FOR I=1 TO N 1161 READ Y[I],X[I] 1162 NEXT I 1170 GOTO 4000 3000 PRINT 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 USING 3032;I 3032 IMAGE #,"PAIR",3D 3033 INPUT Y[I],X[I] 3040 NEXT I 3050 PRINT 3999 REM ------------------------------- 4000 REM -- SUBROUTINE TO DO SIMPLE REGRESSION WITH PLOT 4010 REM -- INPUTS ARE N X(I),Y(I) VALUES 4050 PRINT 4052 PRINT "NAME OF Y-VARIABLE"; 4053 INPUT Y$ 4054 Y$=Y$[1,15] 4055 PRINT "NAME OF X-VARIABLE"; 4056 INPUT X$ 4057 X$=X$[1,15] 4062 PRINT "DO YOU WANT A LIST OF THE DATA"; 4063 INPUT A$ 4064 IF A$[1,1]="N" THEN 4100 4072 PRINT 4073 PRINT Y$,X$ 4074 PRINT D$[1,LEN(Y$)],D$[1,LEN(X$)] 4075 FOR I=1 TO N 4076 PRINT Y[I],X[I] 4077 NEXT I 4078 PRINT 4100 REM -- FIND MIN X (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 USING 4741;Y$,A9,S$,B9,X$ 4741 IMAGE 5X,15A," = ",6D.5D,X,A,6D.5D,"*",15A 4744 PRINT 4745 GOSUB 6500 4750 IF A5>0 THEN 4760 4752 STOP 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 5009 DIM C$[10] 5010 C$="*23456789" 5020 DIM L$[72] 5100 REM -- RESET ALL VALUES TO INTERVALS 5102 A6=A9+(B9*X1) 5103 Z1=INT((X9*(0-X1)/(X2-X1))+1.001) 5104 Z2=INT((Y9*(0-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$[1,1]="M" 5374 GOTO 5390 5375 L$[1,1]="L" 5376 GOTO 5390 5380 L$[1,1]=" " 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 -- GO TO 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$=C$[C9,C9] 5622 L9=C1 5630 L$[C1+1,C1+1]=P$ 5650 NEXT C1 5660 L$=L$[1,L9+1] 5665 PRINT L$ 5710 NEXT Y3 5720 REM -- PRINT HORIZONTAL AXIS 5730 PRINT 5740 L$[1,1]=" " 5750 FOR I=1 TO X9 5751 IF I=A8 THEN 5756 5752 IF I <> A1 THEN 5760 5753 L$[I+1,I+1]="M" 5754 GOTO 5770 5756 L$[I+1,I+1]="L" 5757 GOTO 5770 5760 L$[I+1,I+1]=" " 5770 NEXT I 5785 PRINT L$;X$ 5790 FOR I=1 TO 5 5795 PRINT 5796 NEXT I 6000 STOP 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 USING 6650;U4,U3 6650 IMAGE "STANDARD ERRORS:",7X,6D.5D,2X,6D.5D 6652 PRINT USING 6653;A9/U4,B9/U3 6653 IMAGE "T-VALUES:",14X,6D.5D,2X,6D.5D 6660 PRINT 6670 PRINT "R-SQUARED -- UNADJUSTED: ";R2;" ADJUSTED: ";U2 6680 PRINT 6690 RETURN 9999 END