Function for doing particle filtering given the state equation
(via generateNextStreamFunc
), and the observation
equation density (via logObsDensFunc
).
See the sections Details, Required Functions and Optional Functions for explanation on the arguments and the return values of the arguments that are themselves functions.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
nStreams 

nPeriods 

dimPerPeriod 

generateNextStreamsFunc 

logObsDensFunc 

resampCriterionFunc 

resampFunc 

summaryFunc 

nMHSteps 

MHUpdateFunc 

nStreamsPreResamp 

returnStreams 

returnLogWeights 

verboseLevel 

... 
optional arguments to be passed to

We introduce the following terms, which will be used in the sections Required Function and Optional Function below:
stream
the state vector also called the particle, the hidden state or the latent variable. Below we will use the terms stream and state vector interchangeably.
dimPerPeriod
the dimension of the space, the state vectors live in.
This function returns a list with the following components:
draws 
a list with the following components: 
nStreams 
the 
nPeriods 
the 
dimPerPeriod 
the 
nStreamsPreResamp 
the 
nMHSteps 
the 
filterType 
type of the filter: “particleFilter”. 
time 
the time taken by the run. 
The following argument(s) require some explanation:
lag1Streams
a matrix of dimension nStreams
x dimPerPeriod
of streams for
currentPeriod  1
.
lag1LogWeights
a vector of length nStreams
of
log weights corresponding to the streams in the argument matrix
lag1Streams
.
streamIndices
a vector of length >=
nStreams
which are to be updated from currentPeriod 
1
to currentPeriod
.
startingStreams
a matrix of dimension nStreams
x dimPerPeriod
to be used for
currentPeriod = 1
. If this is NULL
, then the
function should provide a way to generate streams for
currentPeriod = 1
.
a matrix of dimension nStreamIndices
x dimPerPeriod
. The rows of this matrix
contain the state vectors for period currentPeriod
given
the state vectors to be found in the streamIndices
rows of
the argument lag1Streams
matrix. Here nStreamIndices
is the length of the argument streamIndices
.
this function should distinguish the cases
currentPeriod == 1
and currentPeriod > 1
inside of
it.
The following argument(s) require some explanation:
currentStreams
a matrix with dimPerPeriod
columns, the rows containing the streams for
currentPeriod
.
a vector of length nCurrentStreams
,
where nCurrentStreams
refers to the number of rows of the
currentStreams
matrix argument. This vector contains the
observation equation density values for currentPeriod
in
the log scale, evaluated at the rows of currentStreams
.
nCurrentStreams
might be >=
nStreams
.
The following argument(s) require some explanation:
currentStreams
a matrix with dimPerPeriod
columns, the rows containing the updated streams for
currentPeriod
.
currentLogWeights
a vector of log weights
corresponding to the streams in the argument matrix
currentStreams
.
TRUE
or FALSE
reflecting the
decision of the resampling scheme implemented by this function.
The following points are in order:
resampling schemes manily depend on
currentLogWeights
, the other two arguments might come in
handy for implementing period or stream specific resampling
schemes.
if nStreamsPreResamp
> nStreams
, then this
function should always return TRUE
.
see the subsection Arguments: for section Optional function: resampCriterionFunc.
a named list with the following components:
currentStreams
a matrix of dimension nStreams
x dimPerPeriod
. The rows of this matrix
contain the streams for period currentPeriod + 1
that were
resampled from those of the argument currentStreams
matrix,
which may contain >= nStreams
rows.
currentLogWeights
The log weights vector of length
nStreams
, associated with the streams that were resampled
in the returned currentStreams
matrix. Note, after the
resampling step, usually all the log weights are set to 0.
the components of the list returned by this function
and the arguments to this function have two common names, namely,
currentStreams
and currentLogWeights
. These entities
have different meanings, as explained above. For example, the
argument matrix currentStreams
could possibly have
>= nStreams
rows, whereas the returned
currentStreams
has exactly nStreams
number of
(resampled) streams in its rows.
The following argument(s) require some explanation:
currentStreams
a matrix of dimension nStreams
x dimPerPeriod
of streams for
currentPeriod
.
currentLogWeights
a vector of log weights
corresponding to the streams in the argument matrix
currentStreams
.
a vector of length of dimSummPerPeriod
of summaries for currentPeriod
given the
currentStreams
and the currentLogWeights
.
The following argument(s) require some explanation:
nMHSteps
the number of Metropolis Hastings (MH) steps (iterations) to be performed.
currentStreams
a matrix of dimension nStreams
x dimPerPeriod
of streams for
currentPeriod
.
lag1Streams
a matrix of dimension nStreams
x dimPerPeriod
of streams for
currentPeriod  1
.
lag1LogWeights
a vector of length nStreams
of
log weights corresponding to the streams in the argument matrix
lag1Streams
.
a named list with the following components:
currentStreams
a matrix of dimension nStreams
x dimPerPeriod
. The rows of this matrix
contain the streams for period currentPeriod
that are
(possibly) MHupdated versions of the rows of the argument
currentStreams
matrix.
acceptanceRates
a vector of length nStreams
,
representing the acceptance rates of the nMHSteps
many MH
steps for each of the streams in the rows of the argument
currentStreams
matrix.
a positive value of nMHSteps
performs as many MH
steps on the rows of the argument currentStreams
matrix. This is done to reduce the possible degeneracy after the
resampling.
Using very small values (<= 1e3
) for nStreams
might not give reliable results.
The effect of leaving the default value NULL
for some of the
arguments above are as follows:
resampCriterionFunc
the builtin resampling criterion, namely, resample when square of the coefficient of variation of the weights >= 1, is used.
resampFunc
the builtin resampling function, which resamples streams with probability proportional to their weights, is used.
summaryFunc
the builtin summary function, which
returns the weighted average of each of the dimPerPeriod
dimensions, is used.
MHUpdateFunc
the builtin Metropolis Hastings updating
function, which generates proposals for currentPeriod
streams using those of currentPeriod  1
, is used.
nStreamsPreResamp
it is set to nStreams
.
Also, the following point is worth noting:
resampCriterionFunc
, resampFunc
,
summaryFunc
and MHUpdateFunc
are only necessary when user wants to try out new resampling schemes, enhanced summary generation procedures or more efficient MH updating rules, as part of their research. The default builtins take care of the typical problems.
This function returns a list with component called draw
. The
detailed description of this component, as promised in section
Value, is as follows. It is a list itself with the following
components:
summary
a matrix of dimension nPeriods
x dimSummPerPeriod
.
propUniqueStreamIds
a vector of length
nPeriods
. The values are either proportions of unique
stream ids accpeted (at each period) if resampling was done or
NA
.
streams
an array of dimension nStreams
x dimPerPeriod
x
nPeriods
. This is returned if returnStreams = TRUE
.
logWeights
a matrix of dimension nStreams
x nPeriods
. This is returned if
returnLogWeights = TRUE
.
acceptanceRates
a matrix of dimension nStreams
x nPeriods
. This is returned if
nMHSteps > 0
.
Gopi Goswami goswami@stat.harvard.edu
Jun S. Liu (2001). Monte Carlo strategies for scientific computing. Springer. Page 66.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68  MSObj < MarkovSwitchingFuncGenerator(13579)
smcObj <
with(MSObj,
{
particleFilter(nStreams = 5000,
nPeriods = nrow(yy),
dimPerPeriod = ncol(yy),
generateNextStreamsFunc = generateNextStreamsFunc,
logObsDensFunc = logObsDensFunc,
returnStreams = TRUE,
returnLogWeights = TRUE,
verboseLevel = 1)
})
print(smcObj)
print(names(smcObj))
with(c(smcObj, MSObj),
{
par(mfcol = c(2, 1))
plot(as.ts(yy),
main = expression('The data and the underlying regimes'),
cex.main = 0.8,
xlab = 'period',
ylab = 'data and the regime means',
cex.lab = 0.8)
lines(as.ts(mu), col = 2, lty = 2)
plot(as.ts(draws$summary[1, ]),
main = expression('The underlying regimes and their estimates'),
cex.main = 0.8,
xlab = 'period',
ylab = 'regime means',
cex.lab = 0.8)
lines(as.ts(mu), col = 2, lty = 2)
})
MSObj < MarkovSwitchingFuncGenerator(97531)
smcObj <
with(MSObj,
{
particleFilter(nStreams = 5000,
nPeriods = nrow(yy),
dimPerPeriod = ncol(yy),
generateNextStreamsFunc = generateNextStreamsFunc,
logObsDensFunc = logObsDensFunc,
nMHSteps = 10,
returnStreams = TRUE,
returnLogWeights = TRUE,
verboseLevel = 1)
})
print(smcObj)
print(names(smcObj))
with(c(smcObj, MSObj),
{
par(mfcol = c(2, 1))
plot(as.ts(yy),
main = expression('The data and the underlying regimes'),
cex.main = 0.8,
xlab = 'period',
ylab = 'data and the regime means',
cex.lab = 0.8)
lines(as.ts(mu), col = 2, lty = 2)
plot(as.ts(draws$summary[1, ]),
main = expression('The underlying regimes and their estimates'),
cex.main = 0.8,
xlab = 'period',
ylab = 'regime means',
cex.lab = 0.8)
lines(as.ts(mu), col = 2, lty = 2)
})

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.
Please suggest features or report bugs with the GitHub issue tracker.
All documentation is copyright its authors; we didn't write any of that.