R/RunGAPS.R
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)
   
 
 }