Tell me more ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I would like to know how to perform a nonlinear regression on a table with measurement errors. The table consists of two columns, and both have errors. I've been watching some tutorial and it is very well explained how to make a nonlinear regression if only one of the columns have errors.

This is the complete data I import, which is acquired from an oscilloscope (first column is time and second is voltage):

data1={{0,2.8},{0.01,4},{0.02,7.2},{0.03,9.6},{0.04,12},{0.05,14.4},{0.06,16.4},{0.07,18.4},{0.08,20},{0.09,21.2},{0.1,22.4},{0.11,23.2},{0.12,24},{0.13,24.4},{0.14,24.4},{0.15,24.4},{0.16,24},{0.17,23.6},{0.18,22.4},{0.19,21.6},{0.2,20.4},{0.21,19.2},{0.22,17.6},{0.23,16},{0.24,14.4},{0.25,12.4},{0.26,10.4},{0.27,8.4},{0.28,6.4},{0.29,4.4},{0.3,2.4},{0.31,0.4},{0.32,-1.2},{0.33,-3.2},{0.34,-5.2},{0.35,-6.8},{0.36,-8.4},{0.37,-9.6},{0.38,-10.8},{0.39,-12},{0.4,-13.2},{0.41,-14},{0.42,-14.4},{0.43,-15.2},{0.44,-15.6},{0.45,-15.6},{0.46,-15.6},{0.47,-15.6},{0.48,-15.2},{0.49,-14.8},{0.5,-14.4},{0.51,-13.6},{0.52,-12.8},{0.53,-12},{0.54,-11.2},{0.55,-10},{0.56,-8.8},{0.57,-7.6},{0.58,-6.4},{0.59,-5.2},{0.6,-4},{0.61,-2.8},{0.62,-1.2},{0.63,0},{0.64,1.2},{0.65,2},{0.66,3.2},{0.67,4.4},{0.68,5.2},{0.69,6},{0.7,6.8},{0.71,7.6},{0.72,8.4},{0.73,8.8},{0.74,9.2},{0.75,9.6},{0.76,9.6},{0.77,10},{0.78,10},{0.79,9.6},{0.8,9.6},{0.81,9.2},{0.82,8.8},{0.83,8.4},{0.84,8},{0.85,7.2},{0.86,6.8},{0.87,6},{0.88,5.2},{0.89,4.8},{0.9,4},{0.91,3.2},{0.92,2.4},{0.93,1.6},{0.94,0.8},{0.95,-0.4},{0.96,-0.8},{0.97,-1.6},{0.98,-2.4},{0.99,-3.2},{1,-3.6},{1.01,-4.4},{1.02,-4.8},{1.03,-5.2},{1.04,-5.6},{1.05,-6},{1.06,-6},{1.07,-6.4},{1.08,-6.4},{1.09,-6.4},{1.1,-6.4},{1.11,-6.4},{1.12,-6.4},{1.13,-6},{1.14,-6},{1.15,-5.6},{1.16,-5.2},{1.17,-4.8},{1.18,-4.4},{1.19,-4},{1.2,-3.6},{1.21,-3.2},{1.22,-2.4},{1.23,-2},{1.24,-1.2},{1.25,-0.8},{1.26,-0.4},{1.27,0},{1.28,0.8},{1.29,1.2},{1.3,1.6},{1.31,2},{1.32,2.4},{1.33,2.8},{1.34,2.8},{1.35,3.2},{1.36,3.6},{1.37,3.6},{1.38,4},{1.39,4},{1.4,4},{1.41,4},{1.42,4},{1.43,4},{1.44,4},{1.45,3.6},{1.46,3.6},{1.47,3.2},{1.48,3.2},{1.49,2.8},{1.5,2.4},{1.51,2.4},{1.52,2},{1.53,1.6},{1.54,1.2},{1.55,1.2},{1.56,0.8},{1.57,0.4},{1.58,0},{1.59,-0.4},{1.6,-0.4},{1.61,-0.8},{1.62,-1.2},{1.63,-1.6},{1.64,-1.6},{1.65,-1.6},{1.66,-2},{1.67,-2},{1.68,-2.4},{1.69,-2.4},{1.7,-2.8},{1.71,-2.8},{1.72,-2.8},{1.73,-2.8},{1.74,-2.8},{1.75,-2.8},{1.76,-2.4},{1.77,-2.4},{1.78,-2.4},{1.79,-2},{1.8,-2},{1.81,-2},{1.82,-1.6},{1.83,-1.6},{1.84,-1.2},{1.85,-1.2},{1.86,-0.8},{1.87,-0.8},{1.88,-0.4},{1.89,-0.4},{1.9,0},{1.91,0},{1.92,0.4},{1.93,0.4},{1.94,0.8},{1.95,0.8},{1.96,1.2},{1.97,1.2},{1.98,1.2},{1.99,1.2},{2,1.6},{2.01,1.6},{2.02,1.6},{2.03,1.6},{2.04,1.6},{2.05,1.6},{2.06,1.6},{2.07,1.6},{2.08,1.6},{2.09,1.6},{2.1,1.2},{2.11,1.2},{2.12,1.2},{2.13,1.2},{2.14,1.2},{2.15,0.8},{2.16,0.8},{2.17,0.8},{2.18,0.4},{2.19,0.4},{2.2,0.4},{2.21,0},{2.22,0},{2.23,-0.4},{2.24,-0.4},{2.25,-0.4},{2.26,-0.4},{2.27,-0.8},{2.28,-0.8},{2.29,-0.8},{2.3,-0.8},{2.31,-0.8},{2.32,-0.8},{2.33,-1.2},{2.34,-1.2},{2.35,-1.2},{2.36,-1.2},{2.37,-1.2},{2.38,-1.2},{2.39,-1.2},{2.4,-1.2},{2.41,-0.8},{2.42,-0.8},{2.43,-0.8},{2.44,-0.8},{2.45,-0.8},{2.46,-0.8},{2.47,-0.4},{2.48,-0.4},{2.49,-0.4},{2.5,-0.4},{2.51,-0.4},{2.52,-0.4},{2.53,0},{2.54,0},{2.55,0},{2.56,0},{2.57,0.4},{2.58,0.4},{2.59,0.4},{2.6,0.4},{2.61,0.4},{2.62,0.4},{2.63,0.4},{2.64,0.4},{2.65,0.8},{2.66,0.8},{2.67,0.8},{2.68,0.8},{2.69,0.8},{2.7,0.8},{2.71,0.8},{2.72,0.4},{2.73,0.4},{2.74,0.4},{2.75,0.4},{2.76,0.4},{2.77,0.4},{2.78,0.4},{2.79,0.4},{2.8,0.4},{2.81,0},{2.82,0},{2.83,0},{2.84,0},{2.85,0},{2.86,0},{2.87,0},{2.88,0},{2.89,-0.4},{2.9,-0.4},{2.91,-0.4},{2.92,-0.4},{2.93,-0.4},{2.94,-0.4},{2.95,-0.4},{2.96,-0.4},{2.97,-0.4},{2.98,-0.4},{2.99,-0.4},{3,-0.4},{3.01,-0.4},{3.02,-0.4},{3.03,-0.4},{3.04,-0.4},{3.05,-0.4},{3.06,-0.4},{3.07,-0.4},{3.08,-0.4},{3.09,-0.4},{3.1,-0.4},{3.11,-0.4},{3.12,-0.4},{3.13,-0.4},{3.14,0},{3.15,0},{3.16,0},{3.17,0},{3.18,0},{3.19,0},{3.2,0},{3.21,0},{3.22,0},{3.23,0},{3.24,0},{3.25,0},{3.26,0},{3.27,0},{3.28,0.4},{3.29,0.4},{3.3,0.4},{3.31,0.4},{3.32,0.4},{3.33,0.4},{3.34,0.4},{3.35,0.4},{3.36,0},{3.37,0},{3.38,0},{3.39,0},{3.4,0},{3.41,0},{3.42,0},{3.43,0},{3.44,0},{3.45,0},{3.46,0},{3.47,0},{3.48,0},{3.49,0},{3.5,0},{3.51,0},{3.52,0},{3.53,0},{3.54,0},{3.55,0},{3.56,-0.4},{3.57,-0.4},{3.58,-0.4},{3.59,-0.4},{3.6,-0.4},{3.61,-0.4},{3.62,-0.4},{3.63,-0.4},{3.64,-0.4},{3.65,-0.4},{3.66,-0.4},{3.67,-0.4},{3.68,-0.4},{3.69,-0.4},{3.7,-0.4},{3.71,-0.4},{3.72,-0.4},{3.73,0},{3.74,0},{3.75,0},{3.76,0},{3.77,0},{3.78,0},{3.79,0},{3.8,0},{3.81,0},{3.82,0},{3.83,0},{3.84,0},{3.85,0},{3.86,0},{3.87,0},{3.88,0},{3.89,0},{3.9,0},{3.91,0},{3.92,0},{3.93,0},{3.94,0},{3.95,0},{3.96,0},{3.97,0},{3.98,0},{3.99,0},{4,0},{4.01,0},{4.02,0},{4.03,0},{4.04,0},{4.05,0},{4.06,0}}

