首页 > 解决方案 > 如何使用 statsmodels 获得多元线性回归的标准化(Beta)系数

问题描述

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

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

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

标签: pythonpandasregressionstatsmodelscoefficients

解决方案


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

假设您将数据框命名为df,它具有自变量x1x2、 和x3,以及因变量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)来环绕它们。

推荐阅读