代码如下:
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()
)
提前谢谢!
答案 0 :(得分:2)
哦,你发现了一个有趣的错误。
首先,错误消息不是在谈论数据中的数字。当您在公式中键入文字编号时会发生该错误消息,例如在"y ~ 3*x"
中它会引发该错误,因为它不喜欢3。
但你的公式中没有任何数字,所以发生了什么?好吧,你在公式解析器中遇到了一个错误:它检查某些东西是否为数字的方式是检查你是否可以将它传递给int(...)
或float(...)
并获得一个值。但是在Python中,float("inf")
是一个有效的表达式,它返回表示无穷大的浮点值,即使单独的inf
不是Python中的数字。
我在这里提交了错误:https://github.com/pydata/patsy/issues/118
现在的解决方法是避免使用字符串inf
作为其中一列的名称。 (出于同样的原因,你也应该避免nan
。)抱歉!