我有一个这样的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
==============================================================================
如您所见,
coef
,EC
,OC
的N
值为0或非常接近0。这意味着T_yield基本上独立于它们。可以从您的数据中确认这一点,因为EC,OC和N中的所有值均为0。关于python - 如何为多元回归模型编写动态代码自动计算r平方值和输出数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42483683/