Skip to main content
Ctrl+K

AlphaGenome

  • Installation
  • Getting started
  • Tutorials
    • Choosing a condition
    • Selecting a genomic region
    • Predicting tracks for an interval or sequence
    • Predicting a variant
    • Scoring a variant
    • Plotting predictions
    • Conditioning on your own single-cell data
    • Working with imputed tracks
    • Analyzing a splicing variant
    • Analyzing haplotypes
    • Highlighting important regions with ISM
    • Making mouse predictions
    • AlphaGenome 1 quick start (legacy)
    • Deriving PSI values from splice junctions
  • User guide
    • Key objects
    • Model output metadata
    • Navigating imputed tracks
    • How variant scoring works
    • Visualization basics
    • Migrating from AlphaGenome 1
  • Vignettes
    • Fine-mapping the ETS2 locus
    • Dissecting non-coding TAL1 mutations in T-ALL
    • Mapping lineage-specific enhancers at the BCL11A locus
  • API reference
    • Models
      • AlphaGenome 2
        • create
        • ModelVersion
        • Organism
        • validate_sequence_length
        • DnaClient
          • encode_cells
          • observed_metadata
          • predict_interval
          • predict_interval_gradients
          • predict_interval_gradients_batch
          • predict_intervals
          • predict_sequence
          • predict_sequences
          • predict_variant
          • predict_variants
          • score_interval
          • score_intervals
          • score_ism_variants
          • score_variant
          • score_variants
          • supported_conditions
        • OutputType
        • Output
          • filter_output_type
          • filter_to_observed
          • filter_to_strand
          • get
          • map_over_outputs
          • resize
          • with_metadata_column
          • with_name_suffix
        • OutputMetadata
          • concatenate
          • get
        • VariantOutput
        • TargetGeneMetadata
        • InputGradientsOutput
          • to_track_data
        • ModelCondition
        • from_curies
        • from_anndata
        • subsample
        • AggregationType
        • BaseVariantScorer
        • CenterMaskScorer
        • ContactMapScorer
        • GeneMaskLFCScorer
        • GeneMaskActiveScorer
        • GeneMaskSplicingScorer
        • MethylationScorer
        • PolyadenylationScorer
        • SpliceJunctionScorer
        • get_recommended_scorers
        • tidy_anndata
        • tidy_scores
        • IntervalAggregationType
        • BaseIntervalScorer
        • GeneMaskScorer
      • AlphaGenome 1
        • create
        • ModelVersion
        • Organism
        • validate_sequence_length
        • DnaClient
          • output_metadata
          • predict_interval
          • predict_intervals
          • predict_sequence
          • predict_sequences
          • predict_variant
          • predict_variants
          • score_interval
          • score_intervals
          • score_ism_variants
          • score_variant
          • score_variants
        • OutputType
        • Output
          • filter_ontology_terms
          • filter_output_type
          • filter_to_strand
          • get
          • map_track_data
          • resize
        • OutputMetadata
          • concatenate
          • from_outputs
          • get
        • VariantOutput
        • AggregationType
        • BaseVariantScorer
        • CenterMaskScorer
        • ContactMapScorer
        • GeneMaskLFCScorer
        • GeneMaskActiveScorer
        • GeneMaskSplicingScorer
        • PolyadenylationScorer
        • SpliceJunctionScorer
        • get_recommended_scorers
        • tidy_anndata
        • tidy_scores
        • IntervalAggregationType
        • BaseIntervalScorer
        • GeneMaskScorer
      • get_api_key
    • Atlas
      • create
      • AtlasClient
        • query_interval
        • query_variant
        • query_variants
        • scorer_metadata
      • ScorerMetadata
    • Data
      • Subset
      • get_all_folds
      • get_fold_names
      • get_fold_intervals
      • Strand
        • from_str
      • VariantFormat
        • to_regex
      • Interval
        • as_unstranded
        • binary_mask
        • binary_mask_stranded
        • boundary_shift
        • center
        • contains
        • copy
        • coverage
        • coverage_stranded
        • from_interval_dict
        • from_str
        • intersect
        • overlap_ranges
        • overlaps
        • pad
        • resize
        • shift
        • swap_strand
        • to_interval_dict
        • truncate
        • within_reference
      • Variant
        • alternate_overlaps
        • as_truncated_str
        • copy
        • from_dict
        • from_str
        • reference_overlaps
        • split
        • to_dict
      • Junction
        • acceptor_region
        • as_unstranded
        • binary_mask
        • binary_mask_stranded
        • boundary_shift
        • center
        • contains
        • copy
        • coverage
        • coverage_stranded
        • dinucleotide_region
        • donor_region
        • from_interval_dict
        • from_str
        • intersect
        • overlap_ranges
        • overlaps
        • pad
        • resize
        • shift
        • swap_strand
        • to_interval_dict
        • truncate
        • within_reference
      • normalize_variant
      • intersect_intervals
      • merge_overlapping_intervals
      • union_intervals
      • TranscriptType
      • extract_tss
      • filter_transcript_type
      • filter_protein_coding
      • filter_to_longest_transcript
      • filter_to_mane_select_transcript
      • filter_transcript_support_level
      • get_gene_interval
      • get_gene_intervals
      • FastaExtractor
        • extract
        • get_length_for_sequence_name
      • reverse_complement
      • JunctionData
        • filter_by_name
        • filter_by_ontology
        • filter_by_tissue
        • filter_to_negative_strand
        • filter_to_observed
        • filter_to_positive_strand
        • filter_to_strand
        • filter_tracks
        • intersect_with_interval
        • normalize_values
        • with_metadata_column
        • with_name_suffix
      • get_junctions_to_plot
      • OntologyType
      • OntologyTerm
      • from_curie
      • from_curies
      • AggregationType
      • TrackData
        • bin_index
        • change_resolution
        • copy
        • downsample
        • filter_to_negative_strand
        • filter_to_nonnegative_strand
        • filter_to_nonpositive_strand
        • filter_to_observed
        • filter_to_positive_strand
        • filter_to_stranded
        • filter_to_unstranded
        • filter_tracks
        • groupby
        • pad
        • resize
        • reverse_complement
        • select_tracks_by_index
        • select_tracks_by_name
        • slice_by_interval
        • slice_by_positions
        • upsample
        • with_metadata_column
        • with_name_suffix
      • concat
      • interleave
      • GeneExpressionData
        • copy
        • filter_to_negative_strand
        • filter_to_nonnegative_strand
        • filter_to_nonpositive_strand
        • filter_to_observed
        • filter_to_positive_strand
        • filter_to_protein_coding
        • filter_to_stranded
        • filter_to_unstranded
        • filter_tracks
        • get_genes_as_intervals
        • resize
        • select_tracks_by_index
        • slice_by_interval
        • to_anndata
        • with_metadata_column
        • with_name_suffix
      • concat
      • Transcript
        • fix_truncation
        • from_gtf_df
        • offset_in_cds
      • TranscriptExtractor
        • cache_transcripts
        • extract
    • Interpretation
      • ism_variants
      • ism_matrix
      • tile_interval
      • score_enhancers
      • get_active_enhancers
      • assign_consensus_enhancers
    • Visualization
      • seqlogo
      • plot_contact_map
      • plot_track
      • plot_tracks
      • sashimi_plot
      • enhancer_arcs_plot
      • pad_track
      • plot
      • AbstractComponent
        • get_ax_height
        • plot_ax
      • Tracks
        • get_ax_height
        • plot_ax
      • OverlaidTracks
        • get_ax_height
        • plot_ax
      • ContactMaps
        • get_ax_height
        • plot_ax
      • ContactMapsDiff
        • get_ax_height
        • plot_ax
      • GeneExpression
        • get_ax_height
        • plot_ax
      • OverlaidGeneExpression
        • get_ax_height
        • plot_ax
      • TranscriptAnnotation
        • get_ax_height
        • plot_ax
      • SeqLogo
        • get_ax_height
        • plot_ax
      • Sashimi
        • get_ax_height
        • plot_ax
      • FeatureContribution
        • get_ax_height
        • plot_ax
      • ScoreBar
        • get_ax_height
        • plot_ax
      • EnhancerArcs
        • get_ax_height
        • plot_ax
      • EmptyComponent
        • get_ax_height
        • plot_ax
      • AbstractAnnotation
        • add_label
        • plot_ax
        • plot_labels
      • IntervalAnnotation
        • add_label
        • plot_ax
        • plot_labels
      • VariantAnnotation
        • add_label
        • plot_ax
        • plot_labels
      • TranscriptStyle
      • TranscriptStylePreset
      • plot_transcripts
      • draw_interval
      • draw_transcript
  • FAQs
  • Resources
  • References
  • Community
  • .md

