Как изменить линейную регрессию в 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 тоже по той же причине.) Извините за это!

Другие вопросы по тегам