Menu

Home

overview (1)
Federico Giorgi

Welcome to your wiki!

Aracne-AP has been written by Federico M. Giorgi and Alexander Lachmann, members of Andrea Califano's lab at Columbia University, New York.

Aracne-AP requires JAVA8 and it uses the Apache Commons libraries Math3.4.1 and Lang3.3.2

License information is available at the bottom of this document. Please read it!


Overview

ARACNe-AP (Algorithm for the Reconstruction of Accurate Cellular Networks with Adaptive Partitioning) is a complete overhaul of the first ARACNe implementation, originally published by Margolin and colleagues in BMC Bioinformatics in 2006.
ARACNe-AP is a command-line tool written in JAVA®. It requires a JAVA Running Environment version 8 or higher.

Input files needed to run ARACNe

See below for file format specification (or download the test files from our repository)
1. Gene expression matrix.
2. List of regulators (e.g. Transcription Factors)

Steps required to run ARACNe

  1. Calculate a threshold for Mutual Information (this needs to be done only once for each dataset)
  2. Run ARACNe on bootstraps of the input matrix
  3. Consolidate, i.e. combine the bootstraps into a final network file

Optional ways to run ARACNe

  1. Removing DPI (Data Process Inequality) will preserve every edge that passes the Mutual Information threshold.
  2. ARACNe by default operates on a bootstrapped version of the input matrix. It is possible to turn this feature off.
  3. During the consolidation step, a Bonferroni correction is applied to the p-values obtained from the Poisson distribution used to determine the significance of each edge according to their appearance in different bootstraps. It is possible to turn this correction off, with the result of having a slightly bigger output network.

Output of ARACNe-AP

Apart from the individual bootstraps, the consolidation step of ARACNe-AP will produce a file called network.txt in the output folder provided by the user. This file shows every significant interaction in four columns
1. The regulator.
2. The target.
3. The MI (Mutual Information) of the pair.
4. The pvalue of the pair (assessed during the consolidation step by integrating the bootstraps).


Input file format

Gene lists

A text file, containing one gene symbol per line, e.g.
g165
g196
g257
g367
g401
g1390

Dataset

A text file, tab separated, with genes on rows and samples on columns
gene Sample1 Sample2 Sample3
g1 1.8 5.2 4.1
g2 5.7 8.3 2.0
g3 6.2 3.1 9.2
g4 7.2 9.1 0.6


Parameters

-e is the expression file
-d is an optional expression file for the targets (meaning you can specify an expression file for tfs, and one for targets, with the same sample names. This is for aracne plus)
-t is the TF list
-o is the output folder
--consolidate is telling java to run aracne in consolidate mode (that is, you point it to a directory with bootstraps, and they will be consolidated)
--calculateThreshold is telling Java to run it in threshold mode
-p is the p-value threshold for the MI to be significant (1E-8 usually)
--consolidatepvalue is the p-value threshold for the Poisson test of edge significance in multi-bootstrap mode (if omitted, it is set to 0.05)
-s is the optional seed, to make the threshold mode and the bootstrap reproducible
--threads is the number of threads (it is used only in standard mode, i.e. bootstrap)
--nodpi tells ARACNE not to run DPI
--nobootstrap tells ARACNE not to do bootstrapping
--nobonferroni removes the Bonferroni correction


Examples

Note: the examples have been written based on the provided test sets: matrix.txt (the gene expression matrix) and tfs.txt (the list of regulators). Also, example 3 (the running of 100 bootstraps) is written for a UNIX shell, which allows “for loops” as a useful method to run 100 bootstraps with a controlled seed.

Example 1 – calculate threshold with a fixed seed

java -Xmx5G -jar Aracne.jar -e matrix.txt  -o outputFolder --tfs tfs.txt --pvalue 1E-8 --seed 1 -–calculateThreshold

Example 2 – run ARACNe on a single bootstrap

java -Xmx5G -jar Aracne.jar -e matrix.txt  -o outputFolder --tfs tfs.txt --pvalue 1E-8 --seed 1

