Небольшая ошибка в MATLAB R2017B LogLikelihood после фитнлм? - PullRequest
7 голосов
/ 20 февраля 2020

Справочная информация: Я работаю над проблемой, похожей на регрессию нелинейной логистики 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

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

Этот ответ (сейчас) только указывает, какой код используется. Пожалуйста, см. Ответ Тома Лейна ниже для подробного ответа.

По сути, fitnlm.m - это вызов NonLinearModel.fit.

При открытии NonLinearModel.m вы попадаете в строку 1209:

model.LogLikelihood = getlogLikelihood(model);

getlogLikelihood само описывается между строками 1234-1251.

Например:

 function L = getlogLikelihood(model)
            (...)
                L = -(model.DFE + model.NumObservations*log(2*pi) + (...) )/2;
            (...)

Обратите также внимание, что это заметно влияет на ModelCriterion.AI C и ModelCriterion.BI C, поскольку они вычисляются с использованием model.LogLikelihood («думая», что это logLikelihood).

Чтобы получить соответствующую формулу для BIC / AIC / ..., введите:

edit classreg.regr.modelutils.modelcriterion
1 голос
/ 13 марта 2020

это Том из MathWorks. Еще раз взглянем на приведенную формулу:

L = -(model.DFE + model.NumObservations*log(2*pi) + (...) )/2;

Помните, что нормальное распределение имеет коэффициент (1 / sqrt (2 * pi)), поэтому взятие журналов этого дает нам -log (2 * pi) / 2. Таким образом, знак минус происходит от этого, и это является частью вероятности записи. Значение свойства не является отрицательным логарифмическим правдоподобием.

Одна из причин различия в двух логарифмических значениях правдоподобия состоит в том, что значение «подхода ML» вычисляет что-то на основе дискретных вероятностей из биномиального распределения. Все они находятся в диапазоне от 0 до 1, и они складываются в 1. «Подход GLS» вычисляет что-то на основе плотности вероятности непрерывного нормального распределения. В этом примере стандартное отклонение от остатков составляет около 0,0462. Это приводит к значениям плотности, которые намного выше, чем 1 на пике. Так что две вещи на самом деле не сопоставимы. Вам нужно будет преобразовать нормальные значения в вероятности в тех же дискретных интервалах, которые соответствуют отдельным результатам биномиального распределения.

...