I open this issue for future reference. The main job for running Gibbs sampling will be GibbsJob. It will implement the basic Gibbs scheme, which updates one graph node (variable) per step.
It may be decided in the future to add an alternative job for Gibbs sampling, namely BlockedGibbsJob. This would enable to group two or more variables and update them jointly in a single step. Mathematically, ordinary and blocked Gibbs sampling are equivalent. The only reason one may decide to define the latter blocked version would be to encode more information. For example, instead of operating on a vector of variables one would operate on a vector of blocked variables. To do so, it would be needed to defined types such as VariableBlock and ParameterBlock, along the lines
type ParameterBlock
parameters::Vector{Parameter}
pdf::Distribution
logtarget::Function
end
The above proposal for ParameterBlock is sketchy rather than prescriptive.
To start with, the ordinary GibbsJob will be defined. In fact, GibbsJob should in principle be able to accommodate models that could be hosted by a BlockedGibbsJob. If however it is found out on a per-use basis that BlockedGibbsJob could be a useful alternative, it will be defined (without dropping the simpler GibbsJob).
I open this issue for future reference. The main job for running Gibbs sampling will be
GibbsJob
. It will implement the basic Gibbs scheme, which updates one graph node (variable) per step.It may be decided in the future to add an alternative job for Gibbs sampling, namely
BlockedGibbsJob
. This would enable to group two or more variables and update them jointly in a single step. Mathematically, ordinary and blocked Gibbs sampling are equivalent. The only reason one may decide to define the latter blocked version would be to encode more information. For example, instead of operating on a vector of variables one would operate on a vector of blocked variables. To do so, it would be needed to defined types such asVariableBlock
andParameterBlock
, along the linesThe above proposal for
ParameterBlock
is sketchy rather than prescriptive.To start with, the ordinary
GibbsJob
will be defined. In fact,GibbsJob
should in principle be able to accommodate models that could be hosted by aBlockedGibbsJob
. If however it is found out on a per-use basis thatBlockedGibbsJob
could be a useful alternative, it will be defined (without dropping the simplerGibbsJob
).