Python MATLAB';glmfit是否用于逻辑回归?
在拟合二项逻辑回归时遇到了一个问题,因为不同语言之间的结果似乎是可疑的。在花了很长一段时间研究这一点并寻找在线建议之后,(为了以防万一,我尝试了所有的数据变化),我相信这可以归结为MATLAB对Python MATLAB';glmfit是否用于逻辑回归?,python,r,matlab,model-fitting,Python,R,Matlab,Model Fitting,在拟合二项逻辑回归时遇到了一个问题,因为不同语言之间的结果似乎是可疑的。在花了很长一段时间研究这一点并寻找在线建议之后,(为了以防万一,我尝试了所有的数据变化),我相信这可以归结为MATLAB对glmfit使用了什么样的拟合过程(我暗自怀疑这是一个最大似然估计,而python和R使用IRLS/IWLS) 我首先在MATLAB中运行我的问题,使用: [b_lr,dev,stats] = glmfit(x',y','binomial','link','logit'); 其中,x'是一个具有预测器的
glmfit
使用了什么样的拟合过程(我暗自怀疑这是一个最大似然估计,而python和R使用IRLS/IWLS)
我首先在MATLAB中运行我的问题,使用:
[b_lr,dev,stats] = glmfit(x',y','binomial','link','logit');
其中,x'
是一个具有预测器的多列数组,行长度=y
,y
是一个响应向量,具有基于标准的二进制结果
自从那次计算之后,我开始使用python/R2py。
我在Python和R中尝试了相同的过程,使用statsmodels中的等效glmfit拟合logit链接的二项式,并获得了一组不同的回归系数(请注意,这两种模型的响应向量位置会发生变化):
使用R2py:
%R glm.out = glm(Data ~ ONI + Percentiles, family=binomial(logit), data=df)
如果有人能澄清MATLAB使用了什么,如果有人对如何用python或R复制MATLAB结果有建议,我将不胜感激。因为这是一个非常一般的问题,没有任何细节,这里有一个部分答案,根据我对R、Stata和statsmodels的比较,也是非常一般的,我没有MATLAB GLM是一种最大似然(或准最大似然)模型。参数估计应该独立于优化器,无论它是IRL还是其他。差异可能来自数值精度问题、不同的收敛标准或对定义不清的问题的不同处理 首先,您需要通过比较包之间的设计矩阵来检查他们是否实际估计了相同的模型。两个主要来源是默认情况下是否包含常量,以及分类变量的编码方式 其次,检查数据是否允许定义良好的模型。软件包之间的主要区别在于处理单一或几乎单一的情况,以及如何处理Logit和类似模型中的完美分离
第三,可能是编码错误。由于您没有提供可复制的示例,这是不可能的。在拟合基于泊松的GLM时,我遇到了类似的问题:Matlab和R给出的结果系数非常不同。经过一些调查,我发现Matlab和R之间的设计矩阵构造方式存在细微差异。在GLM回归中,一个分类变量通常被视为“参考”(以强制解释变量之间的线性独立性?我不确定,这是一个好问题)。虽然Matlab只是通过从设计矩阵中删除引用变量来忽略引用变量(相应的列被删除),但R不仅删除引用变量的引用(列被删除),而且还将“-1”设置为引用变量唯一出现的行中的所有其他变量。结果是一组不同的系数,但预测的响应完全相同。这有意义吗 我能让Matlab和R返回相同答案的唯一方法是为Matlab手动合成设计矩阵。我希望这有帮助
%R glm.out = glm(Data ~ ONI + Percentiles, family=binomial(logit), data=df)