我有一个像这样的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值?
答案 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
==============================================================================
如您所见,coef
,EC
,OC
的{{1}}值为0或非常接近0.这意味着T_yield主要独立于他们。这可以从您的数据中确认,因为EC,OC和N中的所有值都是0.