[R] a small question about R with Winbugs
dcflyer
dcflyer at gmail.com
Thu Apr 8 22:58:23 CEST 2010
I try to do a test for dirichlet process for Multivariate normal, but Winbugs
always says "expected multivariate node", does that mean I miss something at
initialization? I will really appreciate the help to solve this problem
Here is the R code, and Winbugs code.
model
{
for(i in 1:N){
y[i,1:2] ~ dmnorm(mu[i,],tau[i,,])
S[i] ~ dcat(pi[])
mu[i,1:2] <- mu.star[S[i],]
tau[i,1:2,1:2] <- tau.star[S[i],,]}
# 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[i])}}
# total clusters K
for (j in 1:C) {cl[j] <- step(sum(SC[,j])-1)}
K <- sum(cl[])
}
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)
--
View this message in context: http://n4.nabble.com/a-small-question-about-R-with-Winbugs-tp1788668p1788668.html
Sent from the R help mailing list archive at Nabble.com.
More information about the R-help
mailing list