## ----pre,echo=FALSE,results='hide'--------------------------------------------
library(knitr)
opts_chunk$set(warning=FALSE,message=FALSE,cache=TRUE)

## ---- eval=FALSE--------------------------------------------------------------
#  if (!requireNamespace("BiocManager", quietly=TRUE))
#      install.packages("BiocManager")
#  BiocManager::install("FGNet")

## ---- echo=FALSE, message=FALSE-----------------------------------------------
library(FGNet)

## ---- eval=FALSE--------------------------------------------------------------
#  BiocManager::install(c("RGtk2", "RCurl",
#      "RDAVIDWebService", "gage", "topGO",
#      "GO.db", "reactome.db", "org.Sc.sgd.db"))

## ---- eval=FALSE--------------------------------------------------------------
#  library(FGNet)
#  FGNet_GUI()

## ---- eval=FALSE--------------------------------------------------------------
#  geneExpr <- c("YBL084C", "YDL008W", "YDR118W", "YDR301W", "YDR448W",
#                "YFR036W", "YGL240W", "YHR166C", "YKL022C", "YLR102C", "YLR115W",
#                "YLR127C", "YNL172W", "YOL149W", "YOR249C")
#  geneExpr <- setNames(c(rep(1,10),rep(-1,5)), geneExpr)
#  
#  FGNet_GUI(geneExpr)

## ---- eval=FALSE--------------------------------------------------------------
#  ?FGNet_report

## ---- eval=FALSE--------------------------------------------------------------
#  getwd()

## -----------------------------------------------------------------------------
genesYeast <- c("ADA2", "APC1", "APC11", "APC2", "APC4", "APC5", "APC9", "CDC16", 
                "CDC23", "CDC26", "CDC27", "CFT1", "CFT2", "DCP1", "DOC1", "FIP1", 
                "GCN5", "GLC7", "HFI1", "KEM1", "LSM1", "LSM2", "LSM3", "LSM4", 
                "LSM5", "LSM6", "LSM7", "LSM8", "MPE1", "NGG1", "PAP1", "PAT1", 
                "PFS2", "PTA1", "PTI1", "REF2", "RNA14", "RPN1", "RPN10", "RPN11", 
                "RPN13", "RPN2", "RPN3", "RPN5", "RPN6", "RPN8", "RPT1", "RPT3", 
                "RPT6", "SGF11", "SGF29", "SGF73", "SPT20", "SPT3", "SPT7", "SPT8", 
                "TRA1", "YSH1", "YTH1")

library(org.Sc.sgd.db)
geneLabels <- unlist(as.list(org.Sc.sgdGENENAME))
genesYeast <- sort(geneLabels[which(geneLabels %in% genesYeast)])

# Optional: Gene expression (1=UP, -1=DW)
genesYeastExpr <- setNames(c(rep(1,28), rep(-1,30)),genesYeast) 


## ---- eval=FALSE--------------------------------------------------------------
#  feaResults_David <- fea_david(names(genesYeast), geneLabels=genesYeast,
#                             email="example@email.com")
#  ?fea_david

## ---- eval=FALSE--------------------------------------------------------------
#  feaResults_topGO <- fea_topGO(genesYeast, geneIdType="GENENAME", organism="Sc")
#  ?fea_topGO

## ---- eval=FALSE--------------------------------------------------------------
#  jobID <- fea_gtLinker(geneList=genesYeast, organism="Sc")
#  ?fea_gtLinker

## ---- eval=FALSE--------------------------------------------------------------
#  jobID <- 3907019
#  feaResults_gtLinker <- fea_gtLinker_getResults(jobID=jobID, organism="Sc")

## ---- eval=FALSE--------------------------------------------------------------
#  library(gage)
#  data(gse16873)
#  
#  # Set gene labels? (they need to have unique identifiers)
#  library(org.Hs.eg.db)
#  geneSymbols <- select(org.Hs.eg.db,columns="SYMBOL",keytype="ENTREZID",
#      keys=rownames(gse16873))
#  
#  geneLabels <- geneSymbols$SYMBOL
#  names(geneLabels) <- geneSymbols$ENTREZID
#  head(geneLabels)
#  
#  # GAGE:
#  feaResults_gage <- fea_gage(eset=gse16873,
#                           refSamples=grep('HN',colnames(gse16873)),
#                           compSamples=grep('DCIS',colnames(gse16873)),
#                           geneLabels=geneLabels, annotations="REACTOME",
#                           geneIdType="ENTREZID", organism="Hs")
#  ?fea_gage

## ---- eval=FALSE--------------------------------------------------------------
#  ?format_results()

## ---- eval=FALSE--------------------------------------------------------------
#  feaResults_David <- format_david("http://david.abcc.ncifcrf.gov/data/download/90128.txt")
#  feaResults_gtLinker <- fea_gtLinker_getResults(jobID=3907019)

