Parameter estimation for ODEs with scarce ground truth data

Hello all, I’m relatively new to Julia.

A brief background about my problem: I have an ODE scheme that gives me the concentration profile over time for 10 compounds and the model contains 11 parameters. However, I am trying to estimate the 11 parameters based on the ground truth data of just 4 of these 10 compounds, that are available only at four different time intervals.

I have tried using Optim.jl for the parameter estimation to search locally around the initial guess but this gives me a result that is worse/not too different than the initial guess.

[note: one of the 4 concentrations evolves to large values (by at least an order of magnitude) compared to the other 3.]

I’d like to know if anyone has worked on similar problems or know how to handle parameter estimation problems when you have scarce data to fit the model on.

I’m sorry if this is a repeat of earlier queries. I’d be happy to provide more context in case I am not clear.

What optimizer? Did you try global optimizers from BlackBoxOptim? The following is usually my go-to for checking global optimization results:

https://docs.sciml.ai/Optimization/stable/optimization_packages/blackboxoptim/#Example

If you’re wondering whether in principle your data is sufficient for estimating your model, you can do a structural identifiability analysis:

https://docs.sciml.ai/StructuralIdentifiability/stable/tutorials/local_identifiability/

This an be done without rewriting your code by using modelingtoolkitize and using the MTK form:

https://docs.sciml.ai/ModelingToolkit/stable/tutorials/modelingtoolkitize/

https://docs.sciml.ai/ModelingToolkit/stable/tutorials/parameter_identifiability/

Hello Chris, thanks for your reply.

Yes, I tried a few global optimizers from BBO. But they were returning negative values of the parameters I’m interested in, when they’re supposed to >=0 always. Then, I started using Fminbox() after defining the lower and upper bounds as I wanted to search locally.

Okay, these are things I’ve not tried yet. Thanks for the suggestions.

did you set the box constraints? The example I posted used box constraints.

Hello Chris,

No, I hadn’t set the box constraints back then.