【问题标题】:What method does MATLAB's glmfit use for logistic regression?MATLAB 的 glmfit 使用什么方法进行逻辑回归?
【发布时间】:2016-01-06 08:13:50
【问题描述】:

遇到了拟合二项式逻辑回归的问题,因为结果似乎在语言之间存在问题。花了很长时间研究这个问题并寻找在线建议,(为了以防万一,我也尝试了所有数据变化),我相信这归结为 MATLAB 用于glmfit 的拟合程序(我有一个偷偷摸摸的怀疑它是最大似然估计,而 python 和 R 使用 IRLS/IWLS。)

我首先使用 MATLAB 在 MATLAB 中运行我的问题:

[b_lr,dev,stats] = glmfit(x',y','binomial','link','logit');

其中x' 是一个带有预测变量的多列数组,row length = y,y 是一个响应向量,它具有基于标准的二进制结果。

从那次计算开始,我开始使用 python/R2py。 我在 Python 和 R 中尝试了相同的程序,使用 statsmodels 中的 glmfit 等价物拟合 logit 链接的二项式,并获得了一组不同的回归系数(请注意,这两个的响应向量的位置发生了变化):

glm_logit = sm.GLM(yvec.T,Xmat,family = sm.families.Binomial()).fit()

并使用 R2py:

%R glm.out = glm(Data ~ ONI + Percentiles, family=binomial(logit), data=df) 

如果有人能澄清 MATLAB 的用途,如果有人对如何在 python 或 R 中复制 MATLAB 结果有任何建议,将不胜感激。

【问题讨论】:

    标签: python r matlab model-fitting


    【解决方案1】:

    由于这是一个非常笼统的问题,没有任何细节,这里是一个部分答案,基于我对 R、Stata 和 statsmodels 的比较,我没有 matlab。

    GLM 是最大似然(或准最大似然)模型。参数估计应该独立于优化器,无论是 IRLS 还是其他。差异可能来自数值精度问题、不同的收敛标准或对不明确问题的不同处理。

    首先,您需要通过比较不同包的设计矩阵来检查它们是否确实在估计相同的模型。两个主要来源是默认情况下是否包含常量,以及分类变量的编码方式。

    其次,检查数据是否允许定义明确的模型。包之间的主要区别在于处理奇异或几乎奇异的情况,以及在 Logit 和类似模型的情况下它们如何处理完美分离。

    第三,可能是编码错误。由于您没有提供可复制的示例,因此无法判断。

    【讨论】:

      【解决方案2】:

      我在拟合基于泊松的 GLM 时遇到了类似的问题:Matlab 和 R 给出的结果系数完全不同。经过一番调查,我发现在 Matlab 和 R 之间构建设计矩阵的方式存在细微差别。在 GLM 回归中,通常将其中一个分类变量作为“参考”(以强制解释变量之间的线性独立性? 我不确定,这是个好问题)。虽然 Matlab 通过从设计矩阵中删除它的出现(相应的列被删除)来简单地忽略参考变量,但 R 不仅删除了参考变量的出现(删除了列),而且还将“-1”设置为行中的所有其他变量,其中参考变量将专门出现。结果是一组不同的系数,但预测的响应完全相同。这有意义吗?

      让 Matlab 和 R 返回相同答案的唯一方法是为 Matlab 手动组合设计矩阵。我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2019-07-11
        • 1970-01-01
        • 2015-12-19
        • 2015-02-21
        • 2018-08-11
        • 1970-01-01
        • 2018-04-25
        • 2020-09-27
        • 2017-09-25
        相关资源
        最近更新 更多