Почему Statsmodels OLS не поддерживает чтение в столбцах с несколькими словами? - PullRequest
0 голосов
/ 17 октября 2018

Я экспериментировал с функциями Semporn lmplot () и Statsmodels .ols () для простых графиков линейной регрессии и связанных с ними значений p, r-квадрата и т. Д.

Я заметил, что когдаЯ указываю, какие столбцы я хочу использовать для lmplot, я могу указать столбец, даже если для него есть несколько слов:

import seaborn as sns
import pandas as pd
input_csv = pd.read_csv('./test.csv',index_col = 0,header = 0)
input_csv

CSV Plot

sns.lmplot(x='Age',y='Count of Specific Strands',data = input_csv)
<seaborn.axisgrid.FacetGrid at 0x2800985b710>

enter image description here

Однако, если я пытаюсь использовать ols, я получаю ошибку для ввода в «Count of Specific Strands» в качестве моей зависимой переменной (у меня есть толькоперечислил последнюю пару строк в ошибке):

import statsmodels.formula.api as smf
test_results = smf.ols('Count of Specific Strands ~ Age',data = input_csv).fit()

File "<unknown>", line 1
    Count of Specific Strands
           ^
SyntaxError: invalid syntax

И наоборот, если я укажу «Количество специфических цепей», как показано ниже, регрессия работает:

test_results = smf.ols('input_csv.iloc[:,1] ~ Age',data = input_csv).fit()
test_results.summary()

Regression Results

Кто-нибудь знает, почему это так?Это только из-за того, как были написаны Statsmodels?Есть ли альтернатива для указания зависимой переменной для регрессионного анализа, которая не включает iloc или loc?

1 Ответ

0 голосов
/ 17 октября 2018

Это связано со способом написания синтаксического анализатора формул patsy: см. эту ссылку для получения дополнительной информации

Однако авторы patsy подумали об этой проблеме: (цитируется здесь )

Однако такая гибкость создает проблемы в одном случае - поскольку мы интерпретируем все, что вы пишете между знаками +, как код Python, вы делаетена самом деле нужно написать действительный код Python.И это может быть непросто, если в именах переменных есть забавные символы, такие как пробел или пунктуация.К счастью, у patsy есть встроенное «преобразование», называемое Q () , которое позволяет вам «заключать в кавычки» такие переменные

Следовательно, в вашем случае вы должны написать:

smf.ols('Q("Count of Specific Strands") ~ Age',data = input_csv).fit()
...