Skip to content

paired-sequences

One row, two sequences — and the extra merged report.

miRNA and target-mRNA pairs: 1200 rows from miRBench's AGO2_CLASH_Hejret2023, each row carrying a gene sequence and a noncodingRNA sequence with one shared label.

The only example where a single input file produces three class reports.

Run it

gb-qc evaluate-classes \
  --input examples/paired-sequences/data/miRNA_mRNA_pairs_dataset.tsv \
  --sequence-column gene \
  --sequence-column noncodingRNA \
  --label-column label \
  --out-folder qc-out

Repeat --sequence-column per column — --sequence-column gene noncodingRNA will not work. Each column is analysed on its own, and then all sequences are pooled into an extra merged analysis, giving three report directories:

class/
├── gene/0_vs_1/            # the mRNA column alone
├── noncodingrna/0_vs_1/    # the miRNA column alone
└── merged/0_vs_1/          # both pooled

Directory names are lowercased and stripped of path-unsafe characters, which is why noncodingRNA becomes noncodingrna. The labels shown inside the reports keep their original spelling.

What it produces

class/gene/0_vs_1open the report

Check Flag AU-ROC
Unique bases Pass
Sequence Duplications within Labels Fail
Duplicate Sequences between Labels Fail
Sequence lengths Pass 0.500
Per sequence GC content Pass 0.513
Per sequence nucleotide content Pass 0.517
Per sequence dinucleotide content Pass 0.523
Per position nucleotide content Pass 0.536
Per position reversed nucleotide content Pass 0.536

class/merged/0_vs_1open the report

Check Flag AU-ROC
Unique bases Pass
Sequence Duplications within Labels Pass
Duplicate Sequences between Labels Pass
Sequence lengths Pass 0.501
Per sequence GC content Pass 0.516
Per sequence nucleotide content Pass 0.523
Per sequence dinucleotide content Pass 0.524
Per position nucleotide content Pass 0.536
Per position reversed nucleotide content Pass 0.550

class/noncodingrna/0_vs_1open the report

Check Flag AU-ROC
Unique bases Pass
Sequence Duplications within Labels Fail
Duplicate Sequences between Labels Fail
Sequence lengths Pass 0.501
Per sequence GC content Pass 0.516
Per sequence nucleotide content Pass 0.523
Per sequence dinucleotide content Pass 0.527
Per position nucleotide content Pass 0.523
Per position reversed nucleotide content Pass 0.522

What you should conclude

Duplication fails; statistics pass. Both real columns come back Fail on Sequence Duplications within Labels and Duplicate Sequences between Labels, while every statistical check sits between 0.50 and 0.53 — indistinguishable classes.

That combination is characteristic of interaction datasets, and it is worth recognising. These are pairs: one miRNA binds many targets, one target is bound by many miRNAs. So the same noncodingRNA sequence appears in many rows by construction, and so does the same gene. The duplication checks are reporting the shape of the data, not a mistake in it.

It still matters, for two reasons:

  • Your effective sample size is smaller than 1200. If a handful of miRNAs account for most rows, a random train/test split puts the same miRNA on both sides, and your model gets credit for recognising it. Splitting by miRNA rather than by row is the usual fix.
  • Duplicate Sequences between Labels failing means the same sequence appears with both labels — the same miRNA has both bound and unbound targets, which is true and expected here. Neither column can be predictive on its own, which is the point of a pair dataset.

Read the merged report with care. It comes back Pass on all nine, including the duplication checks the individual columns fail. That is not a contradiction: pooling the two columns means a duplicated miRNA and a duplicated mRNA are diluted against each other, and the duplication rate across the pool falls below the threshold. The merged view answers "is there a bias in the sequences taken together", which is a different question from "is either column duplicated". When they disagree, the per-column reports are the ones about your data's structure.

The 8 Unknown sub-checks in the merged and noncodingrna reports are the positions past where the shorter miRNA sequences reach — 1200 rows is also close to the 250-per-class floor, so this is a small dataset by the checks' standards.