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

时间:2016-04-12 01:08:51

标签: python regression statsmodels

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

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

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等。想知道是否有可能将这些更改为更有意义的名称?

由于

2 个答案:

答案 0 :(得分:5)

通过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.

答案 1 :(得分:0)

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

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

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

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

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