如何使用 statsmodels 获得多元线性回归的标准化(Beta)系数
Posted
技术标签:
【中文标题】如何使用 statsmodels 获得多元线性回归的标准化(Beta)系数【英文标题】:how to get standardised (Beta) coefficients for multiple linear regression using statsmodels 【发布时间】:2018-11-23 08:10:33 【问题描述】:使用 pandas statsmodels 的.summary()
函数时,OLS 回归结果包括以下字段。
coef std err t P>|t| [0.025 0.975]
我如何获得标准化系数(不包括截距),类似于 SPSS 中可实现的系数?
【问题讨论】:
【参考方案1】:我们可以将估计的params
转换为 exog 的标准差。 results.t_test(transformation) 计算线性变换变量的参数表。
AFAIR,以下应该产生 beta 系数和相应的推论统计。
计算标准偏差,但将其设置为 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()
【讨论】:
这里的“模型”是什么?model
是任何模型实例,例如OLS 或 GLM。 results
是model.fit()
返回的对应结果实例。例如model = OLS(y, x)
和 results = model.fit()
你也标准化响应变量>
我的错误github.com/statsmodels/statsmodels/issues/…【参考方案2】:
您只需要首先使用 z 分布(即 z-score)标准化原始 DataFrame,然后执行线性回归。
假设您将数据框命名为 df
,它具有自变量 x1
、x2
和 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) 系数,以便您比较它们对因变量的影响。
注意事项:
-
请记住,您需要
.dropna()
。否则,如果列有任何缺失值,stats.zscore
将返回所有 NaN
。
您可以手动选择列而不是使用.select_dtypes()
,但请确保您选择的所有列都是数字。
如果您只关心标准化(beta)系数,您也可以使用result.params
只返回它。它通常以科学记数法的方式显示。您可以使用 round(result.params, 5)
之类的东西来舍入它们。
【讨论】:
以上是关于如何使用 statsmodels 获得多元线性回归的标准化(Beta)系数的主要内容,如果未能解决你的问题,请参考以下文章
Python:多元线性回归:statsmodels.formula.api.ols()