Seven years at the Wellcome Sanger Institute on the African Genome Variation Project and the Uganda Genome Resource: whole-genome sequence from thousands of individuals, and a haplotype reference panel for a continent that reference panels had largely skipped. Then deep learning on UK Biobank electronic health records at Queen Mary University of London, two years of data science at Novo Nordisk, and now clinical machine learning with the Benros group in Copenhagen, on national registry and EHR data.
Tommy Carstensen
Bioinformatician · data scientist · Copenhagen
Human genetics at population scale, and the methods that make it computable: reference panels for African populations at the Wellcome Sanger Institute, deep learning on UK Biobank health records, and clinical machine learning on national registry data.
Research
Selected publications
- 2024 · Nature Medicine
- 2023 · Nature
- 2020 · Nature Communications
- 2019 · Cell
- 2019 · Diabetologia
- 2015 · Nature
Software
Registry-scale data breaks the standard statistical packages long before the statistics stop being valid. These implement the same estimators without holding the table in memory.
coxstream
Exact out-of-core Cox proportional hazards regression. Each Newton–Raphson step becomes a sum over parquet row groups, so peak memory is one row group plus O(p²) state rather than the whole table. The estimates stay exact: coefficients agree with R's survival::coxph to 2e-14 at two million rows, and with lifelines to 3e-14 on data rounded to 120 distinct event times, where ties necessarily straddle chunk boundaries. Standard errors agree to 2e-13.
pip install coxstream CRAN R source doi:10.5281/zenodo.20693783
renew-glm
Streaming generalized linear models with bounded memory, implementing the renewable estimation of Luo and Song (2020). One pass per iteration accumulates the sufficient statistics, so the streaming path holds one chunk plus O(p²) state, independent of the number of rows. The chunk-buffered path trades that for standard errors. Gaussian, binomial and Poisson, checked against statsmodels in the test suite.
PlotPick
Recovers the numbers behind published figures. Upload images, PDFs or ZIPs and it reads boxplots, bar charts and line plots back into structured tables. Benchmarked against ChartX and PlotQA with Claude, GPT, Gemini and DePlot baselines.
Talks
Upstream
Reports and fixes accepted into the tools this work depends on.
-
polars #27860
Reported with a reproducer at 200 million rows: parquet min/max statistics exclude NaN while polars orders NaN as the largest value, so float
>=filters could never skip row groups. Labelled accepted upstream; thenan_count-gated fix is verified locally and not yet merged. - samtools/bcftools Six merged pull requests: error messages that name the accepted types and options, and documentation corrections for the two-VCF-input statistics.
- biopython Merged: modified residue 4BF now maps to phenylalanine rather than tyrosine.