The first stage of the least-squares estimation is computing the prediction-error filter. The second stage will be using it to find the missing data. The input data space contains a mixture of known data values and missing unknown ones. For the first stage of finding the filter, we generally have many more fitting equations than we need so we can proceed by ignoring the fitting equations that involve missing data values. We ignore them everywhere that the missing inputs hit the filter.
The codes here do not address the difficulty that maybe
too much data is missing so that all weights are zero.
To add stabilization we could supplement the data volume
with a synthetic ``training dataset''
or by a ``prior filter''.
With things as they are,
if there is not enough data to specify a prediction-error filter,
you should encounter the error exit from cgstep()
.
#$=head1 NAME
#$
#$pef - find prediction error filter
#$
#$=head1 SYNOPSIS
#$
#$C<call find_pef(dd,aa,niter)>
#$
#$=head1 INPUT PARAMETERS
#$
#$=over 4
#$
#$=item dd - C<real(:)>
#$
#$ Input data
#$
#$=item niter - integer
#$
#$ Number of itterations
#$
#$=back
#$
#$=head1 OUTPUT PARAMETERS
#$
#$=over 4
#$
#$=item aa - type(filter)
#$
#$ output filter
#$
#$=back
#$
#$=head1 DESCRIPTION
#$
#$ Find prediction-error filter (helix magic)
#$
#$=head1 SEE ALSO
#$
#$L<npef>,L<hconest>,L<solver>,L<cgstep>,L<pefest>
#$
#$=head1 LIBRARY
#$
#$B<geef90>
#$
#$=cut
module pef { # Find prediction-error filter (helix magic)
use hconest
use cgstep_mod
use solver_mod
contains
subroutine find_pef( dd, aa, niter) {
integer, intent( in) :: niter # number of iterations
type( filter) :: aa # filter
real, dimension(:), pointer :: dd # input data
call hconest_init( dd, aa)
call solver( hconest_lop, cgstep, aa%flt, -dd, niter, x0= aa%flt)
call cgstep_close()
}
}
Results are shown in Figures
11- 13.
Here again, the PEF is carefully designed using
module bound
so that no filter outputs are used where the filter
is only partway on the data.
After the PEF was designed, it is applied with the
more cavalier helix treatment of boundaries
so although you cannot see the frame of excluded outputs,
you can see what happens as the filter is climbing onto the data.
![]() |
![]() |
![]() |