Как изменить линейную регрессию в Python 3.6?
Код выглядит так:
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 ответ
О, вы нашли интересную ошибку.
Во-первых, сообщение об ошибке не говорит о цифрах в ваших данных. Это сообщение об ошибке появляется, когда вы вводите литеральное число в формулу, как в "y ~ 3*x"
это вызовет эту ошибку, потому что ей не нравятся 3.
Но в вашей формуле нет чисел, так что же происходит? Ну, вы попали в баг в парсере формул: он проверяет, является ли число числом, проверяя, можете ли вы передать его int(...)
или же float(...)
и получить значение обратно. Но в Python, float("inf")
является допустимым выражением, которое возвращает значение с плавающей запятой, представляющее бесконечность, даже если обычный inf
один не число в Python.
Я подал ошибку здесь: https://github.com/pydata/patsy/issues/118
И обходной путь пока состоит в том, чтобы избежать использования строки inf
как имя для одного из ваших столбцов. (Вам, вероятно, следует избегать nan
тоже по той же причине.) Извините за это!