如何在python 3.6中修改线性回归?

时间:2018-01-21 21:10:19

标签: python statsmodels patsy

代码如下:

import statsmodels.formula.api as smf

df = pd.read_csv('reg_data.csv')
f = 'inf ~ rh*temp*tl*Tt*C(location)'   
lm = smf.ols(formula = f, data=df).fit()

但它总是给我一个错误:

numbers besides '0' and '1' are only allowed with **

文件中的数据都是不同的数字。有些有2位小数,有些则有更多。 有什么想法解决这个问题并得到回归总结? (lm.summary()

提前谢谢!

1 个答案:

答案 0 :(得分:2)

哦,你发现了一个有趣的错误。

首先,错误消息不是在谈论数据中的数字。当您在公式中键入文字编号时会发生该错误消息,例如在"y ~ 3*x"中它会引发该错误,因为它不喜欢3。

但你的公式中没有任何数字,所以发生了什么?好吧,你在公式解析器中遇到了一个错误:它检查某些东西是否为数字的方式是检查你是否可以将它传递给int(...)float(...)并获得一个值。但是在Python中,float("inf")是一个有效的表达式,它返回表示无穷大的浮点值,即使单独的inf不是Python中的数字。

我在这里提交了错误:https://github.com/pydata/patsy/issues/118

现在的解决方法是避免使用字符串inf作为其中一列的名称。 (出于同样的原因,你也应该避免nan。)抱歉!