Beatriz Manso

I work on gene expression data, and on whether you can trust what it tells you.

PhD Bioinformatics, University of West London/London
manso.beatriz@gmail.com/GitHub/LinkedIn/CV

What I do

Transcriptomics, mostly. In R and Python, mostly. Usually the unglamorous middle part: getting the counts right, picking a model, then working out whether the result survives being tested properly.

I finished my PhD at the University of West London in 2026. I now run the MSc Bioinformatics programme there and teach the computational modules.

Most of what I think about at the moment came out of going back through my own thesis. The classifier in it looked fine. It was not, quite. Some of the performance came from choosing the marker genes on the whole dataset rather than inside each cross-validation fold, which quietly inflates everything downstream. That was not a good week. It is also the most useful thing I have learned.

Current work

Accuracy can hide a model that does nothing

Gene expression datasets are small and rarely balanced. The brain cancer cohort below has 130 samples, 117 of them tumour. So a model that answers tumour every single time scores 90% accuracy while doing nothing at all.

Accuracy    Cohen’s κ

0 0.25 0.50 0.75 1.00 always “tumour” sigmoid softsign tanh 0.000 0.000
Four models, one dataset (GSE50161, 117 tumour / 13 normal), 10×5-fold repeated stratified cross-validation. Sigmoid reaches 0.900 accuracy at a Cohen’s κ of exactly zero, which is to say it is indistinguishable from always answering “tumour”. Only tanh and softsign learn anything. Reported as accuracy alone, all four look respectable.

The second result is the one from my own pipeline. Selecting the marker genes on the full dataset instead of inside each fold lifts logistic regression from κ 0.790 to 0.915. About 14% of the headline number was the evaluation, not the biology. I am writing both up now.

Doctoral work

Structural, Functional and Genomic Decompensation Analysis of the Brain in Chiari Malformation I Patients

I wrote convolutional and artificial neural networks from scratch in C++, then spent much longer evaluating them than building them. Activation functions chosen by 10×5-fold repeated stratified cross-validation with Friedman testing and Bonferroni-corrected comparisons; benchmarks against logistic regression, SVM and random forests under one protocol.

The benchmarking is the part I would defend hardest. It is also the part that told me the deep model was not earning its complexity.

Some analyses

Older coursework across NGS quality control, microarray analysis, phylogenetics, protein structure and Biopython is archived on GitHub.

Tools
Languages
Python, R, C++, Bash, SQL
Genomics
RNA-seq, microarray, variant annotation, ChIP-seq, methylation, eQTL
Modelling
scikit-learn, Keras, TensorFlow, cross-validation and model comparison
Day to day
Git, Linux, HPC, Docker, Snakemake, R Markdown