Issue on class emcee.moves.GaussianMove(cov, mode='vector', factor=None)
HuiTong5 opened this issue · 0 comments
For class emcee.moves.GaussianMove(cov, mode='vector', factor=None)
, the emcee docs (and the comments in the source code) all say the parameter factor (Optional[float])
is invalid for the "vector" mode. However, I do not find factor option is forbidden in actual calculation of proposal samples when mode="vector" in the following code.
Also, I don't quite understand mathematically why factor (Optional[float])` is invalid for the "vector" mode.
As far as I understand, factor (Optional[float])
makes the Gaussian with flexible scale (i.e., add a factor to the fixed input scale parameter), which somewhat introduce more randomness to benefit the proposal.
Then the proposal distribution turn out to be
Here, x is the proposal sample, G represent Gaussian distribution, cov
and factor
are the input parameters, f is the proposal factor value in actual calculation, which follows LogUniform(-self.log_factor, self.log_factor)
in this line.
From my understanding, the proposal distribution keeps a symmetric distribution, which means we do not need to introduce additional factor to account for difference in proposal distribution q(x|x')
and q(x'|x)
when calculating the acceptance rate in MCMC, i.e., the same as a regular Gaussian proposal.
And it's nothing related to mode if I understand correctly.
Also, another question comes to me when thinking of the mode. If one provides the full, square covariance matrix and choose "random"
, or "sequential"
mode, that means, sampler selects one dimension in each iteration, proposal distribution becomes marginalized Gaussian in this situation. Only the variance element will affect the proposal but the covariance (non-diagonal elements) won't be considered. That's probably a loss of information. Maybe "random"
, or "sequential"
mode should be disabled in this case?
I may make some mistakes when thinking of all these. Please correct me if there're some problems.
Thanks!