scipy curve_fit using linear weights instead of sigmas

Viewed 1473

I've been fiddling around with the scipy.optimize.curve_fit() function today and I can get some pretty good results, but I'm not too sure how to make some data points weigh more than others.

Let me briefly summarize the situation: We need to fit a decay curve to some data gathered from our experiment. Some data points occur more often than others and these are determined by a weight. So that means that if we have one data point A with weight x and one data point B with weight 2x, this would be equal to fitting a curve to one data point A with weight x and two data point B's with weight x.

The problem is that the curve_fit function can only be weighed using uncertainties, i.e. sigmas. I thought I was smart to translate each weight into the proportion of the sum of all the weights and then translate this proportion to a Z-score (I thought that would be equivalent in terms of uncertainty) and while this gave a MUCH better fit than not weighing anything at all, I still found through some unit testing that it wasn't when comparing weights of 0.5 to having two actual data points.

How can I use curve_fit with linear weights?

PS: Through unit testing I've found that fitting data points:

(0,0) with weight 1
(1,0) with weight 1
(1,1) with weight 1
(1,1) with weight 1

yields an equal result as fitting:

(0,0) with weight 1
(1,0) with weight 1
(1,1) with weight 0.70710678118

And peculiarly, sin(0.5*pi) = 1 and sin(0.25*pi) = 0.70710678118!! So there seems to be a sine relation here? Unfortunately my math skills are limiting me in understanding the exact relation.

Also, sin(0.125*pi) unfortunately doesn't equal a weight of 3 or 4...

0 Answers
Related