Program g13dbfe
! G13DBF Example Program Text
! Mark 27.2 Release. NAG Copyright 2021.
! .. Use Statements ..
Use nag_library, Only: g13dbf, nag_wp
! .. Implicit None Statement ..
Implicit None
! .. Parameters ..
Integer, Parameter :: nin = 5, nout = 6
! .. Local Scalars ..
Real (Kind=nag_wp) :: v0
Integer :: i, ifail, iwa, k, ldc0, nk, nl, ns, &
nvp
! .. Local Arrays ..
Real (Kind=nag_wp), Allocatable :: c(:,:,:), c0(:,:), d(:,:,:), &
db(:,:), p(:), v(:), w(:,:,:), &
wa(:), wb(:,:,:)
! .. Executable Statements ..
Write (nout,*) 'G13DBF Example Program Results'
Write (nout,*)
! Skip heading in data file
Read (nin,*)
! Read series length, and numbers of lags
Read (nin,*) ns, nl, nk
ldc0 = ns
iwa = (2*ns+1)*ns
Allocate (c0(ldc0,ns),c(ldc0,ldc0,nl),p(nk),v(nk),d(ldc0,ldc0,nk), &
w(ldc0,ldc0,nk),wb(ldc0,ldc0,nk),wa(iwa),db(ldc0,ns))
! Read autocovariances
Read (nin,*)(c0(i,1:ns),i=1,ns)
Read (nin,*)((c(i,1:ns,k),i=1,ns),k=1,nl)
! Calculate multivariate partial autocorrelation function
ifail = -1
Call g13dbf(c0,c,ldc0,ns,nl,nk,p,v0,v,d,db,w,wb,nvp,wa,iwa,ifail)
If (ifail/=0) Then
If (ifail/=3) Then
Go To 100
End If
End If
! Display results
Write (nout,99999) 'Number of valid parameters =', nvp
Write (nout,*)
Write (nout,*) 'Multivariate partial autocorrelations'
Write (nout,99998) p(1:nk)
Write (nout,*)
Write (nout,*) 'Zero lag predictor error variance determinant'
Write (nout,*) 'followed by error variance ratios'
Write (nout,99998) v0, v(1:nk)
Write (nout,*)
Write (nout,*) 'Prediction error variances'
Do k = 1, nk
Write (nout,*)
Write (nout,99997) 'Lag =', k
Do i = 1, ns
Write (nout,99998) d(i,1:ns,k)
End Do
End Do
Write (nout,*)
Write (nout,*) 'Last backward prediction error variances'
Write (nout,*)
Write (nout,99997) 'Lag =', nvp
Do i = 1, ns
Write (nout,99998) db(i,1:ns)
End Do
Write (nout,*)
Write (nout,*) 'Prediction coefficients'
Do k = 1, nk
Write (nout,*)
Write (nout,99997) 'Lag =', k
Do i = 1, ns
Write (nout,99998) w(i,1:ns,k)
End Do
End Do
Write (nout,*)
Write (nout,*) 'Backward prediction coefficients'
Do k = 1, nk
Write (nout,*)
Write (nout,99997) 'Lag =', k
Do i = 1, ns
Write (nout,99998) wb(i,1:ns,k)
End Do
End Do
100 Continue
99999 Format (1X,A,I10)
99998 Format (1X,5F12.5)
99997 Format (1X,A,I5)
End Program g13dbfe