5627 |
24 Sep 19 |
nicklas |
1 |
# |
5627 |
24 Sep 19 |
nicklas |
# Run multiple 'models' for a single 'gene.tsv' file |
5962 |
03 Jun 20 |
nicklas |
# Output is one result per line in the same order as the 'models' parameter. |
5962 |
03 Jun 20 |
nicklas |
# Format: <ResultClass;Class1=Score1;Class2=Score2;...;ClassN=ScoreN> |
5627 |
24 Sep 19 |
nicklas |
5 |
# |
5627 |
24 Sep 19 |
nicklas |
# tsvFile: Path to gene.tsv file from StringTie |
5627 |
24 Sep 19 |
nicklas |
# sourceDir: Path to directory with the R files that are needed (see loadSources()) |
5627 |
24 Sep 19 |
nicklas |
# modelsDir: Path to the directory with model RData files |
5627 |
24 Sep 19 |
nicklas |
# models: File names of RData files, each file represents a single SSP model |
5627 |
24 Sep 19 |
nicklas |
10 |
# |
5627 |
24 Sep 19 |
nicklas |
runSSP = function(tsvFile, sourceDir, modelsDir, models) |
5627 |
24 Sep 19 |
nicklas |
12 |
{ |
5627 |
24 Sep 19 |
nicklas |
13 |
|
5627 |
24 Sep 19 |
nicklas |
loadLibraries(); |
5627 |
24 Sep 19 |
nicklas |
loadSources(sourceDir); |
5627 |
24 Sep 19 |
nicklas |
16 |
|
5627 |
24 Sep 19 |
nicklas |
# load gene annotations |
5627 |
24 Sep 19 |
nicklas |
load(paste(sourceDir, "Gene.ID.ann.Rdata", sep="/")); |
5627 |
24 Sep 19 |
nicklas |
19 |
|
5627 |
24 Sep 19 |
nicklas |
# read tsv |
5627 |
24 Sep 19 |
nicklas |
mymatrix <- read_StringTie_tsv_FPKM(tsvFile, id=Gene.ID.ann$Gene.ID); |
5627 |
24 Sep 19 |
nicklas |
22 |
|
5627 |
24 Sep 19 |
nicklas |
# translate gene id |
5627 |
24 Sep 19 |
nicklas |
myid <- translate_id2entrez(id=rownames(mymatrix), ann=Gene.ID.ann, e=TRUE); |
5627 |
24 Sep 19 |
nicklas |
25 |
|
5627 |
24 Sep 19 |
nicklas |
# load ssp model |
5627 |
24 Sep 19 |
nicklas |
for (model in models) |
5627 |
24 Sep 19 |
nicklas |
28 |
{ |
5627 |
24 Sep 19 |
nicklas |
load(paste(modelsDir, model, sep="/")); # loaded ssp object must be named aims.gs |
5627 |
24 Sep 19 |
nicklas |
30 |
|
5627 |
24 Sep 19 |
nicklas |
aims.gs <- fixTheIsNumericProblem(aims.gs); |
5627 |
24 Sep 19 |
nicklas |
32 |
|
5627 |
24 Sep 19 |
nicklas |
# apply ssp model |
5627 |
24 Sep 19 |
nicklas |
resultslist <- applyAIMS(mymatrix, myid, aims.gs); |
5937 |
15 May 20 |
nicklas |
all.probs <- c(resultslist$all.probs[[1]]) |
5937 |
15 May 20 |
nicklas |
names(all.probs) <- colnames(resultslist$all.probs[[1]]) |
5937 |
15 May 20 |
nicklas |
37 |
|
5937 |
15 May 20 |
nicklas |
# print result to stdout (semicolon-separated list): |
5937 |
15 May 20 |
nicklas |
# result class;class1=score;class2=score;...;classN=score |
5937 |
15 May 20 |
nicklas |
cat("<", resultslist$cl[[1]], sep=""); |
5937 |
15 May 20 |
nicklas |
for (n in names(all.probs)) |
5937 |
15 May 20 |
nicklas |
42 |
{ |
5937 |
15 May 20 |
nicklas |
cat("; ", n, "=", all.probs[n], sep=""); |
5937 |
15 May 20 |
nicklas |
44 |
} |
5937 |
15 May 20 |
nicklas |
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 |
# Get information about the specified models |
5962 |
03 Jun 20 |
nicklas |
# Output is one result per line in the same order as the 'models' parameter. |
5962 |
03 Jun 20 |
nicklas |
# Format: <Class1;Class2;...;ClassN> |
5962 |
03 Jun 20 |
nicklas |
53 |
# |
5962 |
03 Jun 20 |
nicklas |
# models: File names of RData files, each file represents a single SSP model |
5962 |
03 Jun 20 |
nicklas |
getInfo = function(sourceDir, modelsDir, models) |
5962 |
03 Jun 20 |
nicklas |
56 |
{ |
5962 |
03 Jun 20 |
nicklas |
loadLibraries(); |
5962 |
03 Jun 20 |
nicklas |
loadSources(sourceDir); |
5962 |
03 Jun 20 |
nicklas |
59 |
|
5962 |
03 Jun 20 |
nicklas |
for (model in models) |
5962 |
03 Jun 20 |
nicklas |
61 |
{ |
5962 |
03 Jun 20 |
nicklas |
modelFile = paste(modelsDir, model, sep="/"); |
5962 |
03 Jun 20 |
nicklas |
cat("<"); |
5962 |
03 Jun 20 |
nicklas |
if (file.exists(modelFile)) |
5962 |
03 Jun 20 |
nicklas |
65 |
{ |
5962 |
03 Jun 20 |
nicklas |
load(modelFile); # loaded ssp object must be named aims.gs |
5962 |
03 Jun 20 |
nicklas |
cat(names(aims.gs$selected.pairs.list), sep=";"); |
5962 |
03 Jun 20 |
nicklas |
68 |
} |
5962 |
03 Jun 20 |
nicklas |
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 |
# We need to add the "isnumeric" variable to the "aims.gs$one.vs.all.tsp" object |
5627 |
24 Sep 19 |
nicklas |
# and set the value to TRUE for named "tables", otherwise we will get a failure: |
5627 |
24 Sep 19 |
nicklas |
# argument is of length zero |
5627 |
24 Sep 19 |
nicklas |
# inside e1071 package 'predict.naiveBayes' function |
5627 |
24 Sep 19 |
nicklas |
# on a line with code: |
5627 |
24 Sep 19 |
nicklas |
# if (object$isnumeric[i] != is.numeric(newdata[[i]])) |
5627 |
24 Sep 19 |
nicklas |
fixTheIsNumericProblem = function(aims.gs) |
5627 |
24 Sep 19 |
nicklas |
80 |
{ |
5627 |
24 Sep 19 |
nicklas |
k <- aims.gs$k; |
5627 |
24 Sep 19 |
nicklas |
tmp <- aims.gs$one.vs.all.tsp[[k]]; |
5627 |
24 Sep 19 |
nicklas |
aims.gs$one.vs.all.tsp[[k]]$isnumeric[names(tmp$tables)] <- TRUE; |
5627 |
24 Sep 19 |
nicklas |
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 |
loadSources = function(sourceDir) |
5627 |
24 Sep 19 |
nicklas |
89 |
{ |
5627 |
24 Sep 19 |
nicklas |
# load SSP_functions |
5627 |
24 Sep 19 |
nicklas |
source(paste(sourceDir, "SSP_functions.R", sep="/")) |
5627 |
24 Sep 19 |
nicklas |
92 |
|
5627 |
24 Sep 19 |
nicklas |
# load functions for reading tsv and for translating id to entrez |
5627 |
24 Sep 19 |
nicklas |
source(paste(sourceDir, "read_StringTie_tsv_FPKM_v1.R", sep="/")) |
5627 |
24 Sep 19 |
nicklas |
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 |
loadLibraries = function() |
5627 |
24 Sep 19 |
nicklas |
99 |
{ |
5627 |
24 Sep 19 |
nicklas |
library(caret); |
5627 |
24 Sep 19 |
nicklas |
library(gridExtra); |
5627 |
24 Sep 19 |
nicklas |
library(grid); |
5627 |
24 Sep 19 |
nicklas |
library(ggplot2); |
5627 |
24 Sep 19 |
nicklas |
library(reshape2); |
5627 |
24 Sep 19 |
nicklas |
require(e1071); |
5627 |
24 Sep 19 |
nicklas |
106 |
} |