Matlab与Python Statsmodels中的GLM.fit():为什么结果不同?

Matlab与Python Statsmodels中的GLM.fit():为什么结果不同?,matlab,numpy,glm,statsmodels,Matlab,Numpy,Glm,Statsmodels,Matlab的glmfit在哪些方面的实现方式与Python statsmodels的GLM.fit()不同? 以下是他们在我的数据集上的结果比较: 这表示通过运行GLM拟合生成的图209权重: V:(100000,209)预测变量(设计矩阵) y:(100000,1)响应变量 误差平方和:18.140615678 一个具体的例子 为什么这些不同?首先,这里是Matlab中的一个具体示例: yin = horzcat(y,ones(size(y))); [weights_mat, d0, st0

Matlab的
glmfit
在哪些方面的实现方式与Python statsmodels的
GLM.fit()
不同?

以下是他们在我的数据集上的结果比较: 这表示通过运行GLM拟合生成的图209权重:

V
:(100000,209)预测变量(设计矩阵)

y
:(100000,1)响应变量

误差平方和:18.140615678

一个具体的例子 为什么这些不同?首先,这里是Matlab中的一个具体示例:

yin = horzcat(y,ones(size(y)));
[weights_mat, d0, st0]=glmfit(V, yin,'binomial','probit','off',[],[],'off');
让我们试试Python中的等效方法:

import statsmodels.api as sm

## set up GLM
y = np.concatenate((y, np.ones( [len(y),1] )), axis=1)
sm_probit_Link = sm.genmod.families.links.probit
glm_binom = sm.GLM(sm.add_constant(y), sm.add_constant(V_design_matrix), family=sm.families.Binomial(link=sm_probit_Link))
     # statsmodels.GLM format: glm_binom = sm.GLM(data.endog, data.exog, family)

## Run GLM fit
glm_result = glm_binom.fit()
weights_py = glm_result.params 

## Compare the difference
weights_mat_import = Matpy.get_output('w_output.mat', 'weights_mat') # imports matlab variables
print SSE(weights_mat_import, weights_python)
让我们检查一下文件 Matlab中的glmfit:

[b,dev,stats]=glmfit(X,y,distr)

Python()中的GLM.fit()设置:

glm_model=sm.glm(endog,exog,family=None,offset=None,exposure=None,missing='None',**kwargs)

glm_模型.fit(起始参数=None,最大值=100,方法=IRLS',tol=1e-08,标度=None,cov_类型=nonrobust',cov_kwds=None,使用=None,**kwargs)

如何使用Statsmodels获得Matlab
glmfit
结果?


谢谢大家!

我不熟悉所涉及的工具,但装配通常需要一个起始值。这在
statsmodels
版本的文档中有明确说明,我怀疑这两种实现的起始值是不同的。不幸的是,MATLAB甚至没有提到这些方面的任何内容,因此要获得完全相同的结果可能会很困难。你真的需要完全相同的结果吗?如果两种结果的拟合优度相同,那么它们可能是同样好的拟合。我不熟悉所涉及的工具,但拟合通常需要一个起始值。这在
statsmodels
版本的文档中有明确说明,我怀疑这两种实现的起始值是不同的。不幸的是,MATLAB甚至没有提到这些方面的任何内容,因此要获得完全相同的结果可能会很困难。你真的需要完全相同的结果吗?如果两个结果的拟合优度相同,则它们可能具有相同的拟合优度。