Just a quick answer now, and I'll get back to this later on:
Both [simulate] and [forecast] do, in principle, the same job, however
the newer [forecast] allows for a much general setup of conditional
simulations/forecasts. The [forecast] function is, in fact, a rational-
expectations extension of the framework proposed by Waggoner and Zha
(1999) (their framework handled conditional forecasts in VAR models).
I want to publish this extension at some point.
When writing this new function, I just wanted to keep the older
[simulate] and its syntax for backward compatibility reasons. I,
therefore, needed to come up with a new name for a very similar
function, and I no wonder chose [forecast].
Now, two major differences between [simulate] and [forecast] are the
following:
1. [forecast] produces not only the point (mean) simulation/forecast,
but also the corresponding MSE matrices or std devs (taking into
account both uncertainty in the initial conditions -- if these have
been estimated by running a Kalman filter -- and uncertainty about
future shocks.
2. When you want to exogenise a particular (set of) endogenous variable
(s), function [forecast] will, in general, use all the shocks in the
model to do the job by finding such a combination of the shocks that
minimises the weighted sum of the squares of them. The weights are
indirectly proportional to the shocks' variances currently assigned
in the model. In other words.
By setting some of the std devs to zeros you can effectively switch
off some of the shocks in this exercise. If you're exogenising e.g.
just one endogenous variable, and if you switch off all but one shock,
[forecast] will give you exactly the same results as if you called
[simulate] with a plan in which you'd exogenise/endogenise the same
variables/shock pair.
Note also that you can run both [simulate] and [forecast] in either an
"anticipated" or an "unanticipated" mode, you can run both of them
with models that have multiple parameterisations, etc.
As for your question #2, it is simply for some technical reasons that
the first output argument of the [forecast] function really includes
forecasts/simulations with the effect of all the structural shocks.
The terms "conditional" and "unconditional" in this context relate
solely to your judgment imposed on the trajectory of endogenous
variables. In other words, the "unconditional" forecasts (i.e. the
first output argument) from this function contain so called
"structural judgment" (i.e. judgment imposed as future structural
shocks) but not "reduced-form judgment"; the "conditional" forecasts
(the second output argument), on the other hand, contain both types of
judgment.
I don't want to change the structure of [forecast]'s output arguments,
again because of backward compatibility reasons. You can simply run
the [forecast] function without an empty judgment input argument first
to get the truly unconditional forecast.
I'll try to add some explanatory comments to the help on the
[forecast] function.
But will get back to this issue later on, and also probably write a
more detailed example code just on this.
Jaromir