And*_*cio 9 python regression pandas statsmodels coefficients
.summary()使用 pandas statsmodels的函数时,OLS 回归结果包括以下字段。
coef std err t P>|t| [0.025 0.975]
Run Code Online (Sandbox Code Playgroud)
如何获得标准化系数(不包括截距),类似于 SPSS 中可实现的?
您只需要首先使用 z 分布(即 z 分数)标准化您的原始 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()
Run Code Online (Sandbox Code Playgroud)
现在,coef将向您显示标准化 (beta) 系数,以便您可以比较它们对因变量的影响。
笔记:
.dropna(). 否则,如果列有任何缺失值,stats.zscore将返回所有NaN列。.select_dtypes()您可以手动选择列而不是使用,但要确保您选择的所有列都是数字。result.params仅返回它。它通常以科学记数法的方式显示。你可以使用类似的东西round(result.params, 5)来圆它们。我们可以params通过 exog 的标准差来转换估计值。results.t_test(transformation) 计算线性变换变量的参数表。
AFAIR,以下应该产生贝塔系数和相应的推论统计数据。
计算标准差,但将其设置为 1 作为常数。
std = model.exog.std(0)
std[0] = 1
Run Code Online (Sandbox Code Playgroud)
然后使用 results.t_test 并查看 params_table。np.diag(std)创建一个对角矩阵来变换params.
tt = results.t_test(np.diag(std))
print(tt.summary()
tt.summary_frame()
Run Code Online (Sandbox Code Playgroud)