当使用.summary()
函数使用pandas statsmodels时,OLS回归结果包括以下字段。
coef std err t P>|t| [0.025 0.975]
如何获得标准化系数(不包括截距(,类似于SPSS中可实现的系数?
您只需要先使用 z 分布(即 z 分数(对原始数据帧进行标准化,然后执行线性回归。
假设您将数据帧命名为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
将显示标准化(β(系数,以便您可以比较它们对因变量的影响。
笔记:
- 请记住,您需要
.dropna()
。否则,如果列有任何缺失值,stats.zscore
将返回列的所有NaN
。 - 您可以使用手动选择列,但请确保您选择的所有列都是数字,而不是使用
.select_dtypes()
。 - 如果您只关心标准化(β(系数,也可以使用
result.params
仅返回它。它通常会以科学记数法的方式显示。您可以使用类似round(result.params, 5)
的东西来对它们进行圆角。
我们可以用外显子的标准差来变换估计的params
。 results.t_test(变换(计算线性变换变量的参数表。
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()
您可以通过取标准偏差来转换非标准化系数。 标准化系数 (Beta( 是驱动因素分析的要求。下面是对我有用的代码。 X 是自变量,y 是因变量,系数是系数,由 ols 中提取 (model.params(。
sd_x = X.std()
sd_y = Y.std()
beta_coefficients = []
# Iterate through independent variables and calculate beta coefficients
for i, col in enumerate(X.columns):
beta = coefficients[i] * (sd_x[col] / sd_y)
beta_coefficients.append([col, beta])
# Print beta coefficients
for var, beta in beta_coefficients:
print(f' {var}: {beta}')