Statistics · Bayesian inference
Identifiability limits of a two-scale biofilter model
Abstract
A packed-bed biofilter removing odorous VOCs is modeled as a biofilm reaction–diffusion boundary-value problem coupled to a column advection–dispersion–reaction boundary-value problem, with Monod kinetics inside the film. The coupled model is calibrated to 2006 bench concentration profiles by affine-invariant MCMC, one nested BVP solve per likelihood evaluation, and validated by simulation-based calibration. SBC passes for all twelve parameters: the inference is unbiased. The posterior-predictive design volume still spans V ∈ [1393, 698131] m³ and 53.4% of draws admit no feasible bed. The cause is structural, not numerical: the bench inlet concentrations sit far below the half-saturation constant Ks, so the column runs entirely pseudo-first-order and only the ratio Rmax/Ks is identifiable. Refitting the one first-order rate the data constrain collapses the interval to [1527, 3493] m³, all draws feasible, whose conservative quantile reproduces the original point design.
keywords: structural non-identifiability · Monod kinetics · simulation-based calibration · design under uncertainty
## The bench column and the two-scale model
The object is a laboratory biofilter: a 0.5 m packed bed, 0.1 m diameter, fed 4 L/min of a synthetic waste-gas stream at an empty-bed contact time near 59 s, sampled at three to five axial ports over several runs in 2006. The target compounds are two branched pentanols (3- and 2-methyl-1-butanol) and the aldehyde hexanal. Two length scales govern removal. Inside the biofilm, substrate S(z) diffuses and is consumed by immobilized biomass:
with no-flux at the support and bulk concentration at the interface. Here Df is the effective diffusivity in the wet film, Rmax the maximum volumetric reaction rate, and Ks the half-saturation constant. Non-dimensionalizing (1) gives the Thiele modulus φ = Lf√(Rmax/(DfKs)) and an effectiveness factor η ∈ (0,1], the fraction of biomass actually fed. At column scale the gas concentration Cg obeys an advection–dispersion–reaction BVP with Danckwerts boundary conditions, the biofilm entering only through η. One forward solve is the η-table BVP family plus the column BVP.
The effectiveness factor is the numerical bottleneck, and solving the stiff biofilm BVP everywhere is both slow and unreliable. effectiveness_factor is a three-regime closure: the first-order form η = tanh(φ)/φ at small surface load; the exact deep-film closed form for φ ≥ 12, validated below 0.1% against the solved BVP; the solved BVP in between, with the reaction term clamped to s ≥ 0 so the integrator cannot reach the 1 + s pole. This is roughly 15× faster on the η-table and repairs an earlier fallback that returned an order-of-magnitude-low η in the diffusion-limited corner where the solver failed to converge.
## Calibration, sensitivity, and the identifiability wall
Reaction order is chosen before calibration by a hierarchical Bayesian fit of the three integrated rate laws to each compound, compared by PSIS-LOO rather than by R² on a linearized transform that is undefined once a concentration hits zero. Hexanal is rate-limiting with posterior probability 0.977, so it sets the industrial duty. The two-scale model is then calibrated with emcee, embedding one coupled BVP solve in every likelihood evaluation: 40000 steps, effective sample size ≈ 3397, run on UGA's Sapelo2 cluster under SLURM with MPI-parallel walkers and HDF5 checkpoint/resume across a 14-hour wall time. A Sobol analysis over 147,456 model evaluations apportions variance in removal across the seven log-parameters. Simulation-based calibration over 400 replicated datasets closes the loop.
SBC is unambiguous: every one of the twelve calibrated parameters is rank-uniform (chi-square p between 0.13 and 0.96). The sampler has no detectable bias. The design stage nonetheless fails. Propagating the calibrated posterior through the industrial scale-up gives a median required volume of 2579 m³ but a 95% credible interval of [1393, 698131] m³, and only 53.4% of posterior draws yield a bed that meets the removal target under the 3:1 length-to-diameter rule. A calibrated inference producing a design interval three orders of magnitude wide is not a bug to be tuned away: it is the correct report of what the data contain.
The mechanism is structural non-identifiability. The bench inlet concentrations sit far below Ks, so S / (Ks + S) → S/Ks and the reaction is pseudo-first-order everywhere in the column. Only the lumped ratio Rmax/Ks is identifiable; Rmax and Ks separately are not. The free Henry constant and the Lf–a product add further confounding, and near-complete removal in the first third of the bed leaves the slow-kinetics tail of the posterior unbounded. SBC passes precisely because the posterior faithfully represents that unbounded tail.
## The identifiable first-order reanalysis
The second model infers only the identifiable quantity: one macroscopic first-order rate k1 (1/s) per compound and one observation-noise scale, with Df and the Henry constants fixed to literature values and axial dispersion dropped (bed Péclet number >> 100, so plug flow). The forward column model is then analytic,
so the likelihood is milliseconds per evaluation instead of a nested BVP solve and the whole pipeline runs on a laptop. Calibration is 64 walkers × 8000 steps, acceptance 0.51, effective sample size ≈ 3972, elapsed 164 s. The rate constants are tight, and hexanal — the design-critical compound — is well constrained.
| Compound | k1 median (1/s) | 95% CI (1/s) |
|---|---|---|
| 3-methyl-1-butanol | 0.0678 | [0.0596, 0.0781] |
| 2-methyl-1-butanol | 0.0635 | [0.0571, 0.0712] |
| hexanal | 0.0584 | [0.0405, 0.0926] |
SBC over 400 datasets, chains thinned by 12, confirms the reanalysis is calibrated where it matters: all three k1 are rank-uniform (p = 0.81 / 0.11 / 0.55), including hexanal at 0.55. The nuisance noise scales for the two alcohols are mildly non-uniform (p ≈ 0.003 / 0.006), a small real effect from under-exploring the more correlated rate–noise posterior of the steeper decays. It survives 400 datasets and thinning, and it touches no reported quantity.
## Design under uncertainty
Sizing the industrial bed for 95% hexanal removal at the report duty (Q = 2831.68 m³/min, the 3:1 length-to-diameter rule) propagates the k1 posterior through the analytic model. The required volume has median 2421 m³ and 95% credible interval [1527, 3493] m³, a factor of 2.3 rather than 500, and every posterior draw is feasible. Sizing on the conservative 95th percentile of k1 gives 3277 m³ (L = 33.5 m, D = 11.2 m), which reproduces the original report's point design of ≈ 3500 m³ (L = 34.23 m, D = 11.41 m) — now carrying an interval instead of a bare number.
The mechanistic model is not wrong and its HPC machinery is not wasted; it is the correct tool for data rich enough to resolve Rmax and Ks separately. These bench data are not that. Separating the two constants requires experiments that leave the starvation regime: higher inlet load approaching Ks, shorter contact time, or transient step-loading. Until such data exist, the identifiable first-order rate is the whole of what the biofilter tells you, and the honest design is an interval.
Python (NumPy, SciPy, pandas) · emcee affine-invariant MCMC · ArviZ PSIS-LOO · SALib Sobol · h5py checkpointing · mpi4py + schwimmbad on UGA Sapelo2 under SLURM.
Liam Kozma · liam@liamkozma.com