Example 3 – run 100 reproducible bootstraps

UNIX loop:

for i in {1..100}
do
java -Xmx5G -jar Aracne.jar -e matrix.txt  -o outputFolder --tfs tfs.txt --pvalue 1E-8 --seed $i
done

Windows loop:

for /l %i in (1, 1, 100) do java -Xmx5G -jar Aracne.jar -e matrix.txt  -o outputFolder --tfs tfs.txt --pvalue 1E-8 --seed %i

Example 4 – consolidate bootstraps in the output folder

java -Xmx5G -jar Aracne.jar -o outputFolder --consolidate

Example 5 – run a single ARACNE with no bootstrap and no DPI

java -Xmx5G -jar Aracne.jar -e matrix.txt  -o outputFolder --tfs tfs.txt --pvalue 1E-8 --seed 1 --nobootstrap --noDPI

Example 6 – consolidate bootstraps without Bonferroni correction

java -Xmx5G -jar Aracne.jar -o outputFolder –-consolidate --nobonferroni

License

This software evaluation license agreement ("License") is between The Trustees of Columbia University in the City of New York, ("University") and You (as defined below).

  1. Definitions

a. Documentation shall mean all manuals, user documentation, and other related materials, if any, pertaining to the Program which are furnished to You by University in connection with the Program.

b. Program shall mean the ARACNe-AP software computer program developed in the laboratory of Dr. Andrea Califano by Dr. Federico M. Giorgi and Dr. Alexander Lachmann and supplied to You pursuant to this Agreement.

c. "You" (or "Your") means an individual or legal entity exercising rights under, and complying with all of the terms of, this License. If "You" are an individual, You hereby represent and warrant to Columbia that You are an employee of a non-profit or a not-for-profit entity. If "You" are a legal entity, You hereby represent and warrant to Columbia that You are a non-profit or not-for-profit entity, and “You” includes any entity that controls, is controlled by, or is under common control with You.

  1. Grant of Rights

a. The Program and Documentation is owned by the University and University retains all right, title, and interest in and to the Program. You shall not assert any right, title or interest in the Program and/or Documentation.

b. University hereby grants, and You accept, subject to the terms and conditions of this License, a limited nonexclusive, nontransferable and non-assignable license to use the Program for non-commercial, academic or educational research purposes only.

c. You agree that You will only use the Program and Documentation for non-commercial internal academic or educational research purposes only. You will not (i) reproduce or copy the Program (ii) use, or cause or permit the use of, the Program in whole or in part for any purpose other than as permitted under this License; (iii) distribute, sell, lease, license or otherwise make the Program available to a third party outside Your organization; or (iv) reverse engineer, decompile, or disassemble the Program.

d. You agree that the Program and Documentation are University's confidential information and shall treat and handle confidential information in accordance with the terms of this Agreement. You further acknowledge that the Program in any form provided by University hereunder are the sole property of University. You shall not have any right, title, or interest to any such Program or copies thereof except as provided in this Agreement. All rights not specifically granted herein are reserved to University. Except as expressly provided under this Section 2, no right or license is granted (expressly or by implication) by University to You under any tangible or intellectual property, materials, patent, patent application, trademark, copyright, trade secret, know-how, technical information, data or other proprietary right.

e. The term of this License shall commence on the date on which You commence use of the Program until the date that You return or cease use of the Program or as specified in Section 6 below.

f. Prior to any commercial use, lease, distribution, transfer, sublicense or sale of any product utilizing, derived from, or incorporating, in whole or any part, the Program and/or Documentation hereunder, You must obtain a license permitting commercial use of the Program and Documentation from University or if applicable, the University’s exclusive licensee. Any such use, lease, distribution, transfer, sublicense or sale without a written license from University or University’s exclusive licensee permitting such commercial use, distribution, sublicense or sale shall be VOID AND EXPRESSLY PROHIBITED.

To negotiate such license agreement, contact:

