7

背景:我正在研究一个类似于链接 [1] 中描述的非线性逻辑回归的问题(我的问题更复杂,但链接 [1] 对于本文的下一部分来说已经足够了)。将我的结果与与 R 包并行获得的结果进行比较,我得到了相似的系数结果,但(非常近似)相反的 logLikelihood。

假设: matlab中fitnlm给出的logLikelihood实际上是负LogLikelihood。(请注意,这会损害 Matlab 的 BIC 和 AIC 计算)

推理:在[1]中,同一个问题通过两种不同的方法解决。ML-approach/ 通过定义负对数似然并使用 fminsearch 进行优化。GLS 方法/通过使用 fitnlm。

ML 方法后的负对数似然为:380

GLS 方法后的负对数似然为:-406

我想第二个应该至少乘以(-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

4

2 回答 2

2

这个答案(现在)仅详细说明使用了哪些代码。请参阅下面汤姆·莱恩的回答以获得实质性答案。

基本上,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.AIC 和 ModelCriterion.BIC,因为它们是使用 model.LogLikelihood 计算的(“认为”它是 logLikelihood)。

要获得 BIC/AIC/... 的相应公式,请键入:

edit classreg.regr.modelutils.modelcriterion
于 2020-02-28T08:12:45.630 回答
1

这是来自 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。所以这两件事并没有真正的可比性。您需要将正态值转换为与二项式分布中的各个结果相对应的相同离散区间上的概率。

于 2020-03-13T16:52:39.807 回答