I'm running CIBERSORTx (Docker version) to deconvolve a microarray bulk cohort using a custom signature matrix built from droplet-based (10x) single-cell RNA-seq data, using S-mode batch correction (--rmbatchSmode TRUE + --refsample). I've run into behavior that seems inconsistent with the official documentation, and I'd like to understand what's happening internally before trusting downstream results.
Setup:
- Signature matrix built from scRNA-seq reference (--single_cell TRUE)
- Mixture: microarray bulk data (confirmed linear scale, max value >50, so no auto-antilog issue)
- Batch correction: S-mode (per the decision tree in Newman et al. 2019, since reference is droplet/UMI-based)
Issue 1 — Which mixture/sigmatrix pair is actually used for the final fraction calculation?
With --verbose TRUE, the Fractions log shows two internal stages:
Adjusting mixtures with S-mode batch correction.
Running CIBERSORTx on unadjusted mixtures with S-mode adjusted signature matrix.
=============CIBERSORTx Settings===============
Mixture file: /src/data/mixture.txt <- ORIGINAL, unadjusted
Signature matrix file: /src/outdir//..._sigmatrix_Adjusted.txt <- adjusted
So despite also producing a Mixtures_Adjusted.txt file, the final fraction computation appears to use the unadjusted mixture together with the adjusted signature matrix — not the adjusted mixture. Is this expected/documented behavior? If so, what is Mixtures_Adjusted.txt actually used for downstream (only for HiRes GEP imputation via --useadjustedmixtures, or something else)?
Issue 2 — For HiRes specifically, which input combination is "correct"?
I've tried two workflows on the same underlying reference:
(A) Feed HiRes the already-adjusted files from a completed Fractions run: --mixture Mixtures_Adjusted.txt --sigmatrix sigmatrix_Adjusted.txt --cibresults Adjusted.txt with no further batch correction requested in the HiRes call.
(B) Feed HiRes the raw mixture + the pre-correction aggregated signature matrix + --refsample, requesting --rmbatchSmode TRUE directly in the same HiRes call (mirroring the combined single-command Fractions workflow shown in the official tutorial download examples).
Both complete without errors, but produce meaningfully different per-gene imputation quality: (B), despite using the full gene set (no genes pre-filtered by an Adjusted-mixture step), produces a substantially higher fraction of genes flagged as "insufficient evidence" (value=1) or degenerate (zero variance across samples) in the output, compared to (A).
Is there a documented "correct" way to chain Fractions -> HiRes when S-mode batch correction is involved? Does --useadjustedmixtures (default TRUE) behave differently depending on whether batch correction is requested within the same HiRes call vs. inherited from a separate prior Fractions run?
What I've already checked/ruled out:
- Mixture confirmed in proper linear scale (not log2)
- Reference confirmed as raw single-cell counts (not pre-normalized)
- Confirmed the official tutorial pages are internally inconsistent regarding QN (Tutorial 3 vs Tutorial 5 give contradictory checkbox-state instructions for the same "disable QN for RNA-seq" recommendation) — apparently a known tutorial typo per a prior Biostars thread, but this doesn't resolve the issues above.
Any clarification on the intended data flow — especially Issue 2, since it materially changes downstream cell-type-specific expression results — would be very helpful.
0 answers
No answers yet.
Log in to answer this question.