在回归输出中命名解释变量

Naming explanatory variables in regression output

我的每个变量都是一个单独的列表。

我正在使用在此处另一个线程上找到的方法。

import numpy as np
import statsmodels.api as sm

y = [1,2,3,4,3,4,5,4,5,5,4,5,4,5,4,5,6,5,4,5,4,3,4]

x = [
     [4,2,3,4,5,4,5,6,7,4,8,9,8,8,6,6,5,5,5,5,5,5,5],
     [4,1,2,3,4,5,6,7,5,8,7,8,7,8,7,8,7,7,7,7,7,6,5],
     [4,1,2,5,6,7,8,9,7,8,7,8,7,7,7,7,7,7,6,6,4,4,4]
     ]

def reg_m(y, x):
    ones = np.ones(len(x[0]))
    X = sm.add_constant(np.column_stack((x[0], ones)))
    for ele in x[1:]:
        X = sm.add_constant(np.column_stack((ele, X)))
    results = sm.OLS(y, X).fit()
    return results

我唯一的问题是,在我的回归输出中,解释变量被标记为 x1、x2、x3 等。想知道是否可以将它们更改为更有意义的名称?

谢谢

通过 source 搜索,似乎 summary() 方法确实支持使用您自己的名称作为解释变量。所以:

results = sm.OLS(y, X).fit()
print results.summary(xname=['Fred', 'Mary', 'Ethel', 'Bob'])

给我们:

                                OLS Regression Results
==============================================================================
Dep. Variable:                      y   R-squared:                       0.535
Model:                            OLS   Adj. R-squared:                  0.461
Method:                 Least Squares   F-statistic:                     7.281
Date:                Mon, 11 Apr 2016   Prob (F-statistic):            0.00191
Time:                        22:22:47   Log-Likelihood:                -26.025
No. Observations:                  23   AIC:                             60.05
Df Residuals:                      19   BIC:                             64.59
Df Model:                           3
Covariance Type:            nonrobust
==============================================================================
                 coef    std err          t      P>|t|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
Fred           0.2424      0.139      1.739      0.098        -0.049     0.534
Mary           0.2360      0.149      1.587      0.129        -0.075     0.547
Ethel         -0.0618      0.145     -0.427      0.674        -0.365     0.241
Bob            1.5704      0.633      2.481      0.023         0.245     2.895
==============================================================================
Omnibus:                        6.904   Durbin-Watson:                   1.905
Prob(Omnibus):                  0.032   Jarque-Bera (JB):                4.708
Skew:                          -0.849   Prob(JB):                       0.0950
Kurtosis:                       4.426   Cond. No.                         38.6
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

有几种方法可以调整参数的名称

summary 有一个应该有效的 xname 关键字,可用于更改摘要中的名称 table http://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.RegressionResults.summary.html

当使用公式创建模型时,参数名称内部存储在模型的 data 属性中,model.data.xnames,并且可以通过 model.exog_names 访问。

没有合适的 setter 方法并且不支持 "officially" (*),但是 AFAIK model.data.xnames 可以被覆盖,即分配一个新的字符串列表。 列表 model.exog_names 只应就地更改,因为它只是 model.data.xnames 的另一个参考。 这些更改将是永久性的,并会影响参数名称的所有使用。

(*) AFAIK:没有用于更改 exog_names 或 xnames 的单元测试。一些模型需要根据需要估计的额外参数更改名称。内部重构正朝着使用 param_names 的方向发展,因此我们可以将参数名称与解释变量名称分开。后者在几个较新的模型中是必需的,但与 OLS 和许多其他传统模型无关。