簡體   English   中英

如何使用statsmodels獲得多元線性回歸的標准化(Beta)系數

[英]how to get standardised (Beta) coefficients for multiple linear regression using statsmodels

使用 .summary .summary() function 使用 pandas 統計模型時,OLS 回歸結果包括以下字段。

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

我如何獲得標准化系數(不包括截距),類似於 SPSS 中可實現的?

您只需要先使用 z 分布(即 z 分數)對原始 DataFrame 進行標准化,然后執行線性回歸。

假設您將 dataframe 命名為df ,它具有自變量x1x2x3以及因變量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 列,而不是使用.select_dtypes() ,但要確保您選擇的所有列都是數字。
  3. 如果您只關心標准化(beta)系數,您也可以使用result.params只返回它。 它通常以科學記數法的方式顯示。 您可以使用類似round(result.params, 5)的東西來舍入它們。

我們可以通過 exog 的標准偏差來轉換估計的params 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()

您可以通過采用標准偏差來轉換非標准化系數。 標准化系數(Beta)是驅動分析的要求。 以下是對我有用的代碼。 X 是自變量,y 是因變量,系數是 coef,由 (model.params) 從 ols 中提取。

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}')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM