forum.alglib.net http://forum.alglib.net/ |
|
logisticfit4 not giving expected results http://forum.alglib.net/viewtopic.php?f=2&t=3871 |
Page 1 of 1 |
Author: | ericlinner [ Thu Nov 01, 2018 2:46 pm ] | |||
Post subject: | logisticfit4 not giving expected results | |||
I'm evaluating alglib (C++) for possible use in an embedded application that needs to do some 4PL curve fit calculations. The OS is QNX (Posix) and the CPU is x86-64. I have successfully built the library and run the test_c.cpp checks so I think it is functional. I also ran the example attached to logisticfit4 and it gave the expected results. However, when I input some sample project data, I'm not getting the expected results. I will attach the test program and the csv file containing the input data. For this data, MATLAB and the ZunZun online 4PL calculator give almost identical results very different from Alglib: Param Alglib MATLAB ZunZun a 0.0850 0.0988 0.0986 b 10 31.9422 31.9155 c 22.4659 17.535 17.535 d 5.42989 1.0139 1.0140 Here is the output I get when I run my test with Alglib: a = 0.0850456 b = 10 c = 22.4659 d = 5.42989 iterations = 118 RMS error = 0.0469343 Avg error = 0.0303365 Avg relative error = 0.192896 Max error = 0.1581 R squared = 0.960512 I tried to use logisticfit45x() to affect the results but I don't understand how to use the controls and the results didn't improve. Can you tell me what I'm doing wrong?
|
Author: | Sergey.Bochkanov [ Thu Nov 01, 2018 5:38 pm ] |
Post subject: | Re: logisticfit4 not giving expected results |
Hi! I confirm the bug, and I think that I know the reason behind it (unable to test it at my work PC, already out of office, but I am pretty sure). For stability reasons ALGLIB puts constraints on parameters being fitted and relaxes them several times. However, when logistic fitting functionality was developed it was thought that constraining B to be in [0.1,10] range is good enough option. It is exponent, after all - no one imagined that actual data will need an exponent equal to 30! So, relaxing this constraint should help to solve the problem. You can do so yourself as follows (I do not give you line numbers because your trial is customized with license boilerplate, line numbers are different from that of the publicly available ALGLIB): 1) find a line with comment "Relax constraints, run optimization one more time" in the interpolation.cpp. It is the only such line in the file. 2) below this line find bndl.ptr.p_double[1] = 0.1; and replace 0.1 by 0.01 3) below this line find bndu.ptr.p_double[1] = 10.0; and replace 10.0 by 100.0 Does it help? |
Author: | ericlinner [ Thu Nov 01, 2018 5:59 pm ] |
Post subject: | Re: logisticfit4 not giving expected results |
Yes, that worked. Thank you for the quick response. The output is now as expected: a = 0.0985619 b = 31.9155 c = 17.535 d = 1.01404 iterations = 140 RMS error = 0.0112002 Avg error = 0.00489951 Avg relative error = 0.019207 Max error = 0.0658847 R squared = 0.997751 I do have a comment about limiting b, even to 0.01 to 100. According to https://www.myassays.com/four-parameter-logistic-regression.html, b is the slope of the curve at c (the inflection point). I can imagine cases where the slope could be outside of 0.01-100, although it is a matter of units (e.g. using kg vs. g). But I would think to be on the safe side you would allow 0.001 to 1000. |
Author: | Sergey.Bochkanov [ Fri Nov 02, 2018 10:06 am ] |
Post subject: | Re: logisticfit4 not giving expected results |
1) I am a bit concerned about robustness here. It is easy to ruin entire optimization session by making step in a wrong place (too large/small b and/or c). In your case relaxing bounds worked fine, but I still have to think about how to make it robust in the general case. 2) is it possible to use your data as a part of our test suite? :-) of course, I can generate something synthetic like that... but generally it is a matter of good taste to include cases which failed in the tests :) |
Author: | ericlinner [ Fri Nov 02, 2018 1:38 pm ] |
Post subject: | Re: logisticfit4 not giving expected results |
Yes, that is fine |
Author: | Sergey.Bochkanov [ Fri Nov 02, 2018 2:40 pm ] |
Post subject: | Re: logisticfit4 not giving expected results |
Thank you, Eric! |
Page 1 of 1 | All times are UTC |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |