Справочная информация: Я работаю над проблемой, похожей на регрессию нелинейной логистики c, описанную в ссылке [1] (моя проблема более сложная, но для следующей достаточно ссылки [1] разделы этого поста). Сравнивая мои результаты с результатами, полученными параллельно с пакетом R, я получил аналогичные результаты для коэффициентов, но (очень приблизительно) противоположное logLikelihood.
Гипотеза: logLikelihood, данное fitnlm в Matlab на самом деле является отрицательным LogLikelihood. (Обратите внимание, что это ухудшает, следовательно, вычисления BI C и AI C с помощью Matlab)
Причина: в [1], та же проблема решается с помощью двух разных подходов. ML-подход / Определение отрицательного LogLikelihood и оптимизация с помощью fminsearch. Подход GLS / При использовании fitnlm.
Отрицательное LogLikelihood после ML-подхода составляет: 380
Отрицательное LogLikelihood после GLS-подхода: -406
I представьте, что второе должно быть хотя бы умножено на (-1)?
Вопросы: Я что-то пропустил? Достаточно ли (-1) коэффициента или этого простого исправления недостаточно?
Автономный код:
%copy-pasting code from [1]
myf = @(beta,x) beta(1)*x./(beta(2) + x);
mymodelfun = @(beta,x) 1./(1 + exp(-myf(beta,x)));
rng(300,'twister');
x = linspace(-1,1,200)';
beta = [10;2];
beta0=[3;3];
mu = mymodelfun(beta,x);
n = 50;
z = binornd(n,mu);
y = z./n;
%ML Approach
mynegloglik = @(beta) -sum(log(binopdf(z,n,mymodelfun(beta,x))));
opts = optimset('fminsearch');
opts.MaxFunEvals = Inf;
opts.MaxIter = 10000;
betaHatML = fminsearch(mynegloglik,beta0,opts)
neglogLH_MLApproach = mynegloglik(betaHatML);
%GLS Approach
wfun = @(xx) n./(xx.*(1-xx));
nlm = fitnlm(x,y,mymodelfun,beta0,'Weights',wfun)
neglogLH_GLSApproach = - nlm.LogLikelihood;
Источник:
[1] https://uk.mathworks.com/help/stats/examples/nonlinear-logistic-regression.html