Undefined function or variable 'lgamma'.

Hello experts,
as the title says I have a problem with this undefined 'lgamma'.
I'm trying to run an ANCOVA using the function aoctool() but it stops and throws me that error.
Below I post the entire message:
Undefined function or variable 'lgamma'.
Error in betapdf (line 60)
+ lgamma (a + b) - lgamma (a) - lgamma (b));
Error in betainv (line 87)
h = (betacdf (y_old, a, b) - x) ./ betapdf (y_old, a, b);
Error in finv (line 58)
inv(k) = ((1 ./ betainv (1 - x(k), n/2, m/2) - 1) * n / m);
Error in aoctool>getyvalues (line 777)
crit = sqrt(df1 * finv(1-alpha/bonf, df1, df2));
Error in aoctool (line 335)
[newy, ~, ycov] = getyvalues(allx, allgrps, model, stats, ud);
I'm working on MATLAB R2018b.
Is this related with a MATLAB issue or (most likely) it's just me erroneously defining the ANCOVA variables?
Thank you for your help!
Marco

3 Comments

I'm aware of a gamma function but not a function named lgamma.
It is a variable name? Did the function come from some other source outside of Matlab?
You need to Contact Support .
I opened betapdf.m in the MATLAB editor, and the last line of the function is 58. That line contains a betaln call, and there are no gamma function calls of any kind in the entire function. (I am using R2020b.)
@Adam Danz , @Star Strider thank you for your feedback.
The lgamma is from a internal MATLAB code, that's why I'm concerned about this error.
I will contact the support, I guess..
Thanks anyway!

Sign in to comment.

 Accepted Answer

I see relevant discussion at https://github.com/wichmann-lab/psignifit/issues/4 . The implications there are that you are picking up a third-party toolbox version of finv that is invoking a third-party betainv that is invoking a third-party betapdf that is asking for lgamma that has not been part of MATLAB for a number of years.
The fix would be to move those that third-party finv (and related) out of your MATLAB path.
By the way, the Mathworks long gamma function is gammaln() these days, and is part of basic MATLAB.

4 Comments

Thank you for your reply.
I explored where the finv and betainv and betapdf were located and all of them were part of SPM12 software (for brain imaging analysis).
>> which finv
C:\Users\me\Desktop\MATLAB\R2018b_windows\spm12\spm12\external\fieldtrip\external\stats\finv.m
>> which betainv
C:\Users\me\Desktop\MATLAB\R2018b_windows\spm12\spm12\external\fieldtrip\external\stats\betainv.m
>> which betapdf
C:\Users\me\Desktop\MATLAB\R2018b_windows\spm12\spm12\external\fieldtrip\external\stats\betapdf.m
Because right now I don't need to use SPM software, I removed that specific folder from the path
rmpath C:\Users\me\Desktop\MATLAB\R2018b_windows\spm12\spm12\external\fieldtrip\external\stats
And now everything works fine.
I really appreciate your help!
I got the same issue when I use pTFCE within Matlab2020b. The problem is, I need to use SPM12, is there anything I could do to fix it?
Cannot you use one before or after the other? Like, use SPM and than make calculations using pTFE upon removing that folder from the path.
https://miplab.epfl.ch/BrainHack/Practice/Utilities/spm12/external/fieldtrip/external/stats/ shows that lgamma.m is defined in the external/fieldtrip/external/stats directory that is installed with SPM12.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!