如何使用statsmodels获得多元线性回归的标准化(Beta)系数

时间:2018-06-13 16:47:25

标签: python pandas regression statsmodels coefficients

使用pandas statsmodels使用.summary()函数时,OLS回归结果包括以下字段。

coef    std err          t      P>|t|      [0.025      0.975]

如何获得标准化系数(不包括截距),与SPSS中可实现的类似?

2 个答案:

答案 0 :(得分:1)

我们可以将估计的params转换为exog的标准偏差。 results.t_test(transformation)计算线性变换变量的参数表。

AFAIR,以下内容应产生β系数和相应的推论统计数据。

计算标准差,但将常数设置为1。

std = model.exog.std(0)
std[0] = 1

然后使用results.t_test并查看params_table。 np.diag(std)创建了一个转换params的对角矩阵。

tt = results.t_test(np.diag(std))
print(tt.summary()
tt.summary_frame()

答案 1 :(得分:0)

您只需要先使用z分布(即z得分)标准化原始DataFrame,然后执行线性回归即可。

假设您将数据框命名为df,它具有自变量x1x2x3,并具有因变量y。考虑以下代码:

import pandas as pd
import numpy as np
from scipy import stats
import statsmodels.formula.api as smf

# standardizing dataframe
df_z = df.select_dtypes(include=[np.number]).dropna().apply(stats.zscore)

# fitting regression
formula = 'y ~ x1 + x2 + x3'
result = smf.ols(formula, data=df_z).fit()

# checking results
result.summary()

现在,coef将向您显示标准化的(beta)系数,以便您可以比较它们对因变量的影响。

注意:

  1. 请记住,您需要.dropna()。否则,stats.zscore将返回所有NaN的列,如果它缺少任何值。
  2. 您可以手动选择列,而不要使用.select_dtypes(),但要确保选择的所有列都是数字。
  3. 如果您只关心标准化的(beta)系数,则也可以使用result.params来返回它。通常,它将以科学符号的方式显示。您可以使用类似round(result.params, 5)之类的符号对其进行四舍五入。