This is the code I used to fit with errors on the voltage (second) column.

y = b Exp[-a x] Sin[ω x + φ];
yerror = ConstantArray[0.001, Length[data1]];
nlm = NonlinearModelFit[
  data1, 
  y, {a, b, ω, φ}, x, 
  Weights -> yerror^(-2), VarianceEstimatorFunction -> (1 &)
 ]

Now, this gives a nice fit but my table consists of two columns, with different measurement errors. Is there any way to make a fit that considers both errors?

Thanks in advance.

share|improve this question
Then why not do two fits, one for each error set? – J. M. Sep 20 '12 at 17:45
4  
I would probably combine the errors first -- either through a simple Sqrt[xError^2+yError^2], or, since you have a model function, propagating that error through and finding a yErrorFromX and then using the overall error as Sqrt[yErrorFromX^2+yError^2]. Then you can just use the single weight function. – tkott Sep 20 '12 at 17:54
3  
@Juan see for example en.wikipedia.org/wiki/Total_least_squares – belisarius Sep 20 '12 at 18:09
4  
Also docs.google.com/… – belisarius Sep 20 '12 at 18:11
1  
@belisarius that documentation seems to say that the approach suggested above by tkott is used in this case. It is approximate but may be good enough if the errors are not large. As for the EDA package, AFAICT it is not useful for anything as of version 7 (with NonlinearModelFit et al.), although the documentation may still be of some interest. – Oleksandr R. Sep 20 '12 at 19:53
show 17 more comments

Know someone who can answer? Share a link to this question via email, Google+, Twitter, or Facebook.

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.