Science and Technology Ventures Columbia University 80 Claremont Avenue #4F New York, NY 10027 (212) 854-8444 stvinfo@columbia.edu

  1. No Obligation to Support. It is understood and agreed that University will provide no maintenance or installation services of any kind, error corrections, bug fixes, patches, updates or other modifications hereunder. In the event that University, at its sole option, provides updates, error corrections, bug fixes, patches or other modifications to the Program to You ("Software Updates"), the Software Updates will be considered part of the Program, and subject to the terms and conditions of this License.

  2. NO WARRANTY. YOU ACKNOWLEDGE AND ACCEPT THAT COLUMBIA UNIVERSITY IS PROVIDING THE PROGRAM ON AN “AS IS” BASIS. COLUMBIA UNIVERSITY EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES CONCERNING THIS PROGRAM AND DOCUMENTATION, INCLUDING ANY WARRANTIES OF NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OF A THIRD PARTY, MERCHANTABILITY AND/OR FITNESS FOR ANY PARTICULAR PURPOSE, AND WARRANTIES OF PERFORMANCE, AND ANY WARRANTY THAT MIGHT OTHERWISE ARISE FROM COURSE OF DEALING OR USAGE OF TRADE. NO WARRANTY IS EITHER EXPRESS OR IMPLIED WITH RESPECT TO THE USE OF THE PROGRAM OR DOCUMENTATION. Under no circumstances shall Columbia University, any of its trustees, officers, faculty members, students, employees or agents be liable for incidental, special, indirect, direct or consequential damages or loss of profits, interruption of business, or related expenses which may arise from Your use of Program and/or Documentation, including but not limited to those resulting from defects in Program and/or Documentation, or loss or inaccuracy of data of any kind.

  3. Confidentiality

a. You acknowledge that the Program and Documentation are proprietary and confidential to the University. You agree to protect the Program, Documentation and any feedback provided by You, if applicable, from unauthorized disclosure, use, or release and to treat the Program and feedback with at least the same level of care as You use to protect Your own proprietary computer programs and/or confidential information, but in no event less than a reasonable standard of care.

b. The obligations of this Section 5 shall not apply to such confidential information that the receiving party can demonstrate: (a) was known publicly or was known by the receiving party prior to receipt thereof by the disclosing party; (b) was or becomes a matter of public information or publicly available through no act or failure to act on part of the receiving party; (c) is acquired by the receiving party from a third party entitled to disclose it; or (e) the receiving party discovers, develops independently without reference to or use of such confidential information, as evidenced by written documentation.

  1. Termination. This License is effective until terminated, as provided herein, or until the expiration of the time period specified in Section 2 above. You may terminate this Agreement at any time by ceasing use of the Program. This Agreement, and the rights granted hereunder, will terminate automatically, and without any further notice from or action by University, if You fail to comply with any obligation set forth herein. Upon termination, You must immediately cease use of the Program. Sections 2(a), 2(d), 2(e), 2(f), 4-7 and 9-12 shall survive expiration or termination of this Agreement.

  2. Use of Name. You will not use the name of Columbia University or the name of any faculty member, trustee, other employee or student of Columbia University for any purpose whatsoever without University's prior written consent.

  3. Nonassignability. You shall not assign or transfer this License or its rights hereunder without the prior written consent of University. Any attempt to assign without compliance with this provision shall be void.

  4. Governing Law; Jurisdiction and Venue. The validity, interpretation, construction and performance of this Agreement shall be governed by the laws of the State of New York, without reference to the conflict of law principles of any jurisdiction. The New York state courts of New York County, New York (or, if there is exclusive federal jurisdiction, the United States District Court for the Southern District of New York) shall have exclusive jurisdiction and venue over any dispute arising out of this Agreement, and You hereby consent to the jurisdiction of such courts.

  5. Export Requirements. The Program, Documentation and all related technical information or materials are subject to export controls and U.S. Government export regulations. You will comply strictly with all legal requirements established under these controls and will not, in connection with its limited evaluation rights hereunder, export, re-export, divert, transfer or disclose, directly or indirectly the Program, Documentation and any related technical information or materials without the prior approval of the U.S. Department of Commerce.

  6. Severability. If any provision of this License shall be held by a court of competent jurisdiction to be illegal, invalid or unenforceable, the remaining provisions shall remain in full force and effect.

  7. Miscellaneous. This License and its exhibits contain the entire understanding and agreement between the parties respecting the subject matter hereof. This License may not be supplemented, modified, amended, released or discharged except by an instrument in writing signed by each party's duly authorized representative. All captions and headings in this License are for purposes of convenience only and shall not affect the construction or interpretation of any of its provisions. Any waiver by either party of any default or breach hereunder shall not constitute a waiver of any provision of this License or of any subsequent default or breach of the same or a different kind. This License may be executed in counterparts and signatures sent by facsimile transmission shall be binding as evidence of acceptance of the terms of this License by such signatory party.

