Matlab: ошибка использования gammaln при построении психометрических функций

Я использую набор инструментов psignifit для построения психометрических функций из набора данных. Мой код выглядит примерно так:

load data.mat
options = struct; 
options.sigmoidname = 'logistic';
result = psignifit(data,options);  % this is where the error occurs
result.Fit
result.conf_Intervals
plotPsych(result)

и мои данные имеют практически ту же форму, что и примеры данных, приведенные в наборе инструментов,

data =    [...
0.0010,   45.0000,   90.0000;...
0.0015,   50.0000,   90.0000;...
0.0020,   44.0000,   90.0000;...
0.0025,   44.0000,   90.0000;...
0.0030,   52.0000,   90.0000;...
0.0035,   53.0000,   90.0000;...
0.0040,   62.0000,   90.0000;...
0.0045,   64.0000,   90.0000;...
0.0050,   76.0000,   90.0000;...
0.0060,   79.0000,   90.0000;...
0.0070,   88.0000,   90.0000;...
0.0080,   90.0000,   90.0000;...
0.0100,   90.0000,   90.0000];

Когда я запускаю демонстрацию, функция plotPsych возвращает фигуру, как и предполагалось, но когда я запускаю свой скрипт, я получаю следующую серию ошибок. Мой вопрос: почему я получаю сообщение об ошибке при использовании gammaln и что может быть правильным решением?

Error using gammaln
Input must be nonnegative.

Error in logLikelihood (line 75)
    p     = p + gammaln(n - k + b);

Error in psignifitCore>@(X)-logLikelihood(data,options,X(1),X(2),X(3),X(4),X(5)) (line 80)
fun = @(X) -logLikelihood(data, options, X(1), X(2), X(3), X(4), X(5));

Error in fminsearch (line 325)
x(:) = xr; fxr = funfcn(x,varargin{:});

Error in psignifitCore (line 97)
  Fit = fminsearch(fun, x0,optimiseOptions); %MATLAB standard choice

Error in psignifit (line 242)
result = psignifitCore(data, options);

Error in signifit_myscript (line 31)
result = psignifit(data,HDDV);

В прошлом я успешно запускал набор инструментов для своих данных, поэтому сначала попытался перезапустить Matlab, но безрезультатно. Затем я попытался удалить и снова добавить psignifit-master к пути, но это также не решило проблему.

Заранее спасибо.


person Ava    schedule 09.01.2018    source источник


Ответы (1)


У меня была такая же проблема при запуске функции psignifit с моими данными 2AFC.

Причина была очень проста: функция psignifit вызывает это сообщение об ошибке, если вы пытаетесь обработать данные, превышающие пределы от 0 до 1, например 1.0000000001.

person Stephen Hoerpel    schedule 30.01.2019