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

时间:2016-08-29 21:57:58

标签: 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]=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(documentation)设置GLM.fit():

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

glm_model.fit(start_params=None, maxiter=100, method='IRLS', tol=1e-08, scale=None, cov_type='nonrobust', cov_kwds=None, use_t=None, **kwargs)

我们如何使用Statsmodels获取Matlab glmfit结果?

谢谢!

0 个答案:

没有答案