【问题标题】:how to get standardised (Beta) coefficients for multiple linear regression using statsmodels如何使用 statsmodels 获得多元线性回归的标准化(Beta)系数
【发布时间】:2018-11-23 08:10:33
【问题描述】:

使用 pandas statsmodels 的.summary() 函数时,OLS 回归结果包括以下字段。

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

我如何获得标准化系数(不包括截距),类似于 SPSS 中可实现的系数?

【问题讨论】:

    标签: python pandas regression statsmodels coefficients


    【解决方案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。 resultsmodel.fit() 返回的对应结果实例。例如model = OLS(y, x)results = model.fit()
    • 你也标准化响应变量>
    • 我的错误github.com/statsmodels/statsmodels/issues/…
    【解决方案2】:

    您只需要首先使用 z 分布(即 z-score)标准化原始 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_dtypes(),但请确保您选择的所有列都是数字。
    3. 如果您只关心标准化(beta)系数,您也可以使用result.params 只返回它。它通常以科学记数法的方式显示。您可以使用 round(result.params, 5) 之类的东西来舍入它们。

    【讨论】:

      猜你喜欢
      • 2016-02-28
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 2015-11-13
      相关资源
      最近更新 更多