楼主: laijf
1564 0

[问答] metropolis-Hasting 算法 [推广有奖]

  • 0关注
  • 0粉丝

高中生

60%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.0070
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
483 点
帖子
16
精华
0
在线时间
8 小时
注册时间
2016-7-17
最后登录
2016-8-20

楼主
laijf 发表于 2016-8-13 11:26:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
(N=2)个数值10和8.5395244,在中间用线性插值插入N1=10个值,结果如下:

    10.0000000  9.7344590  9.6016885  9.4689179  9.3361474  9.2033769
     9.0706064  8.9378359  8.8050654  8.6722949  8.5395244  8.5395244

我想用 Metropolis-Hasting  算法更新插入的N1个值
假设   theta<-c(2,2,2)
Yk代表如上数据的第k 个
目标分布
  dnorm(Y[i];Y[i-1]+mu[i-1]*Dt,beta[i-1]*Dt)*dnorm(Y[i+1];Y[i]+mu[Y[i]*Dt,beta[i]*Dt])分布随机数
  建议分布
  dnorm(.;1/2*(Y[i-1]+Y[i+1]),1/2*Dt*beta[Y[i-1]])
其中 mu[i]=Y[i]+(theta[1]+theta[2]*Y[i]),beta[i]=theta[3]^2*Y[i]

请问R程序如何写?

我的程序在计算比值出现NaN,怎么改?


  使用随机游动metropolis算法产生  missing data
  目标分布
  dnorm(Y[i];Y[i-1]+mu[i-1]*Dt,beta[i-1]*Dt)*dnorm(Y[i+1];Y[i]+mu[Y[i]*Dt,beta[i]*Dt])分布随机数
  建议分布
  dnorm(.;1/2*(Y[i-1]+Y[i+1]),1/2*Dt*beta[Y[i-1]])

####################################################
# alpha<-funcion(new,Y1,x)
# 计算alpha=目标分布f(新)*建议分布g(旧)/目标分布f(旧)*建议分布g(新)

###############################################################

   alpha<-function(i,new,x,theta)
    {
       fnew<-dnorm(new,x[i-1]+(theta[1]+theta[2]*x[i-1])*Dt1,theta[3]^2*x[i-1]*Dt1)*dnorm(x[i+1],new+(theta[1]+theta[2]*new)*Dt1,theta[3]^2*new*Dt1)


        gold<-dnorm(x[i],(x[i+1]+x[i-1])/2,1/2*Dt1*theta[3]^2*x[i-1])
      
        fold<-dnorm(x[i],x[i-1]+(theta[1]+theta[2]*x[i-1])*Dt1,theta[3]^2*x[i-1]*Dt1)*dnorm(x[i+1],x[i]+(theta[1]+theta[2]*x[i]*Dt1),theta[3]^2*x[i]*Dt1)


       gnew<-dnorm(new,(x[i+1]+x[i-1])/2,1/2*Dt1*theta[3]^2*x[i-1])
  
     # return(fnew)
       #return(gold)
      # return(fold)
       #return(gnew)
      return( fnew*(gold)/((fold)*(gnew)))
}
rw.Metropolis<-function(Y1,N1,N,Dt1)

             {
   
    #Y1:update the chain
    x<-Y1                # 新更新的在x中,未更新的在Y1中
   # set i in 0:N-1;j in 1:N1,则x中不需要更新的元素序号:j+i*(11)+1

    u<-runif(N1*(N-1)+N)  # 提前取好均匀分布随机数
    k<-0
    theta<-c(2,2,2)       # 赋初值
     sigma<-theta[3]^2*(x[1])*Dt1
      for(i in 0:N-1)
        for(j in 2:(N1))
       {
         w<-rnorm(1,(x[j+i*(N1+1)-1]+Y1[j+i*(N1+1)+1])/2,sigma)#从建议分布抽取一个数
         if(u[j+i*(N1+1)]<alpha(j+i*(N1+1),w,x,theta)) x[j+i*(N1+1)]<-w
         # else x[j+i*(N1+1)]<-x[j+i*(N1+1)]
        }
        return(x)
        }

二维码

扫码加我 拉你入群

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

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

关键词:Metropolis Polis ASTIN Metro Etro

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 12:26