0

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

我首先使用以下方法在 MATLAB 中运行我的问题:

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

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

从那次计算开始,我开始使用 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 结果有建议,将不胜感激。

4

2 回答 2

0

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

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

于 2016-09-09T11:57:20.923 回答
0

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

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

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

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

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

于 2015-10-08T17:46:08.533 回答