Fitting parametric curves
I’m trying to figure out how to write an efficient fitting algorithm data that fits a parametric model, but with a parameter I cannot actually measure directly. I have a fitting method, but it’s absurdly inefficient (and I don’t trust it very much for that reason).
A brief introduction: this problem seems to have stumped Stackoverflow so I’m posing it here in the hopes that I get lucky. I’m using pseudo-pythonic language for the descriptions, but I think what I have is relatively straightforward. I’m hoping for one or more of the following:
Help revising my language so I’m actually asking for what I think
A module in python, r, matlab, Visual Basic (etc.) that does what I’m looking for. If I have a parallel module, I can search for the python equivalent more easily
A couple modules that together might help my fitting
Any other advice
The stackoverflow question (32133733) is posted below (minus pseudocode)
I have experimental data of the form (X,Y) and a theoretical model of the form (x(t;*params),y(t;*params)) where t is a physical (but unobservable) variable, and *paramsare the parameters that I want to determine. t is a continuous variable, and there is a 1:1 relationship between x and t and between y and t in the model.
In a perfect world, I would know the value of T (the real-world value of the parameter) and would be able to do an extremely basic least-squares fit to find the values of *params. (Note that I am not trying to "connect" the values of x and y in my plot, like in 31243002 or 31464345.) I cannot guarantee that in my real data, the latent value T is monotonic, as my data is collected across multiple cycles.
I'm not very experienced doing curve fitting manually, and have to use extremely crude methods without easy access to a basic scipy function. My basic approach involves:
Choose some value of *params and apply it to the model
Take an array of t values and put it into the model to create an array of model(*params) = (x(*params),y(*params))
Interpolate X (the data values) into model to get Y_predicted
Run a least-squares (or other) comparison between Y and Y_predicted
Do it again for a new set of *params
Eventually, choose the best values for *params
There are several obvious problems with this approach.
1) I'm not experienced enough with coding to develop a very good "do it again" other than "try everything in the solution space," of maybe "try everything in a coarse grid" and then "try everything again in a slightly finer grid in the hotspots of the coarse grid." I tried doing MCMC methods, but I never found any optimum values, largely because of problem 2
2) Steps 2-4 are super inefficient in their own right.
People I know have recommended using some sort of Expectation Maximization algorithm, but I don't know enough about that to code one up from scratch. I'm really hoping there's some awesome scipy (or otherwise open-source) algorithm I haven't been able to find that covers my whole problem, but at this point I am not hopeful.