Navigating imputed tracks

Contents

  • Modalities, channels, and tracks
  • Two kinds of imputation
  • Imputation modes
  • Cross-modality rules
  • Where the labels appear
  • Potential pitfalls
    • Splicing effects from single-cell assays only
    • False positives in TF ChIP-seq for unexpressed transcription factors

Navigating imputed tracks#

AlphaGenome 2 predicts every track for every condition, including tracks that were never experimentally measured in that condition. Any imputed track is a model-generated hypothesis rather than a replacement for measurement. Each track carries an imputation_mode label indicating whether it was directly measured in training (observed), imputed along a biologically informative and benchmarked direction (imputed_supported), or imputed without sufficient experimental constraints where performance may be unreliable (imputed_exploratory).

Modalities, channels, and tracks#

Each output type predicts a fixed set of channels, and a track is one channel in one condition. For most assays, channels are technical variants of the same readout (such as sequencing protocol, polyA+ versus total RNA, or forward + and reverse - strands); only in ChIP-seq (CHIP_HISTONE and CHIP_TF) do channels correspond to distinct biological targets (histone marks or transcription factors). Output types group into modalities such as chromatin accessibility or gene expression (see Modalities, channels, and tracks). imputation_mode is a per-track label.

A condition rarely has every channel or output type in a modality measured: it typically has one sequencing protocol or assay profiled rather than all variants (and in ChIP-seq, only a subset of histone marks or transcription factors).

