902afe0d |
# runs matrix decomposition with MCMC using rjags
RunGAPS <- function(data, unc, numPatterns,
MaxAtomsA, alphaA, lambdaA,
MaxAtomsP, alphaP, lambdaP,
SAIter, iter, thin=1) {
# get the data needed for MCMC
matrixDecompData <- GetDataListGAPS(data, unc, numPatterns,
MaxAtomsA, alphaA, lambdaA,
MaxAtomsP, alphaP, lambdaP,
SAIter, thin)
matrixDecompInits <- list(A = matrix(
data=0, matrixDecompData$numGenes, numPatterns),
P = matrix(
data=0, numPatterns, matrixDecompData$numSamples))
# create the model file used by this decomposition
FID <- sprintf('%.10f', thin - floor(thin))
ModelFile <- paste("GAPS", FID, "bug", sep=".")
cat("var\n", file=ModelFile)
cat("\tA[numGenes, numPatterns], ADim[numGenes, numPatterns],\n",
file=ModelFile, append=TRUE)
cat("\tP[numPatterns, numSamples], PDim[numPatterns, numSamples],\n",
file=ModelFile, append=TRUE)
cat("\tD[numGenes, numSamples], S[numGenes, numSamples];\n",
file=ModelFile, append=TRUE)
cat("\nmodel {\n", file=ModelFile, append=TRUE)
cat("A[,] ~ datomicgibbs(ADim, MaxAtomsA, alphaA, lambdaA, SAIterA, fileID)\n", file=ModelFile, append=TRUE)
cat("P[,] ~ datomicgibbs(PDim, MaxAtomsP, alphaP, lambdaP, SAIterP, fileID)\n", file=ModelFile, append=TRUE)
cat("D[,] ~ gapsnorm(A,P,S)\n", file=ModelFile, append=TRUE)
cat("}\n", file=ModelFile, append=TRUE)
# set the model being used
matrixDecompModel <- jags.model(file=ModelFile,
data=matrixDecompData,
inits=matrixDecompInits,
n.adapt=SAIter)
# update and specify which nodes are monitored
matrixDecompOutput <- jags.samples(model=matrixDecompModel,
variable.names=c('A','P'),
n.iter=iter,
thin=iter)
file.remove(ModelFile)
return(matrixDecompOutput)
}
|