## ---- eval=FALSE--------------------------------------------------------------
#  FGNet_report(feaResults_David, geneExpr=genesYeastExpr)
#  FGNet_report(feaResults_topGO, geneExpr=genesYeastExpr)
#  FGNet_report(feaResults_gtLinker, geneExpr=genesYeastExpr)
#  FGNet_report(feaResults_gage)

## ---- eval=FALSE--------------------------------------------------------------
#  data(FEA_tools)
#  FEA_tools[,4:6]

## ---- eval=FALSE--------------------------------------------------------------
#  FGNet_report(feaResults_gtLinker, filterThreshold=0.3)

## ---- eval=FALSE--------------------------------------------------------------
#  ?FGNet_report

## ---- eval=FALSE--------------------------------------------------------------
#  feaResults <- feaResults_gtLinker
#  incidMat <- fea2incidMat(feaResults)
#  incidMat$metagroupsMatrix[1:5, 1:5]
#  incidMat_terms <- fea2incidMat(feaResults, key="Terms")
#  incidMat_terms$metagroupsMatrix[5:10, 1:5]

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(incidMat, geneExpr=genesYeastExpr,
#      plotTitleSub="Default gene view")

## ---- eval=FALSE--------------------------------------------------------------
#  getTerms(feaResults)[1]

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(incidMat_terms, plotOutput="dynamic")

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(incidMat_terms, plotType="bipartite",
#      plotTitleSub="Terms in several metagroups")

## ---- eval=FALSE--------------------------------------------------------------
#  jobID <- 1639610
#  feaAlzheimer <- fea_gtLinker_getResults(jobID=jobID, organism="Hs")

## ---- eval=FALSE--------------------------------------------------------------
#  names(feaAlzheimer)

## ---- results='hide', eval=FALSE----------------------------------------------
#  head(feaAlzheimer$metagroups)

## ---- eval=FALSE--------------------------------------------------------------
#  getTerms(feaAlzheimer)[3:4]

## ---- eval=FALSE--------------------------------------------------------------
#  incidMat <- fea2incidMat(feaAlzheimer)

## ---- eval=FALSE--------------------------------------------------------------
#  head(incidMat$metagroupsMatrix)
#  incidMat$gtSetsMatrix[1:5, 14:18]

## ---- eval=FALSE--------------------------------------------------------------
#  data(FEA_tools)
#  FEA_tools[,4:6]

## ---- eval=FALSE--------------------------------------------------------------
#  incidMatFiltered <- fea2incidMat(feaAlzheimer,
#      filterAttribute="Silhouette Width", filterOperator="<", filterThreshold=0.2)

## ---- eval=FALSE--------------------------------------------------------------
#  incidMatFiltered$filteredOut

## ---- eval=FALSE--------------------------------------------------------------
#  # (Fake expression data)
#  genesAlz <- rownames(incidMat$metagroupsMatrix)
#  genesAlzExpr <- setNames(c(rep(1,50), rep(-1,27)), genesAlz)

## ---- eval=FALSE--------------------------------------------------------------
#  fNw <- functionalNetwork(incidMatFiltered, geneExpr=genesAlzExpr, keepColors=FALSE, vLabelCex=0.5)

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(incidMatFiltered, geneExpr=genesAlzExpr, plotOutput="dynamic")
#  fNw <- functionalNetwork(incidMatFiltered, plotOutput="none")

## ---- eval=FALSE--------------------------------------------------------------
#  names(fNw)
#  names(fNw$iGraph)
#  library(igraph)
#  clNw <- fNw$iGraph$commonClusters
#  clNw

## ---- eval=FALSE--------------------------------------------------------------
#  vcount(clNw)
#  ecount(clNw)
#  sort(betweenness(clNw), decreasing=TRUE)[1:10]
#  igraph.to.graphNEL(clNw)

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(incidMatFiltered, plotOutput="dynamic")
#  # Modify the layout...
#  saveLayout <- tkplot.getcoords(1)   # tkp.id (ID of the tkplot window)
#  functionalNetwork(incidMatFiltered, vLayout=saveLayout)

## ---- eval=FALSE--------------------------------------------------------------
#  mgKeyTerm <- keywordsTerm(getTerms(feaAlzheimer),
#      nChar=100)[-c(as.numeric(incidMatFiltered$filteredOut))]
#  functionalNetwork(incidMatFiltered, plotType="bipartite", legendText=mgKeyTerm)

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(incidMatFiltered, geneExpr=genesAlzExpr, plotType="bipartite", keepAllNodes=TRUE,
#      plotTitleSub="Bipartite network will all nodes", legendText=mgKeyTerm, vLabelCex=0.5)

## ---- eval=FALSE--------------------------------------------------------------
#  incidMatTerms <- fea2incidMat(feaAlzheimer, key="Terms")

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(incidMatTerms, plotType="bipartite",
#      plotTitle="Terms in several metagroups")

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(incidMatTerms,  weighted=TRUE, plotOutput="dynamic")

## ---- eval=FALSE--------------------------------------------------------------
#  incidMatTerms <- fea2incidMat(feaAlzheimer$metagroups, clusterColumn="Metagroup",
#      key="Terms",
#      filterAttribute="Silhouette.Width", filterThreshold=0.2)
#  functionalNetwork(incidMatTerms, legendText=FALSE, plotOutput="dynamic")

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(incidMatTerms, legendText=FALSE)

## ---- fig.height=5, fig.width=10, eval=FALSE----------------------------------
#  incidMatTerms <- fea2incidMat(feaAlzheimer, key="Terms", removeFilteredGtl=FALSE)
#  par(mfrow=c(1,2))
#  functionalNetwork(incidMatTerms, vLabelCex=0.2,
#      plotTitle="Including filtered terms", legendText=FALSE)
#  functionalNetwork(incidMatTerms, plotType="bipartite", vLabelCex=0.4,
#      plotTitle="Including filtered terms")

## ---- eval=FALSE--------------------------------------------------------------
#  txtFile <- paste(file.path(system.file('examples', package='FGNet')), "DAVID_Yeast_raw.txt", sep=.Platform$file.sep)
#  feaResults_David <- format_david(txtFile, jobName="David_example", geneLabels=genesYeast)

## ---- eval=FALSE--------------------------------------------------------------
#  feaResults_David <- fea_david(names(genesYeast), email="...", geneLabels=genesYeast)

## ---- eval=FALSE--------------------------------------------------------------
#  gtSets <- feaResults_David$geneTermSets
#  gtSets <- gtSets[gtSets$Cluster %in% c(9),]
#  gtSets <- gtSets[gtSets$Pop.Hits<500,]

## ---- message=FALSE, eval=FALSE-----------------------------------------------
#  termsGenes <- t(fea2incidMat(gtSets, clusterColumn="Terms")$clustersMatrix)
#  library(R.utils)
#  rownames(termsGenes) <- sapply(strsplit(rownames(termsGenes), ":"),
#      function(x) capitalize(x[length(x)]))
#  termsGenes[1:5,1:5]

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(t(termsGenes), plotType="bipartite", keepAllNodes=TRUE,
#      legendPrefix="", plotTitle="Genes - Terms network", plotTitleSub="",
#      geneExpr=genesYeastExpr, plotExpression="Fill")

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(termsGenes, plotType="bipartite", keepAllNodes=TRUE,
#      legendPrefix="", plotTitle="Genes - Terms network", plotTitleSub="")

## ---- eval=FALSE--------------------------------------------------------------
#  incidMat <- fea2incidMat(feaResults_David)
#  functionalNetwork(incidMat)

## ---- eval=FALSE--------------------------------------------------------------
#  incidMatTerms <- fea2incidMat(feaResults_David, key="Terms")

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(incidMatTerms$clustersMatrix, plotOutput="dynamic",
#    weighted=TRUE, eColor="grey")

## ---- eval=FALSE--------------------------------------------------------------
#  functionalNetwork(incidMatTerms$clustersMatrix, plotType="bipartite",
#   plotTitle="Terms in several clusters")

## ---- eval=FALSE--------------------------------------------------------------
#  colnames(feaResults_David$clusters)

## ---- fig.height=5, fig.width=10, eval=FALSE----------------------------------
#  par(mfrow=c(1,2))
#  
#  # Highest enrichment score
#  filterProp <- as.numeric(as.character(feaResults_David$clusters$ClusterEnrichmentScore))
#  quantile(filterProp, c(0.10, 0.25, 0.5, 0.75, 0.9))
#  incidMatFiltered <- fea2incidMat(feaResults_David,
#      filterAttribute="ClusterEnrichmentScore",
#      filterOperator="<", filterThreshold=7.65)
#  functionalNetwork(incidMatFiltered, eColor=NA,
#      plotTitle="Highest enrichment score")
#  
#  # Lowest genes
#  quantile(as.numeric(as.character(feaResults_David$clusters$nGenes)),
#      c(0.10, 0.25, 0.5, 0.75, 0.9))
#  incidMatFiltered <- fea2incidMat(feaResults_David,
#   filterAttribute="nGenes", filterOperator=">", filterThreshold=20)
#  functionalNetwork(incidMatFiltered, plotTitle="Smallest clusters")

## ---- eval=FALSE--------------------------------------------------------------
#  keywordsTerm(getTerms(feaResults_David), nChar=100)
#  
#  keywords <- c("hydrolase")
#  selectedClusters <- sapply(getTerms(feaResults_David),
#      function(x)
#      any(grep(paste("(", paste(keywords, collapse="|") ,")",sep=""), tolower(x))))

## ---- eval=FALSE--------------------------------------------------------------
#  getTerms(feaResults_David)[selectedClusters]

## ---- eval=FALSE--------------------------------------------------------------
#  tmpFea <- feaResults_David
#  tmpFea$clusters <- cbind(tmpFea$clusters, keywords=selectedClusters)
#  incidMatSelection <- fea2incidMat(tmpFea,
#   filterAttribute="keywords", filterOperator="!=",filterThreshold="TRUE")
#  functionalNetwork(incidMatSelection, plotType="bipartite")

## ---- eval=FALSE--------------------------------------------------------------
#  distMat <- clustersDistance(incidMat)

## ---- echo=FALSE, results='hide', eval=FALSE----------------------------------
#  dev.off()

## ---- eval=FALSE--------------------------------------------------------------
#  selectedClusters <- rep(FALSE, nrow(feaResults_David$clusters))
#  selectedClusters[c(8,9,11)] <- TRUE
#  
#  tmpFea <- feaResults_David
#  tmpFea$clusters <- cbind(tmpFea$clusters, select=selectedClusters)
#  incidMatSelection <- fea2incidMat(tmpFea,
#    filterAttribute="select", filterOperator="!=",filterThreshold="TRUE")
#  functionalNetwork(incidMatSelection, eColor=NA)

## ---- eval=FALSE--------------------------------------------------------------
#  # Same analysis, setting overlap to 6:
#  feaResults_David_ov6 <- fea_david(names(genesYeast), geneLabels=genesYeast, email="example@email.com",
#      argsWS=c(overlap=6, initialSeed=3, finalSeed=3, linkage=0.5, kappa=50))

## ---- echo=FALSE--------------------------------------------------------------
txtFile <- paste(file.path(system.file('examples', package='FGNet')), "DAVID_Yeast_overl6_raw.txt", sep=.Platform$file.sep)
feaResults_David_ov6 <- format_david(txtFile, jobName="David_example", geneLabels=genesYeast)

## ---- eval=FALSE--------------------------------------------------------------
#  # Filter/select
#  sum(feaResults_David_ov6$geneTermSets$Pop.Hits < 100)
#  gtSets <- feaResults_David_ov6$geneTermSets[feaResults_David_ov6$geneTermSets$Pop.Hits < 100,]
#  # Save
#  write.table(gtSets, file="david_filteredGtsets.txt", sep="\t", col.names = TRUE, quote=FALSE)
#  # Load with "readGeneTermSets"
#  feaResults_filteredGtsets <- readGeneTermSets("david_filteredGtsets.txt", tool="DAVID")
#  # ...
#  functionalNetwork(fea2incidMat(feaResults_filteredGtsets), vLabelCex=0.5)

## ---- eval=FALSE--------------------------------------------------------------
#  # Yeast
#  library(org.Sc.sgd.db)
#  goGenesCountSc <- table(sapply(as.list(org.Sc.sgdGO2ORF), length))
#  barplot(goGenesCountSc, main="Number of genes annotated to GO term (Sc) ",
#      xlab="Number of genes", ylab="Number of GO terms")
#  
#  # Human
#  library(org.Hs.eg.db)
#  goGenesCountHs <- table(sapply(as.list(org.Hs.egGO2EG), length))
#  barplot(goGenesCountHs, main="Number of genes annotated to GO term (Human)",
#      xlab="Number of genes", ylab="Number of GO terms")

## ---- eval=FALSE--------------------------------------------------------------
#  incidMatFiltered <- fea2incidMat(feaAlzheimer,
#      filterAttribute="Silhouette Width", filterOperator="<", filterThreshold=0.2)
#  stats <- analyzeNetwork(incidMatFiltered)

## ---- eval=FALSE--------------------------------------------------------------
#  names(stats)
#  stats$transitivity

## ---- eval=FALSE--------------------------------------------------------------
#  head(stats$betweennessMatrix)

## ---- eval=FALSE--------------------------------------------------------------
#  stats$hubsList$Global

## ---- eval=FALSE--------------------------------------------------------------
#  stats$hubsList$"9"

## ---- eval=FALSE--------------------------------------------------------------
#  incidMat_metab <- fea2incidMat(feaResults_David)
#  analyzeNetwork(incidMat_metab)

## ---- eval=FALSE--------------------------------------------------------------
#  goIds <- getTerms(feaResults_David, returnValue="GO")[[7]]
#   plotGoAncestors(goIds, ontology="MF", nCharTerm=40, labelCex=0.8)