Two kinds of imputation#

Within a modality

At least one assay or channel of the modality was measured in this condition, and the model fills in the rest. For most assays, this imputes unmeasured technical variants or related output types of the same readout (such as unmeasured sequencing protocols, or ATAC-seq when DNase-seq was measured). For ChIP-seq, where channels represent distinct targets, it also imputes unmeasured histone marks or transcription factors.

Across modalities

None of the modality’s channels were measured in this condition, so every channel is predicted from the other modalities that were measured. In bone marrow T cells, which only have single-cell assays, all histone ChIP-seq channels are imputed from scATAC-seq and scRNA-seq.

Working with imputed tracks walks through both cases at the TCF7 locus.

Imputation modes#

Every imputed track is a hypothesis about an unmeasured experiment. The two imputed modes distinguish whether the condition’s measured assays carry the biological information needed to support that hypothesis:

observed

Measured in training

This exact channel was experimentally measured in this condition and used for training.

imputed_supported

Supported hypothesis

Not measured here, but inferred from measured assays where the direction of imputation makes biological sense and has been benchmarked (for example, predicting histone marks from chromatin accessibility). Still a hypothesis, but grounded in informative measurements from that condition.

imputed_exploratory

Unconstrained / unvalidated

Not measured here, and the condition’s measured assays do not reliably constrain this readout (for example, predicting splicing or specific TF binding from chromatin accessibility alone). Performance in this regime is not benchmarked and can be poor or systematically misleading.

Cross-modality rules#

The same rules apply to unmeasured channels inside a partly measured output type: unmeasured histone marks in blood are imputed_supported, while unmeasured transcription factors are always imputed_exploratory. The tables below list which measured modalities support each output type.

Can be supported

Modality

Output types

Supported when the condition has measured

Chromatin accessibility

ATAC, DNASE, SC_ATAC

Accessibility and/or gene expression

Gene expression

RNA_SEQ, SC_GENE_EXPRESSION

Accessibility and/or gene expression

Histone modification and CpG methylation

CHIP_HISTONE, METHYLATION

Accessibility (gene expression alone is not sufficient)

Always exploratory when unmeasured

Modality

Output types

TF binding

CHIP_TF

Splicing

SPLICE_SITES, SPLICE_SITE_USAGE, SPLICE_JUNCTIONS

Transcription start sites

CAGE

3D chromatin contacts

CONTACT_MAPS

Expression conditioning

Under expression conditioning (cell_conditioning=), your human scRNA-seq counts do not correspond to a reference condition, so no track is labeled observed. Single-cell gene expression is predicted directly from your cells, and other modalities are imputed from the cell embedding with the same reliability rules as above.

Where the labels appear#

Per condition: supported_conditions()

One row per condition and one column per output type. Each column shows the best label among that output type’s channels, so observed means at least one channel was measured, not all of them. If only CTCF was profiled, the transcription factor column reads observed even though the other 777 factors are exploratory.

