python - 如何使用 statsmodels 获得多元线性回归的标准化(Beta)系数
问题描述
使用.summary()
pandas statsmodels 函数时,OLS 回归结果包括以下字段。
coef std err t P>|t| [0.025 0.975]
如何获得标准化系数(不包括截距),类似于 SPSS 中可实现的系数?
解决方案
您只需要首先使用 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)
来环绕它们。
推荐阅读
- python - 'builtin_function_or_method' 对象不可下标 Python 中的错误
- javascript - 鼠标悬停图像地图?
- oracle - 'ORA-46632: 基于密码的密钥库不存在' 但文件 ewallet.p12 存在
- .net - 在 ASP.Net Core 3.0 中使用端点路由配置多个 HttpVerb
- html - 使用 CSS 隐藏数据过滤器
- c - 搜索用于创建通用 makefile 以编译多个程序的解决方案
- barcode - 在数据窗口中读取条形码(powerbuilder)
- c# - 我的 strings.Replace 函数没有像我预期的那样工作。( C# --> Visual Basic.NET)
- node.js - [ERR_ASSERTION]:任务函数必须指定 GULP 4
- qt - 未调用模型中的 QListView moveRow()