楼主: worldinsand
1607 0

[问答] 用MCMC方法估计的sigma值有点小问题呢 [推广有奖]

  • 2关注
  • 0粉丝

大专生

11%

还不是VIP/贵宾

-

威望
0
论坛币
23 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
177 点
帖子
19
精华
0
在线时间
43 小时
注册时间
2012-3-12
最后登录
2012-6-24

楼主
worldinsand 发表于 2012-4-16 18:34:47 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
程序见后文,运行结果是
       1.0000000        1.0000000        1.7320508
       1.0473677       0.87799707      -0.22331818
前两个值是系数beta1和beta2,最后一个是sigma。前两个值还可以,最后一个一定是哪里有问题,请高手帮忙解答,先表示感谢!

new;
library pgraph;
graphset;
pqgwin many;
rndseed 19890930;   //set the seed
/***********data generation***********/
b1 = 1;     b2 = 1;     beta = b1 | b2;     
sig_sq = 3;     sig = sqrt(sig_sq);
t_par = b1| b2 | sig;
n = 300;
x1 = ones(n,1);
x2 = rndu(n,1);
x = x1 ~ x2;
e = sig*rndn(n,1);
y = x*beta+e;
/**********initial values***********/
beta = y/x;
sig = stdc(y - x*beta);
p_f1 = pos(y, x, beta, sig);  //get initial posterior density
/***********MCMC loop***********/
burn = 100;     //burn the first 100 samples
iter = 3000;
nrep = burn + iter;
mcmc = zeros(nrep,3);
/*********function definition*********/
proc pos(y,x,beta,sig);
    local n,u,f;
    n = rows(y);
    u = (y-x*beta)' * (y-x*beta);
    f=((2*pi)^(-n/2))*(sig^(-n))*exp(-u/(2*(sig^2)));
retp(ln(f));
endp;   
fn drawpar(mean, sigma) = mean+chol(sigma)'*rndn(rows(mean),1);


ixx = inv(x'*x);
sig2 = sig^2;
beta_sig = sig2*ixx;     //var(beta)=sigma^2*(x'*x)^(-1)

for i(1,nrep,1);
    betatem = drawpar(beta,beta_sig);
    p_f = pos(y,x,betatem,sig);
    qb01 = 0;
    temp = 1 | exp(p_f - p_f1 + qb01);
    if (minc(temp) > rndu(1,1));
        beta = betatem;
        p_f1 = p_f;
    endif;
    mcmc[i,1:2] = beta';
endfor;

for i(1,nrep,1);
    sig_sig = 0.3;//setting by experience
    sig_tem = drawpar(sig,sig_sig);
    p_f = pos(y,x,beta,sig_tem);
    qb01 = 0;
    temp = 1 | exp(p_f - p_f1 + qb01);
    if (minc(temp) > rndu(1,1));
        sig = sig_tem;
        p_f1 = p_f;
    endif;
    mcmc[i,3] = sig;
endfor;

index = seqa(0,1,iter);
title("MCMC draws for beta1");
xy(index,mcmc[burn+1:nrep,1]);
title("MCMC draws for beta2");
xy(index,mcmc[burn+1:nrep,2]);
title("MCMC draws for sig");
xy(index,mcmc[burn+1:nrep,3]);
m_mcmc = meanc(mcmc);
print t_par';
print m_mcmc';
end;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Sigma mcmc GMA CMC 小问题 sigma 问题

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-23 15:59