Per track: imputation_mode

Every track in a prediction or score table has its own label in the imputation_mode metadata column. Filter on it to keep only measured tracks, or to include supported imputation hypotheses while excluding exploratory tracks.

# Keep only directly measured tracks on an Output or GeneExpressionData object:
observed_rna = output.filter_to_observed().rna_seq
# Keep measured tracks and supported imputation hypotheses:
tidy = variant_scorers.tidy_scores(scores)
supported_scores = tidy.query(
    'imputation_mode in ["observed", "imputed_supported"]'
)

Potential pitfalls#

Splicing effects from single-cell assays only#

  • No full-length junction supervision: Many primary cell types in supported_conditions() (and all expression conditioning inputs via cell_conditioning=) only have 3’ or 5’ UMI scRNA-seq (SC_GENE_EXPRESSION) or scATAC-seq (SC_ATAC). Droplet end-tag reads do not span internal splice junctions, providing no direct training supervision on cell-type-specific exon inclusion.

  • Plausible baseline boundaries without trans-acting regulation: DNA splice donor (GT) and acceptor (AG) motifs let AlphaGenome 2 place constitutive exon boundaries that look realistic on REF tracks, while tissue-specific alternative splicing controlled by trans-acting RNA-binding proteins remains unconstrained.

  • Exon-level read depth in imputed RNA-seq: When RNA_SEQ is imputed_supported from single-cell assays alone, total gene-level expression magnitude is well supported, whereas relative coverage across individual exons should not be interpreted as validated isoform usage.

How to avoid splicing pitfalls

Restrict SPLICE_SITES, SPLICE_SITE_USAGE, and SPLICE_JUNCTIONS scoring to conditions where splicing tracks (imputation_mode == 'observed') or bulk full-length RNA-seq (RNA_SEQ) were directly measured. In single-cell-only conditions, score total transcriptional effects using SC_GENE_EXPRESSION_DENOISED (under expression conditioning with cell_conditioning=) or SC_GENE_EXPRESSION (when passing condition=).

False positives in TF ChIP-seq for unexpressed transcription factors#

  • No negative-control TF ChIP-seq training tracks: TF ChIP-seq experiments are almost always run in cell types where the target transcription factor is expressed. Unmeasured (condition, TF) tracks were masked from the loss during training rather than given zero signal, so the model was never explicitly taught that unexpressed factors do not bind DNA.

  • Open chromatin and sequence motif false positives: Whenever a regulatory element or variant falls in open chromatin and matches the motif of a transcription factor (or an expressed paralog from the same motif family, such as ETS, GATA, or KLF/SP proteins), imputed CHIP_TF tracks and ALT minus REF variant scores can be large even when the gene encoding that factor is unexpressed in the condition.

Check whether the candidate TF is expressed in that context

Restrict CHIP_TF tracks and scores to imputation_mode == 'observed' whenever possible. When inspecting imputed_exploratory CHIP_TF predictions or scores, verify that the candidate transcription factor gene is expressed in that condition using a matched expression profile for that cell type (such as your input AnnData) or by querying AlphaGenome 2 gene expression on the genomic interval of the factor gene:

# Check expression of a candidate TF gene on its own 1 Mb genomic interval:
tf_pred = dna_model.predict_interval(
    interval=tf_gene_interval.resize(dna_client.SEQUENCE_LENGTH_1MB),
    requested_outputs=[dna_client.OutputType.SC_GENE_EXPRESSION],
    condition=condition,
)
sc_gex = tf_pred.sc_gene_expression.filter_to_observed()

# Or filter candidate TF ChIP-seq variant scores against a predefined set of TF
# gene symbols expressed in your condition (for example, from your own RNA-seq):
expressed_tf_symbols = {'SPI1', 'CEBPA', 'IRF8'}
valid_tf_scores = tidy[
    (tidy['output_type'] == 'CHIP_TF')
    & (
        (tidy['imputation_mode'] == 'observed')
        | tidy['transcription_factor'].isin(expressed_tf_symbols)
    )
]
Contents
  • Modalities, channels, and tracks
  • Two kinds of imputation
  • Imputation modes
  • Cross-modality rules
  • Where the labels appear
  • Potential pitfalls
    • Splicing effects from single-cell assays only
    • False positives in TF ChIP-seq for unexpressed transcription factors

By Google LLC

© Copyright 2024, Google LLC.