extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/ssp/runSSP.R

Code
Comments
Other
Rev Date Author Line
5627 24 Sep 19 nicklas 1 #
5627 24 Sep 19 nicklas 2 # Run multiple 'models' for a single 'gene.tsv' file
5962 03 Jun 20 nicklas 3 # Output is one result per line in the same order as the 'models' parameter.
5962 03 Jun 20 nicklas 4 # Format: <ResultClass;Class1=Score1;Class2=Score2;...;ClassN=ScoreN>
5627 24 Sep 19 nicklas 5 #
5627 24 Sep 19 nicklas 6 # tsvFile: Path to gene.tsv file from StringTie
5627 24 Sep 19 nicklas 7 # sourceDir: Path to directory with the R files that are needed (see loadSources())
5627 24 Sep 19 nicklas 8 # modelsDir: Path to the directory with model RData files
5627 24 Sep 19 nicklas 9 # models: File names of RData files, each file represents a single SSP model
5627 24 Sep 19 nicklas 10 #
5627 24 Sep 19 nicklas 11 runSSP = function(tsvFile, sourceDir, modelsDir, models)
5627 24 Sep 19 nicklas 12 {
5627 24 Sep 19 nicklas 13   
5627 24 Sep 19 nicklas 14   loadLibraries();
5627 24 Sep 19 nicklas 15   loadSources(sourceDir);
5627 24 Sep 19 nicklas 16   
5627 24 Sep 19 nicklas 17   # load gene annotations
5627 24 Sep 19 nicklas 18   load(paste(sourceDir, "Gene.ID.ann.Rdata", sep="/"));
5627 24 Sep 19 nicklas 19   
5627 24 Sep 19 nicklas 20   # read tsv
5627 24 Sep 19 nicklas 21   mymatrix <- read_StringTie_tsv_FPKM(tsvFile, id=Gene.ID.ann$Gene.ID);
5627 24 Sep 19 nicklas 22   
5627 24 Sep 19 nicklas 23   # translate gene id
5627 24 Sep 19 nicklas 24   myid <- translate_id2entrez(id=rownames(mymatrix), ann=Gene.ID.ann, e=TRUE);
5627 24 Sep 19 nicklas 25   
5627 24 Sep 19 nicklas 26   # load ssp model
5627 24 Sep 19 nicklas 27   for (model in models)
5627 24 Sep 19 nicklas 28   {
5627 24 Sep 19 nicklas 29     load(paste(modelsDir, model, sep="/"));  # loaded ssp object must be named aims.gs 
5627 24 Sep 19 nicklas 30   
5627 24 Sep 19 nicklas 31     aims.gs <- fixTheIsNumericProblem(aims.gs);
5627 24 Sep 19 nicklas 32     
5627 24 Sep 19 nicklas 33     # apply ssp model
5627 24 Sep 19 nicklas 34     resultslist <- applyAIMS(mymatrix, myid, aims.gs);
5937 15 May 20 nicklas 35     all.probs <- c(resultslist$all.probs[[1]])
5937 15 May 20 nicklas 36     names(all.probs) <- colnames(resultslist$all.probs[[1]])
5937 15 May 20 nicklas 37     
5937 15 May 20 nicklas 38     # print result to stdout (semicolon-separated list):
5937 15 May 20 nicklas 39     # result class;class1=score;class2=score;...;classN=score
5937 15 May 20 nicklas 40     cat("<", resultslist$cl[[1]], sep="");
5937 15 May 20 nicklas 41     for (n in names(all.probs))
5937 15 May 20 nicklas 42     {
5937 15 May 20 nicklas 43       cat("; ", n, "=", all.probs[n], sep="");
5937 15 May 20 nicklas 44     }
5937 15 May 20 nicklas 45     cat(">\n");
5627 24 Sep 19 nicklas 46   }
5627 24 Sep 19 nicklas 47 }
5627 24 Sep 19 nicklas 48
5962 03 Jun 20 nicklas 49
5962 03 Jun 20 nicklas 50 # Get information about the specified models
5962 03 Jun 20 nicklas 51 # Output is one result per line in the same order as the 'models' parameter.
5962 03 Jun 20 nicklas 52 # Format: <Class1;Class2;...;ClassN>
5962 03 Jun 20 nicklas 53 #
5962 03 Jun 20 nicklas 54 # models: File names of RData files, each file represents a single SSP model
5962 03 Jun 20 nicklas 55 getInfo = function(sourceDir, modelsDir, models)
5962 03 Jun 20 nicklas 56 {
5962 03 Jun 20 nicklas 57   loadLibraries();
5962 03 Jun 20 nicklas 58   loadSources(sourceDir);
5962 03 Jun 20 nicklas 59
5962 03 Jun 20 nicklas 60   for (model in models)
5962 03 Jun 20 nicklas 61   {
5962 03 Jun 20 nicklas 62     modelFile = paste(modelsDir, model, sep="/");
5962 03 Jun 20 nicklas 63     cat("<");
5962 03 Jun 20 nicklas 64     if (file.exists(modelFile))
5962 03 Jun 20 nicklas 65     {
5962 03 Jun 20 nicklas 66       load(modelFile);  # loaded ssp object must be named aims.gs 
5962 03 Jun 20 nicklas 67       cat(names(aims.gs$selected.pairs.list), sep=";");
5962 03 Jun 20 nicklas 68     }
5962 03 Jun 20 nicklas 69     cat(">\n");
5962 03 Jun 20 nicklas 70   }
5962 03 Jun 20 nicklas 71 }
5962 03 Jun 20 nicklas 72
5627 24 Sep 19 nicklas 73 # We need to add the "isnumeric" variable to the "aims.gs$one.vs.all.tsp" object 
5627 24 Sep 19 nicklas 74 # and set the value to TRUE for named "tables", otherwise we will get a failure: 
5627 24 Sep 19 nicklas 75 #   argument is of length zero
5627 24 Sep 19 nicklas 76 # inside e1071 package 'predict.naiveBayes' function 
5627 24 Sep 19 nicklas 77 # on a line with code:
5627 24 Sep 19 nicklas 78 #   if (object$isnumeric[i] != is.numeric(newdata[[i]]))
5627 24 Sep 19 nicklas 79 fixTheIsNumericProblem = function(aims.gs)
5627 24 Sep 19 nicklas 80 {
5627 24 Sep 19 nicklas 81   k <- aims.gs$k;
5627 24 Sep 19 nicklas 82   tmp <- aims.gs$one.vs.all.tsp[[k]];
5627 24 Sep 19 nicklas 83   aims.gs$one.vs.all.tsp[[k]]$isnumeric[names(tmp$tables)] <- TRUE;
5627 24 Sep 19 nicklas 84   return (aims.gs);
5627 24 Sep 19 nicklas 85 }
5627 24 Sep 19 nicklas 86
5627 24 Sep 19 nicklas 87
5627 24 Sep 19 nicklas 88 loadSources = function(sourceDir)
5627 24 Sep 19 nicklas 89 {
5627 24 Sep 19 nicklas 90   # load SSP_functions
5627 24 Sep 19 nicklas 91   source(paste(sourceDir, "SSP_functions.R", sep="/"))
5627 24 Sep 19 nicklas 92   
5627 24 Sep 19 nicklas 93   # load functions for reading tsv and for translating id to entrez
5627 24 Sep 19 nicklas 94   source(paste(sourceDir, "read_StringTie_tsv_FPKM_v1.R", sep="/"))
5627 24 Sep 19 nicklas 95   source(paste(sourceDir, "translate_id2entrez_v1.R", sep="/"))
5627 24 Sep 19 nicklas 96 }
5627 24 Sep 19 nicklas 97
5627 24 Sep 19 nicklas 98 loadLibraries = function()
5627 24 Sep 19 nicklas 99 {
5627 24 Sep 19 nicklas 100   library(caret);
5627 24 Sep 19 nicklas 101   library(gridExtra);
5627 24 Sep 19 nicklas 102   library(grid);
5627 24 Sep 19 nicklas 103   library(ggplot2);
5627 24 Sep 19 nicklas 104   library(reshape2);
5627 24 Sep 19 nicklas 105   require(e1071);
5627 24 Sep 19 nicklas 106 }