R/computeBICcurve.R

Defines functions computeBICcurve

Documented in computeBICcurve

#' This Function Computes a Network BIC Curve
#' 
#' (?)
#' 
#' @param network A network object 
#' @param exprData Expression data matrix
#' @param maxEdges Optional. (Default = NULL)
#' @param exact Optional.  (Default = NULL)
#' 
#' @return  A list object containing values of a sparse network, the best fit
#' minimum BIC, and 
#' @importFrom magrittr %>%
#' @export
#' 
computeBICcurve <- function(network, exprData, maxEdges=NULL, exact=NULL){
  #library(dplyr)
  if(is.null(maxEdges)){
    maxEdges <- round((nrow(exprData)*ncol(exprData))/20)
  }
  maxEdges <- min(maxEdges,round((nrow(exprData)*ncol(exprData))/20)) 
  cat('maxEdges:',maxEdges,'\n')
  foo <- data.matrix(network)[which(upper.tri(data.matrix(network)))]
  cat('organize foo\n')
  foo <- abs(foo)
  cat('set lower triangular to 0\n')
  network[(lower.tri(network))==TRUE]<-0
  cat('set diagonal to zero\n')
  diag(network) <- 0
 
  thresVal <- sort(foo,decreasing=T)[min(maxEdges,length(foo))]
  cat('thresVal:',thresVal,'\n')
  #add in check for zero edges
  if(thresVal==0){
    thresVal <- min(foo[which(foo>0)])
  }
  cat('network absolution\n')
  network <- abs(network)
  cat('get edges\n')
  edgeList <- which(network >=thresVal,T)
  edval <- rep(0,nrow(edgeList))

  for (i in 1:nrow(edgeList)){
    if(i%%1000==0){
      cat(edval[i],'\n')
    }
    edval[i] <- network[edgeList[i,1],edgeList[i,2]]
  }

  edgeList <- cbind(edgeList,edval)
  colnames(edgeList) <- c('node1','node2','weight')
  rownames(edgeList) <- paste0('e',1:nrow(edgeList))
  edgeList <- data.frame(edgeList,stringsAsFactors=F)
  edgeList <- dplyr::arrange(edgeList,dplyr::desc(.data$weight))
  print(edgeList[1:5,])
  bicPath <- metanetwork::covarianceSelectionMBPath(data.matrix(exprData), rankedEdges=edgeList[,1:2], start=1)
  bicPath2 <- NA;

  #if(!is.null(exact)){
  #  bicPath2 <- metanetwork::covarianceSelectionPath(cor(exprData),edgeList[,1:2],nrow(exprData)*ncol(exprData),nrow(exprData))
  #}
  #library(Matrix)
  network <- network>=edgeList$weight[which.min(bicPath$bic)]
  return(list(network=Matrix::Matrix(network,sparse=T),bicMin=min(bicPath$bic),bicPath=bicPath$bic))
}
blogsdon/metanetwork documentation built on April 27, 2022, 3:53 p.m.