library("R2WinBUGS")

#set correct working directory
setwd("C:\\WINDOWS\\Desktop\\Backed_up\\R-results")

#WinBUGS requires varying out-states first, but
#early versions of R package "R2WinBUGS" have a bug that requires
#varying in-states first

#define distributions of categorical nodes
#varying in-states first
data = list(
	p_A1 = structure(.Data = c(
		0.5,	0.1,	0.95,	0.3,	
		0.5,	0.9,	0.05,	0.7
	), .Dim = c(4,2)),
	p_B1 = structure(.Data = c(
		0.45,	0.9,	0.5,	0.2,	
		0.55,	0.1,	0.5,	0.8
	), .Dim = c(4,2)),
	p_B2 = structure(.Data = c(
		0.55,	0.05,	0.7,	0.8,	
		0.45,	0.95,	0.3,	0.2
	), .Dim = c(4,2)),
	p_C1 = structure(.Data = c(
		0.9,	0.7,	0.3,	0.4,	
		0.1,	0.3,	0.7,	0.6
	), .Dim = c(4,2)),
	p_C2 = structure(.Data = c(
		0.95,	0.6,	0.9,	0.7,	
		0.05,	0.4,	0.1,	0.3
	), .Dim = c(4,2)),
	p_C3 = structure(.Data = c(
		0.1,	0.2,	0.8,	0.45,	
		0.9,	0.8,	0.2,	0.55
	), .Dim = c(4,2)),
	p_C4 = structure(.Data = c(
		0.1,	0.9,	0.95,	0.35,	
		0.9,	0.1,	0.05,	0.65
	), .Dim = c(4,2)),
	p_D1 = c(
		0.3,	
		0.7
	),
	p_D2 = c(
		0.1,	
		0.9
	),
	p_D3 = c(
		0.9,	
		0.1
	),
	p_D4 = c(
		0.4,	
		0.6
	),
	p_D5 = c(
		0.2,	
		0.8
	),
	p_D6 = c(
		0.8,	
		0.2
	),
	p_D7 = c(
		0.05,	
		0.95
	),
	p_D8 = c(
		0.15,	
		0.85
	)
)

#define distributions of categorical nodes
#varying out-states first (WinBUGS convention)
data = list(
	p_A1 = structure(.Data = c(
		0.5,	0.5,	
		0.1,	0.9,	
		0.95,	0.05,	
		0.3,	0.7
	), .Dim = c(4,2)),
	p_B1 = structure(.Data = c(
		0.45,	0.55,	
		0.9,	0.1,	
		0.5,	0.5,	
		0.2,	0.8
	), .Dim = c(4,2)),
	p_B2 = structure(.Data = c(
		0.55,	0.45,	
		0.05,	0.95,	
		0.7,	0.3,	
		0.8,	0.2
	), .Dim = c(4,2)),
	p_C1 = structure(.Data = c(
		0.9,	0.1,	
		0.7,	0.3,	
		0.3,	0.7,	
		0.4,	0.6
	), .Dim = c(4,2)),
	p_C2 = structure(.Data = c(
		0.95,	0.05,	
		0.6,	0.4,	
		0.9,	0.1,	
		0.7,	0.3
	), .Dim = c(4,2)),
	p_C3 = structure(.Data = c(
		0.1,	0.9,	
		0.2,	0.8,	
		0.8,	0.2,	
		0.45,	0.55
	), .Dim = c(4,2)),
	p_C4 = structure(.Data = c(
		0.1,	0.9,	
		0.9,	0.1,	
		0.95,	0.05,	
		0.35,	0.65
	), .Dim = c(4,2)),
	p_D1 = c(
		0.3,	0.7
	),
	p_D2 = c(
		0.1,	0.9
	),
	p_D3 = c(
		0.9,	0.1
	),
	p_D4 = c(
		0.4,	0.6
	),
	p_D5 = c(
		0.2,	0.8
	),
	p_D6 = c(
		0.8,	0.2
	),
	p_D7 = c(
		0.05,	0.95
	),
	p_D8 = c(
		0.15,	0.85
	)
)

parameters = list(
	"A1",
	"B1",
	"B2",
	"C1",
	"C2",
	"C3",
	"C4",
	"D1",
	"D2",
	"D3",
	"D4",
	"D5",
	"D6",
	"D7",
	"D8"
)

#fixed inits
inits = list(
	list(A1=1,B1=1,B2=1,C1=1,C2=1,C3=1,C4=1,D1=1,D2=1,D3=1,D4=1,D5=1,D6=1,D7=1,D8=1),
	list(A1=1,B1=1,B2=1,C1=1,C2=1,C3=1,C4=1,D1=1,D2=1,D3=1,D4=1,D5=1,D6=1,D7=1,D8=1),
	list(A1=1,B1=1,B2=1,C1=1,C2=1,C3=1,C4=1,D1=1,D2=1,D3=1,D4=1,D5=1,D6=1,D7=1,D8=1)
)

#random inits
#runif = random uniform (num samples, min, max)
inits = function() list(
	A1 = 1 + trunc(runif(1, 0, 2)),
	B1 = 1 + trunc(runif(1, 0, 2)),
	B2 = 1 + trunc(runif(1, 0, 2)),
	C1 = 1 + trunc(runif(1, 0, 2)),
	C2 = 1 + trunc(runif(1, 0, 2)),
	C3 = 1 + trunc(runif(1, 0, 2)),
	C4 = 1 + trunc(runif(1, 0, 2)),
	D1 = 1 + trunc(runif(1, 0, 2)),
	D2 = 1 + trunc(runif(1, 0, 2)),
	D3 = 1 + trunc(runif(1, 0, 2)),
	D4 = 1 + trunc(runif(1, 0, 2)),
	D5 = 1 + trunc(runif(1, 0, 2)),
	D6 = 1 + trunc(runif(1, 0, 2)),
	D7 = 1 + trunc(runif(1, 0, 2)),
	D8 = 1 + trunc(runif(1, 0, 2))
)

binSize = 50
numBins = 50
numSam = binSize*numBins
bugOut = bugs(
	data, inits, parameters,
	"Tree4Level_BUGS.txt",
	n.chains=3,
	n.iter=numSam,
	n.thin=1,
	n.burnin=0,
	codaPkg=TRUE,
	#codaPkg=FALSE,
	debug=TRUE,
	DIC=FALSE)  #no nodes are observed so DIC is undefined
