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

问题描述 投票:0回答:2

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

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

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

谢谢

python regression statsmodels
2个回答
11
投票

搜索,似乎

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.

3
投票

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

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

当使用公式创建模型时,参数名称内部存储在模型的

data
属性
model.data.xnames
中,并且可以通过
model.exog_names
访问。

没有适当的 setter 方法,并且不“官方”(*)支持,但据我所知

model.data.xnames
可以被覆盖,即分配一个新的字符串列表。 列表
model.exog_names
只能就地更改,因为它只是
model.data.xnames
的另一个参考。 这些更改将是永久性的,并影响参数名称的所有使用。

(*) AFAIK:没有用于更改 exog_names 或 xnames 的单元测试。有些模型需要根据需要估计的额外参数更改名称。内部重构正朝着使用

param_names
的方向进行,因此我们可以将参数名称与解释变量名称分开。后者在几个较新的模型中是必需的,但与 OLS 和许多其他传统模型无关。

© www.soinside.com 2019 - 2024. All rights reserved.