Methods
I'm a statistician by training. This is what I actually use, with a note on when I use it.
Hierarchical Bayesian modeling
The backbone. Multiple messy data sources, nested structure, missing data, and a decision at the end that needs a probability attached. I build these in NIMBLE and JAGS, and increasingly in Python, and I validate them by simulation before anyone sees a result.
Integrated models and data fusion
Most of the questions I’ve worked on came with several partial datasets rather than one clean one. Integrated population models, N-mixture models with auxiliary movement data, joint survival-and-infection models: I’ve spent a decade getting heterogeneous data streams to agree on a single posterior.
Causal inference and experimental design
A carbon credit is a counterfactual claim: how much carbon would not exist without the intervention. Paired control plots, matched baselines, additionality tests, power analysis by simulation. I would rather spend the effort on the design than try to recover it in the analysis.
Survival and time-to-event
Hierarchical time-to-event models, cause-specific mortality with competing risks, and constrained generalized additive models that let theory shape the hazard. Published in Methods in Ecology and Evolution, and the same methods apply to trees, deer, customers, or hardware.
Spatial and spatiotemporal statistics
Carbon on a landscape, disease across a region, animals on the move. In most of my work, spatial dependence has been the thing of interest rather than a nuisance to correct for.
Forecasting with uncertainty
Ex-ante carbon forecasts decades out. Population forecasts under alternative management. In both cases the interval around the forecast, and the reason it is that wide, is what actually gets used.
Machine learning
Random forest, boosted trees, anomaly detection, PCA, feature engineering. Semi-supervised anomaly detection to infer behavioral states from movement time series. I reach for ML when prediction is the goal and interpretability isn’t the constraint, and for Bayesian models when it is.
Computation and governance
Distributed workflows (one 720× speedup), reproducible pipelines, MLflow, CI code review, simulation-based validation. I treat whether someone else can re-run a model as part of whether it is finished.
AI-assisted analysis
I use Claude Code, ChatGPT, and Cursor daily, inside a spec-driven workflow: written specs, one branch and PR per change, CI, and a human statistical review on every merge. The workflow exists so that the speed from the agents doesn’t come at the cost of correctness.
Stack: Python (numpy, pandas, scikit-learn, SQLAlchemy), R (tidyverse, ggplot2, NIMBLE, JAGS), SQL and PostgreSQL, Databricks, AWS, Google Earth Engine, MLflow, Docker, Git and CI, Windmill, Claude Code, ChatGPT, Cursor.