如何为多元回归模型编写动态代码,自动计算r平方值和输出数据

时间:2017-02-27 10:43:22

标签: python scikit-learn regression linear-regression

我有一个像这样的csv文件,

<div class="row h-50">
    <div class="col-sm-12 h-100 d-table">
        <div class="card card-block d-table-cell align-middle">
            I am centered vertically
        </div>
    </div>
</div>

其中T_yield是因变量,Rain,EC,OC .... Fe是自变量。

我想检查哪个多模型适合计算T_yield。

例如:
1)T_yield = b0 + b1 * Rain

2)T_yield = b0 + b1 * PH

3)T_yield = b0 + b1 * Ec

11)T_yield = b0 + b1 * Rain + b2 * PH

12)T_yield = b0 + b1 * Rain + b2 * EC

: :

T_yield = b0 + b1 * Rain + b2 * PH + b3 * Ec + b4 * OC + b5 * N + b6 * P + b7 * K ......等等。 那么,如何为多元回归编写一个动态代码,它将显示所有类型的r方形值组合

我正在使用此代码:

T_yield Rain    PH  EC  OC  N   P   K   S   Zn  Fe  
6854.5  85.25   1   0   0   0   2   2   2   1   1   
4494.2  75.475  1   0   0   0   2   2   2   2   1   
1449    43.56   1   0   0   0   2   2   2   2   1   
4024.3  127.9   1   0   0   0   2   2   2   2   2   
2659.2  81.89   1   0   0   0   2   2   2   2   2   
4807.1  49.02   1   0   0   0   1   2   2   1   1   
1845.8  37.35   1   0   0   0   1   2   2   1   0   
4599.2  98.26   1   0   0   0   2   2   2   2   2   
4811.7  82.36   1   0   0   0   2   2   2   2   1   
4796.6  66.52   1   0   0   0   1   2   2   1   1   
1806.7  41.75   1   0   0   0   1   2   2   1   1   

所以,我可以获得Rain的r平方值。 接下来我添加了下一个自变量。

import pandas as pd
data = pd.read_csv('/home/desktop/regression.csv')
import statsmodels.formula.api as smf
lm = smf.ols(formula='Total_yield ~ Rain', data=data).fit() 
lm.summary()

接下来我可以获得Rain + PH的r平方值

下一步再添加另一个变量。

import statsmodels.formula.api as smf
lm = smf.ols(formula='Total_yield ~ Rain+ PH', data=data).fit() 
lm.summary()

那么。那么它有什么方法可以自动打印所有类型的多模型的r-square值?

1 个答案:

答案 0 :(得分:3)

我和@PeterE所建议的是,不是对不同的自变量使用多行和多次训练,而是只使用一次所有自变量。

import pandas as pd
data = pd.read_csv('/home/desktop/regression.csv')
import statsmodels.formula.api as smf
lm = smf.ols(formula='Total_yield ~ Rain+PH+EC+OC+N+P+K+S+Zn+Fe', data=data).fit() 
lm.summary()

即仅使用所有自变量一次。 不要手动执行所有不同的组合。该算法非常智能,可以决定保留哪些变量以及哪些变量不存在。

这导致输出:

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                T_yield   R-squared:                       0.609
Model:                            OLS   Adj. R-squared:                  0.348
Method:                 Least Squares   F-statistic:                     2.335
Date:                Tue, 28 Feb 2017   Prob (F-statistic):              0.169
Time:                        10:40:16   Log-Likelihood:                -91.598
No. Observations:                  11   AIC:                             193.2
Df Residuals:                       6   BIC:                             195.2
Df Model:                           4                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
Intercept    237.3697    150.151      1.581      0.165      -130.037   604.776
Rain          46.8455     27.206      1.722      0.136       -19.726   113.417
PH           237.3697    150.151      1.581      0.165      -130.037   604.776
EC          3.591e-13    2.4e-13      1.499      0.185     -2.27e-13  9.45e-13
OC          5.245e-15   2.75e-13      0.019      0.985     -6.67e-13  6.77e-13
N                   0          0        nan        nan             0         0
P           1970.3552   1727.567      1.141      0.298     -2256.848  6197.558
K            474.7395    300.302      1.581      0.165      -260.073  1209.552
S            474.7395    300.302      1.581      0.165      -260.073  1209.552
Zn         -2877.5614   1582.540     -1.818      0.119     -6749.898   994.775
Fe          -575.9214   1194.274     -0.482      0.647     -3498.205  2346.362
==============================================================================
Omnibus:                        2.245   Durbin-Watson:                   2.342
Prob(Omnibus):                  0.325   Jarque-Bera (JB):                0.892
Skew:                           0.010   Prob(JB):                        0.640
Kurtosis:                       1.605   Cond. No.                     1.68e+35
==============================================================================

如您所见,coefECOC的{​​{1}}值为0或非常接近0.这意味着T_yield主要独立于他们。这可以从您的数据中确认,因为EC,OC和N中的所有值都是0.