为什么Statsmodels OLS不支持读取包含多个单词的列?

时间:2018-10-17 18:30:42

标签: python plot regression seaborn statsmodels

我一直在尝试使用Seaborn的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,则在输入“特定链数”作为我的因变量时遇到错误(我只列出了错误的最后几行):

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 :(得分:5)

这是由于公式解析器patsy的编写方式所致:请参见this link for more information

patsy的作者已经想到了这个问题:(引自here

  

不过,这种灵活性确实会在某些情况下造成问题-因为我们   将您在+号之间编写的内容解释为Python代码,   实际上,您确实必须编写有效的Python代码。这可能很棘手   如果您的变量名中包含有趣的字符,例如空格   或标点符号。幸运的是,patsy具有内置的“转换”功能   称为Q(),可让您“引用”此类变量

因此,就您而言,您应该能够写:

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