0

I am trying to fit an asymptotic curve to my data using gnuplot. It is a dataset showing reaction time results over a testing period. I have been able to plot the data and fit a straight line through it using the following code.

f(x) = a*x + c;
fit f(x) 'ReactionLearning.txt' using 1:2 via a,c

plot 'ReactionLearning.txt' using 1:2 with points lt 1 pt 3 notitle, \
    f(x) with lines notitle

Which gives the following result: https://i.sstatic.net/nsidL.jpg

However, as this is supposed to show a learning effect, an asymptotic curve would make a lot more sense because the increase in performance caused by a learning effect will eventually stop, making the line even out.

From what I understand asymptotic cuves are created with the f(x) = 1/x. So I changed my code to be

f(x) = 1/(a*x)
fit f(x) 'ReactionLearning.txt' using 1:2 via a

plot 'ReactionLearning.txt' using 1:2 with points lt 1 pt 3 notitle, \
    f(x) with lines notitle

However, I get this output: https://i.sstatic.net/J222G.jpg

Could someone explain what I am doing wrong here?

Thanks

1
  • You are using a completely wrong model. 1/x is not defined for x=0 and converges to y=0 for large x. Try "fitting" this function manually to your data set, you won't have much success. Commented May 27, 2015 at 13:19

1 Answer 1

1

There are many curves that show an asymptotic behavior, and 1/x is probably not the one that comes most often when describing physical or biological processes. Usually, these processes might show some sort of exponential decay. With the data that you show I don't think you can conclude anything about which model you should use, other than "it decays". If you already know what is the functional behavior you expect, that makes things different. That said, the general form of your 1/x curve should be f(x) = a/(x-x0) + c, which will probably give you some meaningful results when you fit to it:

f(x) = a/(x-x0) + c
fit f(x) "data" via a,c,x0

Since fitting might show instabilities for this kind of function if the initial values are bad, you should/might need to provide sensible initial values or reformulate the problem as a linear relation. You can do the latter by a change of variable y = 1/(x - x0) and do the fitting for different values of x0. Record the error in the fit (which is output by gnuplot) for each of them and see how the error gets minimized as a function of x0: it should be quadratic about the optimum value. Something like this:

f(x) = a*x + c
x0 = 1. # give some value for x0
fit f(x) "data" u (1./($1-x0)):2 via a,c # record fit errors for a and c
x0 = 3. # give some other value for x0
fit f(x) "data" u (1./($1-x0)):2 via a,c # record fit errors for a and c
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.