我有一个这样的csv文件,

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


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

我想检查哪种多重模型最适合计算T_yield。

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

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平方值的所有组合类型,

我正在使用此代码:

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的r平方值。
接下来,我添加下一个自变量。

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


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

接下来再次添加另一个变量。

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


等等,有什么办法可以自动打印所有类型的多种模型的r平方值?

最佳答案

我和@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
==============================================================================


如您所见,coefECOCN值为0或非常接近0。这意味着T_yield基本上独立于它们。可以从您的数据中确认这一点,因为EC,OC和N中的所有值均为0。

关于python - 如何为多元回归模型编写动态代码自动计算r平方值和输出数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42483683/

10-12 16:38