遇到了适合二项式逻辑回归的问题,因为结果似乎在语言之间是可疑的。花了很长时间研究这个问题并寻找在线建议,(尝试所有数据变化以防万一),我相信它归结为MATLAB用于glmfit
的拟合程序(我有偷偷摸摸的怀疑)它是一个最大似然估计,而python和R使用IRLS / IWLS。)
我首先在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结果的建议,我将不胜感激。
答案 0 :(得分:0)
由于这是一个非常普遍的问题,没有任何细节,这里是一个部分答案,根据我对R,Stata和statsmodels的比较也很一般,我没有matlab。
GLM是最大似然(或准最大似然)模型。参数估计应独立于优化器,无论是IRLS还是其他。差异可能来自数值精度问题,不同的收敛标准或对不明确问题的不同处理。
首先,您需要通过比较各个包的设计矩阵来检查它们实际上是在估算相同的模型。两个主要来源是默认是否包含常量,以及如何编码分类变量。
其次,检查数据是否允许定义良好的模型。不同包装的主要区别在于处理奇异或几乎单一的情况,以及它们如何在Logit和类似模型的情况下处理完美分离。
第三,也许这是一个编码错误。由于您没有提供可复制的示例,因此无法分辨。
答案 1 :(得分:0)
我遇到了类似的基于泊松的GLM的问题:由Matlab和R给出的结果系数是完全不同的。经过一番调查,我发现在Matlab和R之间构造设计矩阵的方式存在细微差别。在GLM回归中,其中一个分类变量通常被视为“参考”(以强制解释变量之间的线性独立性) ?我不确定,这是一个很好的问题)。虽然Matlab只是通过从设计矩阵中删除它的出现而忽略了引用变量(删除了相应的列),但R不仅删除了引用变量的出现(删除了列),而且还将“-1”设置为行中的所有其他变量。引用变量将独占发生。结果是一组不同的系数,但预测的响应完全相同。这有意义吗?
我能让Matlab和R返回相同答案的唯一方法是手动为Matlab编写设计矩阵。我希望这会有所帮助。