I build statistical models that turn incomplete, noisy data into estimates and predictions with honest uncertainty. Typical questions: how a drug's concentration evolves across a patient population and how much individuals differ; which readings in a sensor network are implausible and why; how regions compare once small sample sizes are taken into account. Results are delivered as reproducible analyses, reports and interactive dashboards, as open-source software.
Modelling showcases
Population PK/PD: warfarin
How do drug concentrations and a biomarker respond to a dose, how much do patients differ, and which daily dose keeps most patients in range? A population model of the classic warfarin data: plasma concentrations and clotting activity in 32 people after one dose.
Plasma warfarin after one dose of 1.5 mg/kg: measurements (dots) and each subject's fitted curve (median, 50% and 95% intervals).
Clotting activity falls with a delay of about two days and recovers as warfarin is cleared; the turnover model captures both.
Simulated from the fitted population: share of new patients whose clotting activity is in an illustrative target range after 14 days of a daily dose (highest at 10 mg), and the share pushed below it (median, 50% and 95% intervals over the posterior).
Data: O'Reilly & Aggeler (1963, 1968), as distributed in the nlmixr2data R package.
health
pharmacometrics
multilevel
dosing
Regional trends across Germany's districts
How fast is the share of young children receiving integration assistance changing in each district? Six yearly values give each district a noisy trend; a Fay–Herriot-type small-area model pools each district towards its state as far as its data warrant.
Estimated change per year, 2020–2025 (posterior median); hover a district for its raw trend and 95% interval. The middle 95% of raw district trends spans −18% to +29% per year; pooled, −10% to +20%. Colours stop at ±20% per year; 11 districts lie beyond. Published counts are rounded to multiples of 5.
How fast is Germany warming, and how sure can we be? A smooth trend fitted to annual means since 1881 and continued ten years ahead with its uncertainty.
Dots: Germany's annual mean temperature, 1881–2025. Line and bands: the estimated trend (median, 50% and 95% intervals), about 2.6 °C warmer than in 1881, continued to 2035. The continuation is a statistical extrapolation of the trend, not a climate projection.
Has every part of Germany warmed alike? Each state's smoothed temperature trend against its own 1961–1990 level, as an animated map from 1881 to today.
Each state's smoothed temperature trend (posterior median), relative to its own 1961–1990 level; press play to step through the years from 1881. By 2025 every state had warmed by 1.8 to 2.0 K. Berlin, Hamburg and Bremen share DWD's series with their neighbours.
Plausibility checks in a radiation monitoring network
Which readings of Germany's ambient gamma dose rate network need a second look? A Bayesian model of each probe (baseline, daily cycle, rain washout, rare unexplained readings) separates rain peaks from readings it cannot explain.
Kehl ST Auenheim, 16 October 2026 to 23 October 2026: hourly readings (dots), the model's expected level (median, 50% and 95% intervals, blue) and the level without rain washout (dashed); dotted red: a fixed threshold (median plus 3 robust standard deviations). The reading is above the threshold in 15 hours, 14 of them during rain, which the model explains; it flags 1 hour it cannot explain (red). The last 33 hours came after the model's fit and are assessed against it. Below: the radar rain class at the probe.
Data: Bundesamt für Strahlenschutz (BfS), ODL-Info open data, hourly dose rate and radar precipitation, 16–23 October 2026; model results as of 23 October 2026.
environment
monitoring
multilevel
anomalies
Fewer false pre-alarms
A fixed threshold raises a pre-alarm whenever rain lifts the reading. Across the whole network, the model explains rain peaks and keeps only the pre-alarms it cannot explain.
Probes with at least one pre-alarm under a fixed threshold rule in the week to 23 October 2026 (1,562 of 1,564). The model keeps pre-alarms at 594 of them (red) and explains the others by rain. Of 21,872 hours above the threshold it leaves 1,603 (7%) unexplained; 33 of 90 pre-alarm episodes remain.
Did a programme change the outcome, and when? Municipalities adopt it in different years; an event-study model compares adopters with non-adopters year by year.
Estimated programme effect by year relative to adoption (median, 50% and 95% intervals); diamonds: the effects the data were simulated with. Before adoption the estimates stay near zero, which checks the comparison: 30 adopting and 30 non-adopting municipalities.
Synthetic data: 60 simulated municipalities over 12 years.
A smooth curve with no fixed formula, and noise whose size changes over time: a heteroscedastic Gaussian process for the classic motorcycle crash data, approximated with 20 Hilbert-space basis functions.
Head acceleration after the impact (dots) and the estimated mean (median, 50% and 95% intervals).
The noise SD changes over time too: near zero before the impact, largest around 30 ms. A second Gaussian process models its logarithm.
Data: motorcycle crash test, Silverman (1985), as distributed in the MASS R package (GPL-2 | GPL-3).
What to do with lab values reported as "below the LLOQ"? Dropping them, or replacing them by half the limit, biases a dose-response analysis; treating them as censored recovers the truth. A simulation study with three ways to fit the same data.
One subject at the highest dose: true level (line), measurements (circles; squares are below the LLOQ of 0.1, drawn at the LLOQ) and each method's estimate (median, 50% and 95% intervals).
Calibration over all 495 samples after the dose: a method whose curve follows the diagonal places the true level where its posterior says it should be. The central 95% intervals contain the true level for 77% (M1), 94% (M3), 60% (M5) of the samples.
Error of each method's estimate of the average largest drop below baseline per dose group (median, 50% and 95% intervals); the dashed line is the truth. Samples below the LLOQ: 5%, 26%, 50%, 73%, 78% by dose.
Simulated data (55 subjects in five dose groups, ten samples each).
Why does the sampler report divergent transitions for the motorcycle model, and does it help to learn, for each basis weight, how far to centre it? The same model sampled three ways, with 40 chains at three target acceptance rates.
The centeredness (0 non-centered, 1 centered) of each basis weight: median, 50% and 95% intervals over the 120 chains that adapted it in their own warm-up (40 at each target acceptance rate), and the value learned once from one chain of 10,000 draws, the post's protocol (dots). Low-frequency weights, which the data pin down, tend to be centered; high-frequency ones, which the data barely inform, stay non-centered, most clearly for the noise SD.
Effective draws of the worst-mixing GP hyperparameter (the amplitudes and length scales) per 1000 gradient evaluations, chain by chain: median, 50% and 95% intervals over each method's chains of 1000 draws. Medians at a target acceptance rate of 0.8: adapted in each chain's warm-up 2.4, non-centered 1.7, learned once 1.2. One chain that adapted its centering in its own warm-up, at a target acceptance rate of 0.9, settled at a length scale of the mean curve about 2 times that of the other chains and stayed there. It is left out here: mixing within such a chain says nothing about the region it misses.
Data: motorcycle crash test, Silverman (1985), as distributed in the MASS R package (GPL-2 | GPL-3).
statistics
sampling
gaussian-processes
Open-source software
BayesianRegressionModels.jl
Regression models written as brms-style formulas, compiled to Stan.
since 2025Independent consultant: Bayesian pharmacometric modellingGenerable Inc.2022 – 2026Postdoctoral research in probabilistic modellingAalto University; University of Cambridge2021PhD in MathematicsRWTH Aachen University2017BSc and MSc in Computational Engineering ScienceRWTH Aachen University
This website sets no cookies, uses no tracking or analytics, and loads no content from third parties. It is hosted on GitHub Pages; when you visit, GitHub Inc. processes technical access data such as your IP address to deliver the site and protect it from misuse (Art. 6(1)(f) GDPR); see GitHub's privacy statement. Controller: Nikolas Siccha (see legal notice). You have the rights of access, rectification, erasure, restriction and objection, and the right to lodge a complaint with a supervisory authority.