Project Members:


Discussion

  • Juan Manuel Luque

    Dear Federico,Alexander and Aracne users in general:

    Please, let me I write you about Aracne-geWorkbench software because I don't know whom I must ask or write to solve my problems with this software. I am a new Aracne-geWorkbench user and I am trying to do an Aracne analysis from geWorkbench platform with a list of 368 genes I interest to study and visualize graphically the possible networks between these genes.But once I load my list of genes and my list of hub genes I see the next message/error on the screen:
    "Exception happened in aracne computation: org.geworkbench.components.aracne.AracneException: There is no microarray name provided".

    And I don t know where (what field) I must to fill or correct the microarray name, and so finally to get the Aracne analysis for my list of genes.
    Please if you could help me or tell me whom I should write or ask to get help and solve this problem ,I'll thank you very much.
    Best regards
    Juan Manuel Luque

     
    • Federico Giorgi

      Federico Giorgi - 2018-05-20

      Hi Juan!
      Aracne-geWrokbench is not maintained by us, you should contact Aristidis Floratos at Columbia University for it. As an alternative, you can use our Aracne-AP, which doesn't require a microarray name to run!

       
      • Juan Manuel Luque

        Thank you very much

        Juan Manuel

        ----Original Message----
        From: fgiorgi@users.sourceforge.net
        Date: 20/05/2018 12:26
        To: "[aracne-ap:wiki] "Home@wiki.aracne-ap.p.re.sourceforge.net
        Subj: [aracne-ap:wiki] Re: Discussion for Home page

        Hi Juan!
        Aracne-geWrokbench is not maintained by us, you should contact
        Aristidis Floratos at Columbia University for it. As an alternative,
        you can use our Aracne-AP, which doesn't require a microarray name to
        run!


        Sent from sourceforge.net because you indicated interest in https://sourceforge.net/p/aracne-ap/wiki/Home/

        To unsubscribe from further messages, please visit https://sourceforge.net/auth/subscriptions/

         
  • Juan Manuel Luque

    Hi Federico,
    I am interested to use AracneAP.I have downloaded it, but I can´t open the file downloaded.Please, could you help me to install AracneAP in my computer?.Could you send me the whole steps to install AracneAP in my computer (Windows 7 and also Ubuntu-16 in other computer)?If I have installed Aracne-geWorkbench do I need to install AracneAP too?
    Waiting for your answer, please, thank you very much for your help and best regards.
    Juan Manuel Luque

     
    • Federico Giorgi

      Federico Giorgi - 2018-09-27

      Hi Juan!
      This implementation of aracne is to be run directly as a jar file from the command line. E.g. java -jar Aracne.jar
      Try to run some of the examples in the wiki from the command line (from the Windows command prompt or the Ubuntu terminal, for example).

       
  • Xiaoyong Fu

    Xiaoyong Fu - 2020-06-19

    Hello, I am trying to run: java -Xmx5G -jar Aracne.jar ... in my mac terminal, but got the error:
    Exception in thread "main" java.lang.NoClassDefFoundError: jargs/gnu/CmdLineParser$OptionException
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:427)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)
    Caused by: java.lang.ClassNotFoundException: jargs.gnu.CmdLineParser$OptionException
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:435)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 3 more
    I have the expression file and gene list and the Aracne.jar under the same folder. Please help me to address this issue.
    Thanks a lot!
    Xiaoyong

     
    • Claire Rioualen

      Claire Rioualen - 2020-08-07

      Hi, I'm hitting the same issue, were you able to solve it?

       
  • Xiaoyong Fu

    Xiaoyong Fu - 2020-08-07

    I think I ended up using a HPC cluster to run Java and it works. It may need more computering power which can not be afforded by my personal Mac. thanks.

     
  • Eric Medina

    Eric Medina - 2022-09-15

    Hi, thank you for your work building ARACNe-AP. I installed the software on my local machine using the command line and was able to run the program using the matrix.txt and tfs.txt files as an example and generated the network.txt file. I would like to ultimately use VIPER in R to predict protein activity but the input to VIPER is the .adj output file from ARACNe along with the expression matrix used to generate the .adj file. I am having trouble figuring out how to generate the .adj file. How would I go about doing this? Thank you for your time.

     
    • Federico Giorgi

      Federico Giorgi - 2022-10-12

      Hi there! Thanks for using ARACNe-AP. To convert the ARACNe-AP into an R object, this is what we used to do. Assuming all the outputs of ARACNe-AP are saved as files 3col.gz

      Loading code:

      library(viper)
      library(mixtools)
      

      Necessary functions:

      aracne2regulon<-function(afile, eset) {
          dset <- eset
          annot <- rownames(eset)
          names(annot) <- rownames(eset)
          rm(eset)
      
          tmp <- as.matrix(read.delim(afile,as.is=TRUE,header=TRUE)[,1:3])
          aracne <- data.frame(tf=tmp[, 1], target=tmp[, 2], mi=as.numeric(tmp[, 3])/max(as.numeric(tmp[, 3])))
      
          tmp <- aracne[!is.na(aracne$mi), ]
          tmp <- tmp[rowSums(matrix(as.matrix(tmp[, 1:2]) %in% rownames(dset), nrow(tmp), 2))==2, ]
          aracne <- tapply(1:nrow(tmp), tmp$tf, function(pos, tmp) {
              tfmode <- rep(0, length(pos))
              names(tfmode) <- tmp$target[pos]
              list(tfmode=tfmode, likelihood=tmp$mi[pos])
          }, tmp=tmp)
          names(aracne) <- levels(tmp$tf)
          aracne <- TFmode1(aracne, dset)
          rm(dset)
      
          # removing missing data from the aracne regulon
          aracne <- aracne[names(aracne) != "NA"]
          aracne <- lapply(aracne, function(x) {
              filtro <- !(names(x$tfmode)=="NA" | is.na(x$tfmode) | is.na(x$likelihood))
              x$tfmode <- x$tfmode[filtro]
              x$likelihood <- x$likelihood[filtro]
              return(x)
          })
          aracne <- aracne[sapply(aracne, function(x) length(names(x$tfmode)))>0]
          regul <- TFscore(aracne)
          class(regul) <- "regulon"
          return(regul)
      }
      
      TFmode1 <- function (regulon, expset, method = "spearman") {
          expset <- filterCV(expset)
          regulon <- updateRegulon(regulon)
          regulon <- regulon[names(regulon) %in% rownames(expset)]
          regulon <- lapply(regulon, function(x, genes) {
              filtro <- names(x$tfmode) %in% genes
              x$tfmode <- x$tfmode[filtro]
              if (length(x$likelihood) == length(filtro)) 
                  x$likelihood <- x$likelihood[filtro]
              return(x)
          }, genes = rownames(expset))
          tf <- unique(names(regulon))
          tg <- unique(unlist(lapply(regulon, function(x) names(x$tfmode)), use.names = FALSE))
          cmat <- cor(t(expset[rownames(expset) %in% tf, ]), t(expset[rownames(expset) %in% tg, ]), method = method)
          reg <- lapply(1:length(regulon), function(i, regulon, cmat) {
              tfscore <- cmat[which(rownames(cmat) == names(regulon)[i]), match(names(regulon[[i]]$tfmode), colnames(cmat))]
              list(tfmode = tfscore, likelihood = regulon[[i]]$likelihood)
          }, regulon = regulon, cmat = cmat)
          names(reg) <- names(regulon)
          return(reg)
      }
      
      TFmode2 <- function (regulon, expset, regexpset, method = "spearman") {
          tf <- unique(names(regulon))
          tg <- unique(unlist(lapply(regulon, function(x) names(x$tfmode)), use.names = FALSE))
          cmat <- cor(t(regexpset[rownames(regexpset) %in% tf, ]), t(expset[rownames(expset) %in% tg, ]), method = method)
          reg <- lapply(1:length(regulon), function(i, regulon, cmat) {
              tfscore <- cmat[which(rownames(cmat) == names(regulon)[i]), match(names(regulon[[i]]$tfmode), colnames(cmat))]
              list(tfmode = tfscore, likelihood = regulon[[i]]$likelihood)
          }, regulon = regulon, cmat = cmat)
          names(reg) <- names(regulon)
          return(reg)
      }
      
      TFscore <- function (regul, mu = NULL, sigma = NULL, verbose=TRUE) {
          if (length(mu) == 3 & length(sigma) == 3)
              fit <- list(mu = mu, sigma = sigma)
          else {
              tmp <- unlist(lapply(regul, function(x) x$tfmode), use.names = FALSE)
              fit <- list(mu = c(-0.5, 0, 0.5), sigma = c(0.15, 0.25, 0.15), lambda = c(0.2, 0.4, 0.4), all.loglik = rep(0, 1001))
              count <- 0
              while (length(fit$all.loglik) > 1000 & count < 3) {
                  fit <- normalmixEM(tmp, mu = fit$mu, sigma = fit$sigma, lambda = fit$lambda, mean.constr = c(NA, 0, NA), maxit = 1000, verb = FALSE)
                  count <- count + 1
              }
          }
          if (verbose) message("mu: ", paste(fit$mu, collapse = ", "), ". sigma: ", paste(fit$sigma, collapse = ", "))
          regul <- lapply(regul, function(x, fit) {
              g2 <- pnorm(x$tfmode, fit$mu[3], fit$sigma[3], lower.tail = TRUE)
              g1 <- pnorm(x$tfmode, fit$mu[1], fit$sigma[1], lower.tail = FALSE)
              g0 <- pnorm(x$tfmode, fit$mu[2], fit$sigma[2], lower.tail = FALSE)
              g00 <- pnorm(x$tfmode, fit$mu[2], fit$sigma[2], lower.tail = TRUE)
              x$tfmode <- g2/(g1 + g0 + g2) * (x$tfmode >= 0) - g1/(g1 + g00 + g2) * (x$tfmode < 0)
              return(x)
          }, fit = fit)
          return(regul)
      }
      
      updateRegulon <- function(regul) {
          if (is.null(names(regul[[1]]))) {
              tmp <- lapply(regul, function(x) {
                  tmp <- rep(0, length(x))
                  names(tmp) <- x
                  list(tfmode=tmp, likelihood=rep(1, length(tmp)))
              })
              return(tmp)
          }
          if (names(regul[[1]])[1]=="tfmode") return(regul)
          return(lapply(regul, function(x) list(tfmode=x, likelihood=rep(1, length(x)))))
      }
      

      Actual execution. You need 1) the network as network.3col.gz and 2) the expression matrix in R format expmat.rda from which you generated the network

      load("expmat.rda")
      regul<-aracne2regulon(afile="network.3col.gz",eset=expmat)
      class(regul)<-"regulon"
      save(regul,file="network.rda")
      

      Hope this helps. Let me know if it works!

       

Log in to post a comment.