全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 winbugs及其他软件专版
2710 0
2010-04-09
其实是关于Dirichlet process的模型,不过问题不在与此. 运行出现错误,老是说initialization部分 expected multivariate node,莫非我初始值没有设对?查了很久没有检查出来,在这求助大家,谢谢


程序为了实现对三个multivariate normal产生的数进行分类,但问题就是,初始值冒似有问题

Winbugs Code:

model
{
     for(i in 1:N){
    y[i,1:2] ~ dmnorm(mu[i,],tau[i,,])   
    S ~ dcat(pi[])
    mu[i,1:2] <- mu.star[S,]
    tau[i,1:2,1:2] <- tau.star[S,,]}

    # Constructive DPP
   
    # Stick breaking prior
    p[1] <- r[1]
    for (j in 2:C) {p[j] <- r[j]*(1-r[j-1])*p[j-1]/r[j-1]}
    p.sum <- sum(p[])        
    for (j in 1:C) {r[j] ~ dbeta(1,alpha); pi[j] <- p[j]/p.sum}
   
    # Baseline distribution
    for (j in 1:C) {mu.star[j,1:2] ~ dmnorm(theta[],tau.star[j,,]);tau.star[j,1:2,1:2] ~ dwish(T[,],3)}
    theta[1:2] ~ dmnorm(theta0[],S2[,])
    T[1:2,1:2] ~ dwish(S3[,],3)

    # DPP Precision Parameter         
    alpha ~ dgamma(1,1)

    # Programming for calculating summary statistics
    for(i in 1:N) {for (j in 1:C) {SC[i,j] <- equals(j,S)}}

    # total clusters K            
    for (j in 1:C) {cl[j] <- step(sum(SC[,j])-1)}
    K <- sum(cl[])
}


R code:

library(R2WinBUGS)
library(MASS)
library(MCMCpack)
library(coda)

#Generate synthetic data
n=50
S=matrix(c(1,.2,.2,2),nrow=2)
y1=mvrnorm(n,c(0,0),S)
y2=mvrnorm(n,c(3,3),S)
y3=mvrnorm(n,c(-3,-3),S)
y=rbind(y1,y2,y3)

N=nrow(y)
C=6
theta0=as.vector(c(0,0))
S2=matrix(c(1,0,0,2),nrow=2)
S3=matrix(c(1,0,0,1),nrow=2)

data=list("y","N","C","theta0","S2","S3")
inits=function(){list(alpha=rgamma(1,1.5,1),theta=mvrnorm(1,theta0,S2),T=rwish(3,S3),K=6)}
dp_norm.sim=bugs(data,inits,model.file="dp_norm.txt",parameters=c("alpha","K"),
n.chains=1,n.iter=500,n.burnin=50,n.thin=1,bugs.directory="C:/Program Files/WinBUGS14/",codaPkg=T,debug=T)
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群