Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

When I am fitting data with a pointwise function using NonlinearModelFit, the produced FittedModel fails to calculate variances and errors. Consider a toy example:

Clear[f, data];
data = {{1, 7.4}, {2, 1.9}, {3, 6.}};
f[1.] = 2. a + b;
f[2.] = 3. a/b;
f[3.] = 3. b/a + a;    
fit = NonlinearModelFit[data, f[t], {a, b}, t, Method -> NMinimize]

When I take


it gives a correct result {a -> 2.19044, b -> 2.95013}. However, when I try to take


it throws exception, since values of a and b can not be substituted in fit["Function"] (that's my guess).

I found the following obvious workaround:

Clear[f, g, h];
f[1.] = 1; g[1.] = 0; h[1.] = 0;
f[2.] = 0; g[2.] = 1; h[2.] = 0;
f[3.] = 0; g[3.] = 0; h[3.] = 1;
fit = 
  NonlinearModelFit[data, (2 a + b) f[t] + 3 a/b g[t] + (3 b /a + a) h[t],
    {a, b}, t, Method -> NMinimize]  

but it is not elegant at all.

What is the best way to obtain a complete FittedModel using NonlinearModelFit with a pointwise functions?

share|improve this question
up vote 2 down vote accepted

You should redefine the function:

Clear[f, data];
data = {{1, 7.4}, {2, 1.9}, {3, 6.}};
f[1., a_, b_] := 2. a + b;
f[2., a_, b_] := 3. a/b;
f[3., a_, b_] := 3. b/a + a;

Now it does what you want:

In[]:=  fit = NonlinearModelFit[data, f[t, a, b], {a, b}, t, Method -> NMinimize]
Out[]:= FittedModel[f[t,2.1904, 2.95013]]
In[]:=  fit["EstimatedVariance"]
Out[]:= 0.165311
share|improve this answer

I think you may be overly complicating this problem. Here's a way to find the a and b that minimize your three equations:

FindMinimum[(7.4 - (2. a + b))^2 + (1.9 - (3. a/b))^2 + (6. - (3. b/a + a))^2, {a, b}]

which gives {0.165311, {a -> 2.19044, b -> 2.95013}}

So now you know the a and b that best fit the data, you can calculate whatever statistics you want from them. In particular, the first term (the error 0.165311) is a measure of how good the functions with the given parameters fit the data. Since I used the squared error, this is much like the variance of the fit.

share|improve this answer
Thanks! I'm doing in this way, but I tried to find a way to generate all statistics automatically using NonlinearModelFit. – Stanislav Poslavsky Feb 5 '14 at 17:34

Your Answer


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

Not the answer you're looking for? Browse other questions tagged or ask your own question.