###Recoding the SBM using edgelists instead#### #M = m(m-1) total number of ties #Y is the M x 3 matrix of sender, receiver, tie weight #X is the M x p matrix of covariates #B is the kxk tie prob #beta is a px1 vector #group is a m x 1 vector indicated group memberships logit=function(x){return(log(x/(1-x)))} expit=function(x){return(exp(x)/(1+exp(x)))} CoStochasticBMList=function(edgelist, covariates, group, B, priors, n.iter, tune, beta){ #group[1]=1 logitB=log(B/(1-B)) tau1=priors$gamma[1] tau2=priors$gamma[2] n=dim(edgelist)[1] k=dim(B)[1] m=length(group) n.groups=k ###Setting Up Parameter Storage### pars=list() pars$B=array(data=NA, dim=c(n.iter, k)) pars$beta=matrix(NA, n.iter, length(beta)) pars$acc=list() pars$acc$logitB=rep(0, k) pars$acc$beta=rep(0, length(beta)) pars$logitB=array(NA, dim=c(n.iter, k)) pars$group=matrix(NA, n.iter, length(group)) pars$logposterior=rep(0, n.iter) ###Setting orignal values for llikeB and lpB### lplogitB=logitprior(diag(logitB), priors, diag=1) ###Original values for lpbeta### lpbeta=logprior.beta(beta, priors$beta[1], priors$beta[2]) llikelogitB=loglikeSD(logitB, group, edgelist, covariates, beta) ################################ ####The actual sampler##### ################################ for(iter in 1:n.iter){ ###Updating B via metroplis steps### ##Off diagonal entries## llikelogitB=loglikeSD(logitB, group, edgelist, covariates, beta) ##Diagonal entries## for(row in 1:k){ col=row #diagonal entires# logitB.new=logitB lplogitB.new=lplogitB logitB.new[row,col]=logitB[row,col]+tune$logitB[row]*rnorm(1,0,1) logitB.new[row,col]=constrain.logit(logitB.new[row,col]) llikelogitB.new=loglikeSD(logitB.new, group, edgelist, covariates, beta) lplogitB.new[row]=logitprior(logitB.new[row,col], priors, diag=1) #print(llikelogitB.new) #print(lplogitB.new) log.ratio <- llikelogitB.new-llikelogitB+lplogitB.new[row]-lplogitB[row] #print(log.ratio) if(log(runif(1))