|
![]() |
//* 00000010 // EXEC FORT1CLG,REGION=512K 00000020 //* 00000030 /*JOBPARM COPIES=6 00000040 C 00000050 C PROGRAM FLS: 00000060 C EQUATION NUMBERS IN COMMENT STATEMENTS REFER TO 00000070 C ''TIME VARYING LINEAR REGRESSION VIA FLEXIBLE LEAST SQUARES'' 00000080 C BY R. KALABA AND L. TESFATSION, COMPUTERS AND MATHEMATICS 00000090 C WITH APPLICATIONS 17, (1990), PAGES 1215-1245. 00000100 C LAST UPDATED: 14 JUNE 1994 00000110 C 00000120 C MAIN PROGRAM 00000130 C 00000140 IMPLICIT REAL*8(A-H,O-Z) 00000150 REAL*8M 00000160 C THIS PROGRAM IS CURRENTLY DIMENSIONED FOR A MAXIMUM OF 00000170 C 110 OBSERVATIONS, WITH REGRESSOR VECTORS OF A MAXIMUM 00000180 C DIMENSION 10. 00000190 DIMENSION X(10,110),Y(110),R(10,10) 00000200 DIMENSION XN(10),Z(10,10),M(10,10,110),V(10) 00000210 DIMENSION U(10),E(10,110),W(10),Q(10,10),A(10,10) 00000220 DIMENSION C(10,10),D(10),B(10,110),DIFVEC(10) 00000230 DIMENSION VVV(10),ZZ(10,10),ZZINV(10,10),BOLSE(10) 00000240 DIMENSION BOLS(10),XY(10),XXT(10,10),XXTINV(10,10) 00000250 DIMENSION XTBOLS(110),OLSR(110) 00000260 DIMENSION TRUEB(10,110) 00000270 C THE FOLLOWING SUBROUTINE INITIALIZES THE PENALTY WEIGHT 00000280 C AMU, THE DIMENSION K OF THE REGRESSOR VECTORS, AND 00000290 C THE NUMBER OF OBSERVATIONS NCAP. IT ALSO GENERATES 00000300 C THE K BY NCAP MATRIX X OF REGRESSOR VALUES AND THE 00000310 C NCAP BY 1 VECTOR Y OF SCALAR OBSERVATIONS. 00000320 CALL INPUT(AMU,K,NCAP,X,Y,TRUEB) 00000330 C INITIALIZATION FOR THE AUXILIARY MATRIX RN = QN-1 + AMU*I 00000340 C AT TIME N = 1 00000350 DO 30 I=1,K 00000360 DO 40 J=1,K 00000370 R(I,J) = 0.0D+00 00000380 IF(I.EQ.J) R(I,J) = AMU 00000390 40 CONTINUE 00000400 30 CONTINUE 00000410 DO 50 N=1,NCAP 00000420 C FORM THE REGRESSOR VECTOR XN AND THE SCALAR 00000430 C OBSERVATION YN 00000440 DO 60 I=1,K 00000450 XN(I)=X(I,N) 00000460 60 CONTINUE 00000470 YN=Y(N) 00000480 C CALCULATE THE INVERSE Z OF THE MATRIX RN+XNXNT VIA 00000490 C THE WOODBURY MATRIX INVERSION LEMMA 00000500 CALL WOOD(K,R,XN,Z) 00000510 C CALCULATE & STORE THE K BY K MATRICES MN AND THE K BY 1 00000520 C VECTORS EN APPEARING IN EQUATIONS (5.7B) AND (5.7C) 00000530 DO 70 I=1,K 00000540 DO 80 J=1,K 00000550 M(I,J,N)=AMU*Z(I,J) 00000560 80 CONTINUE 00000570 70 CONTINUE 00000580 DO 90 I=1,K 00000590 V(I)=XN(I)*YN 00000600 90 CONTINUE 00000610 DO 100 I=1,K 00000620 IF(N.EQ.1) U(I)=0.0D+00 00000630 IF(N.GT.1) U(I)=AMU*E(I,N-1) 00000640 100 CONTINUE 00000650 DO 110 I=1,K 00000660 W(I)=U(I)+V(I) 00000670 110 CONTINUE 00000680 DO 120 I=1,K 00000690 E(I,N)=0.0D+00 00000700 DO 130 J=1,K 00000710 E(I,N)=E(I,N)+Z(I,J)*W(J) 00000720 130 CONTINUE 00000730 120 CONTINUE 00000740 DO 140 I=1,K 00000750 DO 150 J=1,K 00000760 R(I,J)=-AMU*AMU*Z(I,J) 00000770 IF(I.EQ.J)R(I,J)=(2.0D+00)*AMU+R(I,J) 00000780 150 CONTINUE 00000790 140 CONTINUE 00000800 50 CONTINUE 00000810 C CALCULATE THE (5.15) FLS ESTIMATE BN FOR THE 00000820 C FINAL TIME N = NCAP 00000830 DO 160 I=1,K 00000840 DO 170 J=1,K 00000850 Q(I,J)=-AMU*M(I,J,NCAP-1) 00000860 IF(I.EQ.J) Q(I,J)=Q(I,J)+AMU 00000870 170 CONTINUE 00000880 160 CONTINUE 00000890 C OBTAIN THE INVERSE C OF THE MATRIX A=(QN-1 + XNXNT) 00000900 C IN EQUATION (5.15) 00000910 DO 180 I=1,K 00000920 DO 190 J=1,K 00000930 A(I,J)=Q(I,J)+X(I,NCAP)*X(J,NCAP) 00000940 190 CONTINUE 00000950 180 CONTINUE 00000960 CALL INV(K,A,C) 00000970 C FORM THE VECTOR D=(PN-1 + XNYN) IN EQUATION (5.15) 00000980 DO 200 I=1,K 00000990 D(I)=AMU*E(I,NCAP-1)+X(I,NCAP)*Y(NCAP) 00001000 200 CONTINUE 00001010 C POSTMULTIPLY C BY D TO OBTAIN BNCAP 00001020 DO 210 I=1,K 00001030 B(I,NCAP)=0.0D+00 00001040 DO 220 J=1,K 00001050 B(I,NCAP)=B(I,NCAP)+C(I,J)*D(J) 00001060 220 CONTINUE 00001070 210 CONTINUE 00001080 C USE EQUATIONS (5.16) TO OBTAIN SMOOTHED FLS ESTIMATES 00001090 C FOR B1,...,BNCAP-1 00001100 NCAP1=NCAP-1 00001110 DO 230 N=1,NCAP1 00001120 L=NCAP-N 00001130 DO 240 I=1,K 00001140 B(I,L)=E(I,L) 00001150 DO 250 J=1,K 00001160 B(I,L)=B(I,L)+M(I,J,L)*B(J,L+1) 00001170 250 CONTINUE 00001180 240 CONTINUE 00001190 230 CONTINUE 00001200 WRITE(6,2020) 00001210 2020 FORMAT(1X,'HERE ARE THE FLS ESTIMATES FOR B1 AND THE 00001220 & TRUE B1') 00001230 WRITE(6,37)(B(1,N),TRUEB(1,N),N=1,NCAP) 00001240 WRITE(6,2030) 00001250 2030 FORMAT(1X,'HERE ARE THE FLS ESTIMATES FOR B2 AND THE 00001260 & TRUE B2') 00001270 WRITE(6,37)(B(2,N),TRUEB(2,N),N=1,NCAP) 00001280 37 FORMAT(1X,2D25.10) 00001290 C CALCULATING RSUBM FROM EQUATION (3.1) 00001300 SUM =0.0D+00 00001310 DO 500 N=1,NCAP 00001320 SUM1=0.0D+00 00001330 DO 510 J=1,K 00001340 SUM1=SUM1+X(J,N)*B(J,N) 00001350 510 CONTINUE 00001360 DIF=Y(N)-SUM1 00001370 DIFSQ=DIF*DIF 00001380 SUM=SUM+DIFSQ 00001390 500 CONTINUE 00001400 RSUBM=SUM 00001410 C CALCULATING RSUBD FROM EQUATION (3.2) 00001420 SUM=0.0D+00 00001430 DO 520 N=1,NCAP1 00001440 DO 530 J=1,K 00001450 DIFVEC(J)=B(J,N+1)-B(J,N) 00001460 530 CONTINUE 00001470 SUM1=0.0D+00 00001480 DO 540 J=1,K 00001490 SUM1=SUM1+DIFVEC(J)*DIFVEC(J) 00001500 540 CONTINUE 00001510 SUM=SUM+SUM1 00001520 520 CONTINUE 00001530 RSUBD=SUM 00001540 C CALCULATING THE INCOMPATIBILITY COST AMU*RSUBD + RSUBM 00001550 COST=AMU*RSUBD+RSUBM 00001560 WRITE(6,580) RSUBM,RSUBD,COST 00001570 580 FORMAT(1H0,'HERE ARE RSUBM,RSUBD,COST'/1X,3D20.10) 00001580 C FIRST VALIDATION CHECK: 00001590 C CALCULATION OF THE ESTIMATE BOLSE FOR OLS FROM THE MATRIX 00001600 C AVERAGE OF THE FLS ESTIMATES GIVEN BY EQUATION (6.2) 00001610 DO 810 I=1,K 00001620 VVV(I)=0.0D+00 00001630 DO 820 N=1,NCAP 00001640 SUM1=0.0D+00 00001650 DO 830 J=1,K 00001660 830 SUM1=SUM1+X(J,N)*B(J,N) 00001670 820 VVV(I)=VVV(I)+X(I,N)*SUM1 00001680 810 CONTINUE 00001690 DO 840 J=1,K 00001700 DO 850 I=1,K 00001710 850 ZZ(I,J)=0.0D+00 00001720 840 CONTINUE 00001730 DO 860 N=1,NCAP 00001740 DO 870 I=1,K 00001750 DO 880 J=1,K 00001760 880 ZZ(I,J)=X(I,N)*X(J,N)+ZZ(I,J) 00001770 870 CONTINUE 00001780 860 CONTINUE 00001790 CALL INV(K,ZZ,ZZINV) 00001800 DO 890 I=1,K 00001810 BOLSE(I)=0.0D+00 00001820 DO 900 J=1,K 00001830 900 BOLSE(I)=BOLSE(I)+ZZINV(I,J)*VVV(J) 00001840 890 CONTINUE 00001850 WRITE(6,910) 00001860 910 FORMAT(1H0,'COMPONENTS OF BOLSE') 00001870 WRITE(6,920) (BOLSE(I),I=1,K) 00001880 920 FORMAT(1X,D35.10) 00001890 C CALCULATING THE OLS ESTIMATE BOLS FROM THE USUAL 00001900 C FORMULA BOLS=(XXT)-1*XY 00001910 DO 1600 I=1,K 00001920 SUM=0.0D+00 00001930 DO 1610 N=1,NCAP 00001940 1610 SUM=SUM+X(I,N)*Y(N) 00001950 1600 XY(I)=SUM 00001960 DO 1620 I=1,K 00001970 DO 1630 J=1,K 00001980 XXT(I,J)=0.0D+00 00001990 DO 1640 N=1,NCAP 00002000 1640 XXT(I,J)=XXT(I,J)+X(I,N)*X(J,N) 00002010 1630 CONTINUE 00002020 1620 CONTINUE 00002030 CALL INV(K,XXT,XXTINV) 00002040 DO 1650 I=1,K 00002050 BOLS(I)=0.0D+00 00002060 DO 1660 J=1,K 00002070 1660 BOLS(I)=BOLS(I)+XXTINV(I,J)*XY(J) 00002080 1650 CONTINUE 00002090 WRITE(6,1670) 00002100 1670 FORMAT(1H0,'COMPONENTS OF BOLS') 00002110 WRITE(6,1671) (BOLS(I),I=1,K) 00002120 1671 FORMAT(1X,D35.10) 00002130 C CALCULATING THE SUM OF SQUARED RESIDUAL MEASUREMENT 00002140 C ERRORS OLSRM FOR OLS 00002150 DO 1800 N=1,NCAP 00002160 XTBOLS(N)=0.0D+00 00002170 DO 1810 I=1,K 00002180 1810 XTBOLS(N)=XTBOLS(N)+X(I,N)*BOLS(I) 00002190 1800 CONTINUE 00002200 DO 1820 N=1,NCAP 00002210 1820 OLSR(N)=Y(N)-XTBOLS(N) 00002220 OLSRM=0.0D+00 00002230 DO 1830 N=1,NCAP 00002240 1830 OLSRM=OLSRM+OLSR(N)*OLSR(N) 00002250 WRITE(6,1840) 00002260 1840 FORMAT(1H0,'SUM OF SQUARED RESIDUAL MEASUREMENT ERRORS 00002270 & FOR OLS') 00002280 WRITE(6,1841) OLSRM 00002290 1841 FORMAT(1X,D27.10) 00002300 C SECOND VALIDATION CHECK: FIRST-ORDER CONDITION TEST 00002310 C HOW WELL DO THE FLS ESTS SATISFY THE FOC CONDITIONS (A.14) 00002320 CALL FOCTST(AMU,K,NCAP,X,Y,B) 00002330 STOP 00002340 END 00002350 C 00002360 SUBROUTINE WOOD(K,R,X,Z) 00002370 C CALCULATES THE INVERSE Z OF A MATRIX OF THE FORM R+XXT 00002380 C VIA THE WOODBURY MATRIX INVERSION LEMMA 00002390 IMPLICIT REAL*8(A-H,O-Z) 00002400 DIMENSION R(10,10),X(10),Z(10,10),S(10,10),V(10) 00002410 DIMENSION XNUM(10,10),U(10,10) 00002420 C CALCULATE THE INVERSE S OF THE K BY K MATRIX R 00002430 CALL INV(K,R,S) 00002440 C CALCULATE THE K BY 1 VECTOR V=SX=R-1*X 00002450 DO 10 I=1,K 00002460 V(I)=0.0D+00 00002470 DO 20 J=1,K 00002480 V(I)=V(I)+S(I,J)*X(J) 00002490 20 CONTINUE 00002500 10 CONTINUE 00002510 C CALCULATE XNUM=VVT=R-1*XXT*R-1 00002520 DO 30 I=1,K 00002530 DO 40 J=1,K 00002540 XNUM(I,J)=V(I)*V(J) 00002550 40 CONTINUE 00002560 30 CONTINUE 00002570 C CALCULATE Y=(1+VTV)=(1+XT*R-1*X) 00002580 Y=1.0D+00 00002590 DO 50 I=1,K 00002600 Y=Y+X(I)*V(I) 00002610 50 CONTINUE 00002620 C CALCULATE U=XNUM/Y 00002630 DO 60 I=1,K 00002640 DO 70 J=1,K 00002650 U(I,J)=XNUM(I,J)/Y 00002660 70 CONTINUE 00002670 60 CONTINUE 00002680 C CALCULATE Z=S-U 00002690 DO 80 I=1,K 00002700 DO 90 J=1,K 00002710 Z(I,J)=S(I,J)-U(I,J) 00002720 90 CONTINUE 00002730 80 CONTINUE 00002740 RETURN 00002750 END 00002760 C 00002770 SUBROUTINE INV(K,A,C) 00002780 C CALCULATES THE INVERSE C OF A K BY K MATRIX A 00002790 IMPLICIT REAL*8(A-H,O-Z) 00002800 DIMENSION A(10,10),C(10,10),B(10,20) 00002810 DO 5 J=1,K 00002820 DO 6 I=1,K 00002830 6 B(I,J)=A(I,J) 00002840 5 CONTINUE 00002850 K2=K*2 00002860 DO 7 J=1,K 00002870 DO 8 I=1,K 00002880 B(I,K+J)=0.0D+00 00002890 IF(I.EQ.J) B(I,K+J)=1.0D+00 00002900 8 CONTINUE 00002910 7 CONTINUE 00002920 C THE PIVOT OPERATION STARTS HERE 00002930 DO 9 L=1,K 00002940 PIVOT=B(L,L) 00002950 DO 13 J=L,K2 00002960 13 B(L,J)=B(L,J)/PIVOT 00002970 C TO IMPROVE THE ROWS 00002980 DO 14 I=1,K 00002990 IF(I.EQ.L) GO TO 14 00003000 AIL=B(I,L) 00003010 DO 15 J=L,K2 00003020 15 B(I,J)=B(I,J)-AIL*B(L,J) 00003030 14 CONTINUE 00003040 9 CONTINUE 00003050 DO 45 I=1,K 00003060 DO 46 J=1,K 00003070 46 C(I,J)=B(I,K+J) 00003080 45 CONTINUE 00003090 RETURN 00003100 END 00003110 C 00003120 SUBROUTINE INPUT(AMU,K,NCAP,X,Y,TRUEB) 00003130 IMPLICIT REAL*8(A-H,O-Z) 00003140 DIMENSION X(10,110),Y(110),TRUEB(10,110) 00003150 C 00003160 C RUN FOR ELLIPTICAL TRUE B WITH NOISY OBSERVATIONS 00003170 C 00003180 K=2 00003190 AMU=1.0D+00 00003200 NCAP=30 00003210 SIGMA=0.00D+00 00003220 DO 3030 I=1,NCAP 00003230 AI=DFLOAT(I) 00003240 PI=(DATAN(1.0D+00))*4.0D+00 00003250 TRUEB(1,I)=.5D+00*DSIN((2.0D+00*PI/30.0D+00)*AI) 00003260 TRUEB(2,I)=DCOS((2.0D+00*PI/30.0D+00)*AI) 00003270 3030 CONTINUE 00003280 X(1,1)=1.0D+00 00003290 X(2,1)=1.0D+00 00003300 DO 3010 I=2,NCAP 00003310 AI=DFLOAT(I) 00003320 X(1,I)=DSIN(10.0D+00+(AI))+.01D+00 00003330 X(2,I)=DCOS(10.0D+00+(AI)) 00003340 3010 CONTINUE 00003350 4020 CONTINUE 00003360 DO 3020 I=1,NCAP 00003370 C THE DISCREPANCY TERM UU IN THE NEXT LINE IS SET TO ZERO; IT C CAN INSTEAD BE SET EQUAL TO A PSEUDO-RANDOM NUMBER TO TEST FLS C IN THE PRESENCE OF NOISE IN THE OBSERVATIONS. UU = 0.0D+00 00003380 Y(I)=X(1,I)*TRUEB(1,I)+X(2,I)*TRUEB(2,I)+UU 00003390 3020 CONTINUE 00003400 RETURN 00003410 END 00003420 C 00003430 SUBROUTINE FOCTST(AMU,K,NCAP,X,Y,B) 00003440 IMPLICIT REAL*8(A-H,O-Z) 00003450 DIMENSION X(10,110),Y(110),B(10,110),DIF(10) 00003460 WRITE(6,100) 00003470 100 FORMAT(1H0,'HERE ARE THE FOC TEST RESULTS FOR EQUATIONS (A.14)')00003480 DO 1 N=1,NCAP 00003490 IF (N.NE.1) GO TO 9000 00003500 SUM=0.0D+00 00003510 DO 2 J1=1,K 00003520 SUM=SUM+X(J1,N)*B(J1,N) 00003530 2 CONTINUE 00003540 SUM=SUM-Y(N) 00003550 DO 3 J1=1,K 00003560 DIF(J1)=SUM*X(J1,N)-AMU*(B(J1,N+1)-B(J1,N)) 00003570 3 CONTINUE 00003580 WRITE (6,200) N,(DIF(J1),J1=1,K) 00003590 200 FORMAT(1X,'FOR N EQUAL TO',I5/1X,6D12.3) 00003600 GO TO 1 00003610 9000 IF (N.EQ.NCAP) GO TO 9001 00003620 SUM=0.0D+00 00003630 DO 4 J1=1,K 00003640 SUM=SUM+X(J1,N)*B(J1,N) 00003650 4 CONTINUE 00003660 SUM=SUM-Y(N) 00003670 DO 5 J1=1,K 00003680 DIF(J1)=SUM*X(J1,N)-AMU*(B(J1,N+1)-B(J1,N)) 00003690 & +AMU*(B(J1,N)-B(J1,N-1)) 00003700 5 CONTINUE 00003710 WRITE(6,200) N,(DIF(J1),J1=1,K) 00003720 GO TO 1 00003730 9001 SUM=0.0D+00 00003740 DO 6 J1=1,K 00003750 SUM=SUM+X(J1,N)*B(J1,N) 00003760 6 CONTINUE 00003770 SUM=SUM-Y(N) 00003780 DO 7 J1=1,K 00003790 DIF(J1)=SUM*X(J1,N)+AMU*(B(J1,N)-B(J1,N-1)) 00003800 7 CONTINUE 00003810 WRITE(6,200) N,(DIF(J1),J1=1,K) 00003820 1 CONTINUE 00003830 RETURN 00003840 END 00003850