Skip to content
Skillpedia
Machine learning51k · #1834

arboreto

Lets your agent discover how genes regulate each other from expression data. It's useful for understanding gene relationships in biological studies.

What it does

This tool helps discover which genes might control the expression of other genes, based on gene expression data. It creates a ranked list of potential gene connections.

When to use it

  • ✓When you have gene expression data and want to know which genes might be regulating others.
  • ✓To identify potential gene regulatory networks in biological samples.
  • ✓When comparing different gene network analysis methods.

Example of what to ask your AI

“Discover potential gene connections from my expression data.”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/K-Dense-AI/scientific-agent-skills/blob/main/skills/arboreto/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/K-Dense-AI/scientific-agent-skills/blob/main/skills/arboreto/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The tool analyzes your gene expression data and uses algorithms (like GRNBoost2 or GENIE3) to predict which genes (regulators) might influence the expression of other genes (targets). It returns a ranked list of these potential influences.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add K-Dense-AI/scientific-agent-skills --skill arboreto

Or download just the file:

curl -L https://raw.githubusercontent.com/K-Dense-AI/scientific-agent-skills/main/skills/arboreto/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Arboreto

When to use

Use Arboreto to rank candidate regulator-target associations from expression measurements. GRNBoost2 fits stochastic gradient boosting regressions; GENIE3 fits random forests. Each target is predicted from candidate regulators, excluding itself. These are observational predictive associations, not proof of direct binding, activation/repression, or causal regulation.

The latest PyPI release checked is 0.1.6 (2021-02-09). Read the Docs still labels its documentation 0.1.5; the current GitHub source contains fixes that are not in the PyPI wheel. Do not assume a successful unpinned installation can run inference. See compatibility and distribution details.

Installation and compatibility

The following exact stack passed dense and CSC-sparse GRNBoost2, dense GENIE3, custom GBM/RF, and wrapper smoke tests on macOS arm64 with Python 3.11.11:

uv venv --python 3.11 .venv-arboreto
uv pip install --python .venv-arboreto/bin/python \
  'arboreto==0.1.6' 'dask[complete]==2024.7.1' 'distributed==2024.7.1' \
  'numpy==1.26.4' 'pandas==2.2.3' 'scikit-learn==1.5.2' 'scipy==1.13.1'

This is a bounded compatibility recipe, not a claim that current releases of all dependencies work. PyPI Arboreto builds an empty metadata graph that the newer Dask dataframe implementation rejects. For this pinned Dask version, select its legacy dataframe backend before importing Arboreto or dask.dataframe:

import dask
dask.config.set({"dataframe.query-planning": False})
from arboreto.algo import grnboost2, genie3

The bundled wrapper does this for Dask 2024.7.1. Restart an existing notebook kernel if it has already imported the newer dataframe backend. Sparse targets also use .A inside Arboreto 0.1.6; this attribute was removed in SciPy 1.14. Keep the tested SciPy pin for sparse inference. No monkeypatch to site-packages is required by this recipe.

Workflow

  1. Select biologically comparable cells/samples; document normalization, filtering, batch handling, organism, identifier namespace, and expression layer.
  2. Prepare rows = observations, columns = genes. Exclude sample IDs from expression values. Require unique gene names, numeric finite values, and a TF list with a nonempty overlap. All-zero/constant genes provide no useful targets.
  3. Choose GRNBoost2 for an efficient starting analysis, GENIE3 for method comparison, or diy for explicit regressor settings. See algorithms.
  4. Run a small subset first in the pinned environment, then scale worker counts to available memory. Keep the if __name__ == "__main__": guard in process-based scripts.
  5. Inspect worker warnings and target coverage, save the full ranked network, and assess stability across seeds and resampled observations before prioritizing edges.

Run the bundled wrapper

From this skill directory, with a TSV containing gene headers and numeric rows:

.venv-arboreto/bin/python scripts/basic_grn_inference.py expression_data.tsv network.tsv \
  --tf-file tfs.txt --seed 777 --workers 2 --limit 5000

Add --index-col 0 only if the first column contains cell/sample identifiers. The wrapper rejects duplicate headers before pandas can rename them, nonnumeric or nonfinite values, empty TF overlap, invalid limits, and wholly empty results. It reports TF overlap and uses a fresh bounded Dask client that closes on error. The default is one worker; increase it after a successful pilot. Without a TF file, all genes are candidate regulators, even though the output column is named TF.

Output is a headerless TSV in TF, target, importance order. For downstream consumers that require column headers (including pySCENIC adjacency loading), write a separate copy with header=True rather than assuming every tool accepts the headerless upstream example format.

Minimal Python example

This synthetic example checks execution and output structure; it is not a biological benchmark. The same calls were tested with a 32-observation, four-gene fixture.

import dask
dask.config.set({"dataframe.query-planning": False})
import numpy as np
import pandas as pd
from arboreto.algo import grnboost2
from distributed import Client, LocalCluster

if __name__ == "__main__":
    rng = np.random.default_rng(123)
    values = rng.normal(size=(32, 4))
    values[:, 2] = 3 * values[:, 0] + rng.normal(scale=0.1, size=32)

…
FAQ

What are 'regulators' and 'targets'?

Regulators are genes that can control the expression of other genes. Targets are the genes whose expression is controlled.

Does the generated list prove one gene controls another?

No, the list shows predictive associations based on the data. It suggests potential connections but doesn't prove causality or direct binding.

What's the difference between GRNBoost2 and GENIE3?

These are two different algorithms the tool can use. GRNBoost2 uses 'gradient boosting' and GENIE3 uses 'random forests'. They might produce slightly different results and are useful for comparison.

Details

Original description by the author

Infers candidate gene regulatory networks from bulk or single-cell expression data using AertsLab Arboreto GRNBoost2 and GENIE3. Use for transcription factor-target association ranking, compatible Dask execution, sparse expression inputs, and network stability checks.

repo: K-Dense-AI/scientific-agent-skills

Popularity

GitHub stars
51k
Ranking position
#1834
License
MIT
Updated
10/15/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills