CoolFace
Datasetpublic

depinwang/jinyang-omentum-subtype-artifact-mechanism-canary-expression-arm-test-v1

jinyang-omentum-subtype-artifact-mechanism-canary-expression-arm-test-v1 Per-gene differential expression between the two canary arms (20 NovaSeq vs 20 non-NovaSeq), from the TPM matrix in jinyang-omentum-subtype-artifact-mechanism-canary-expression-matrix-v1. 78,724 genes, Mann-Whitney U (two-sided, asymptotic), BH-FDR adjusted. Read the composition warning before using any gene from this table. The arm contrast is not a clean platform contrast — see below. Headline… See the full description on the dataset page: https://huggingface.co/datasets/depinwang/jinyang-omentum-subtype-artifact-mechanism-canary-expression-arm-test-v1.

sourceHugging Faceupdated 9d agoView on Hugging Face
0likes41downloads
Dataset Card

jinyang-omentum-subtype-artifact-mechanism-canary-expression-arm-test-v1

Per-gene differential expression between the two canary arms (20 NovaSeq vs 20 non-NovaSeq), from the TPM matrix in jinyang-omentum-subtype-artifact-mechanism-canary-expression-matrix-v1. 78,724 genes, Mann-Whitney U (two-sided, asymptotic), BH-FDR adjusted.

Read the composition warning before using any gene from this table. The arm contrast is not a clean platform contrast — see below.

Headline

  • —12,663 / 78,724 genes (16%) at BH q < 0.05 (11,241 higher on NovaSeq, 858 higher on non-NovaSeq)
  • —3 of 6 housekeeping genes differ at raw p < 0.05 (GAPDH p = 0.018, HPRT1 p = 2.7e-06, TUBB p = 0.036)

A Mann-Whitney U test on 20 vs 20 samples with TPM values rounded to 2 decimal places produces heavy ties, which makes the asymptotic test conservative rather than anti-conservative — so 12,663 is, if anything, a lower bound, not an inflated count. The method="asymptotic" choice is stated explicitly rather than left to scipy's "auto", so the exact-vs-asymptotic behaviour cannot silently depend on the tie pattern of a particular matrix.

Why "arms" and not "platforms"

The same comparison at full cohort scale (n = 160) shows the platform split is entangled with clinical and processing variables:

variabletestresult
seq_setchi2perfectly disjoint across arms (12 sets each, zero overlap), p = 8.3e-25
cohortchi2DECIDER is 100% NovaSeq (0/47 non-NovaSeq), p = 2.3e-08
tx_strategyFisher77% PDS on NovaSeq vs 64% NACT off it, p = 1.5e-06, OR = 5.90
survival_statusFisher63/113 alive on NovaSeq vs 4/47 off it, p = 7.4e-09
parpichi2p = 1.3e-04

Two of these cannot be adjusted away by including a covariate: seq_set is nested perfectly inside platform (so platform and sequencing batch are one variable here), and DECIDER contributes zero non-NovaSeq samples. The treatment confound is already documented in the red-team brief (item 6), which is why the full analysis carries a treatment-adjusted secondary test; the survival difference (63/113 vs 4/47 alive) is larger than the treatment difference and is recorded here as a new finding.

The practical consequence: 12,663 genes is a list of genes that differ between two groups that differ by platform, sequencing set, cohort, treatment and survival at once. It is not a platform-effect estimate, and it should not be described as one.

Method

  • —statistic: scipy.stats.mannwhitneyu(alternative="two-sided", method="asymptotic")
  • —adjustment: Benjamini-Hochberg over all 78,724 genes (cross-checked against statsmodels.stats.multitest.multipletests(method="fdr_bh") on the same vector, max |diff| = 1.11e-16)
  • —input: TPM, 2 dp. Genes where both arms are constant and equal are left at p = 1.0 rather than being dropped, so every gene in the matrix appears exactly once here.
  • —log2_fc_median uses a pseudocount of 0.01 TPM to keep zero-valued medians finite; it is a convenience column, and the raw medians are alongside it.

Generated by scripts/analyze_expression.py (wilcoxon_by_arm) from job ePouta 2602738. Source table gates_arm_diff.tsv is attached to the matrix artifact.