首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Metropolis-Hastings算法,在Matlab中使用建议分布而不是高斯分布

Metropolis-Hastings算法,在Matlab中使用建议分布而不是高斯分布
EN

Stack Overflow用户
提问于 2013-03-29 02:30:17
回答 1查看 1.5K关注 0票数 2

我目前正在做我的数学学位的最后一年的项目,该项目基于对Metropolis-Hastings算法的概述和一些数值示例。到目前为止,我已经通过使用我的提议分布作为高斯分布,并从其他几个分布中采样,获得了一些很好的结果,但是我试图通过使用不同的提议分布更进一步。

到目前为止,我已经得到了这段代码(我正在使用Matlab),但是由于网上关于使用不同建议的资源有限,很难说我是否接近了,因为实际上我不太确定如何尝试这一点(特别是因为到目前为止这还没有给出有用的数据输出)。

如果有人能帮我一把,如果他们知道或者转发给我一些容易获取的信息,那就太好了(我知道我不仅仅是在征求编码建议,还有数学方面的建议)。

所以,我想使用拉普拉斯的提议分布从高斯分布中采样,这是我到目前为止的代码:

代码语言:javascript
复制
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循环是完全错误的),那就太棒了。

谢谢,汤姆

EN

回答 1

Stack Overflow用户

发布于 2013-03-29 20:41:55

作为参考,@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)。

希望这对某些人有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15689546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档