我目前正在研究我的数学学位的最后一年项目,该项目的基础是概述Metropolis-Hastings算法和一些数值例子。 到目前为止,通过使用我的提议分布作为高斯分布和从其他一些分布中抽样,我得到了一些很好的结果,但是我试图通过使用不同的提议分布更进一步。
到目前为止,我已经获得了这个代码(我正在使用Matlab),但是由于网上资源有限,使用不同的提案很难判断我是否接近,因为实际上我不太确定如何尝试这个,(特别是因为到目前为止这没有提供有用的数据输出)。
如果有人能够了解或转发我一些易于获取的信息,那将是非常棒的(我知道我不只是要求编码建议,还要提及数学)。
所以,我想使用拉普拉斯的提议分布从高斯采样,这是我的代码到目前为止:
n = 1000; %%%%number of iterations
x(1) = -3; %%%%Generate a starting point
%%%%Target distribution: Gaussian:
strg = '1/(sqrt(2*pi*(sig)))*exp(-0.5*((x - mu)/sqrt(sig)).^2)';
tnorm = inline(strg, 'x', 'mu', 'sig');
mu = 1; %%%%Gaussian Parameters (I will be estimating these from my markov chain x)
sig = 3;
%%%%Proposal distribution: Laplace:
strg = '(1/(2*b))*exp((-1)*abs(x - mu)/b)';
laplace = inline(strg, 'x', 'b', 'mu');
b = 2; %%%%Laplace parameter, I will be using my values for y and x(i-1) for mu
%%%%Generate markov chain by acceptance-rejection
for i = 2:n
%%%%Generate a candidate from the proposal distribution
y = laplace(randn(1), b, x(i-1));
%%%%Generate a uniform for comparison
u = rand(1);
alpha = min([1, (tnorm(y, mu, sig)*laplace(x(i-1), b, y))/(tnorm(x(i-1), mu, sig)*laplace(y, b, x(i-1)))]);
if u <= alpha
x(i) = y;
else
x(i) = x(i-1);
end
end
如果有人能告诉我上述内容是否完全错误/以错误的方式进行,或者只是出现了一些错误(我非常担心我的'y'代表for for循环是完全错误的那太棒了。
谢谢,汤姆
答案 0 :(得分:1)
作为参考,这已经在@ripegraph的另一个网站上解决了,我从拉普拉斯分布生成随机数的方法是不正确的,实际上应该使用:http://en.wikipedia.org/wiki/Laplace_distribution#Generating_random_variables_according_to_the_Laplace_distribution
他还注意到拉普拉斯分布是对称的,因此根本不需要包含在代码中。
在做了一些研究后,我发现如果你有X~Gamma(v / 2,2),它就变成了X~ChiSquare(v),并且是使用非高斯提议的一个更好的例子。但是,要使用此示例,您需要使用独立采样器http://www.math.mcmaster.ca/canty/teaching/stat744/Lectures5.pdf(幻灯片89)。
希望这可能对某人有用。