【发布时间】:2016-08-12 23:47:36
【问题描述】:
我想创建一个通用脚本来对多个数据集执行线性回归。每个数据集将具有相同的 y 变量,称为“SM”和未知数量的 x 变量。如果我确切地知道哪些数据将用于回归,我就能够成功地做到这一点。例如:
import pandas
import statsmodels.api as sm
import statsmodels.formula.api as smf
from patsy import dmatrices
data = pandas.read_excel('test.xlsx')
然后,打印数据给出:
print data
SM Glass mag
SiO2 73.500 77.27 0.00
TiO2 0.233 0.15 7.37
Al2O3 11.230 11.49 0.00
FeO* 4.240 2.85 92.46
MnO 0.082 0.06 0.00
MgO 0.040 0.00 0.00
CaO 0.410 0.22 0.00
Na2O 5.630 4.58 0.00
K2O 4.620 3.38 0.00
然后我准备数据框并进行线性回归:
y, X = dmatrices('SM ~ Glass + mag', data=data, return_type='dataframe')
mod = sm.OLS(y, X)
res = mod.fit()
print res.summary()
这一切都很好。但是,我希望能够导入一个列数未知的 excel 文件,这样我就可以做到:
y, X = dmatrices('SM ~ X1 + X2 + X3 + ... Xn', data=data, return_type='dataframe')
我可以解析数据框并提取单个列,但我不知道如何将它们放入进行线性回归所需的公式中。任何建议表示赞赏!
【问题讨论】:
-
您希望获得什么信息。只是系数? R 方? T 统计数据?
-
现在,只有 res.summary()。我主要只是想要系数。
-
如果除
'SM'之外的所有其他列都是您的外生变量,并且您将只进行线性回归(即,它将始终是x1 + x2 + x3...而永远不会是x1 * x2 + x3...),有一个更简单的方法:endog = df['SM']; exog=df.drop('SM', axis=0); mod = sm.OLS(endog, exog); res = mod.fit(); res.summary()... -
@Kartik 哦,我知道这是如何工作的。很有帮助,谢谢!
标签: python pandas linear-regression statsmodels patsy