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

sup*_*m95 4 python plot regression statsmodels seaborn

我一直在尝试使用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
Run Code Online (Sandbox Code Playgroud)

CSV图

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

在此处输入图片说明

但是,如果我尝试使用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
Run Code Online (Sandbox Code Playgroud)

相反,如果我指定“特定股数”,如下所示,则回归有效:

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

回归结果

有人知道为什么吗?仅仅是因为Statsmodels是如何编写的?是否可以指定不涉及iloc或loc的回归分析的因变量?

Diz*_*ahi 6

这是由于公式解析器patsy的编写方式所致:有关更多信息,请参见此链接。

patsy但是,的作者已经想到了这个问题:(从此处引用)

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

因此,根据您的情况,您应该能够编写:

smf.ols('Q("Count of Specific Strands") ~ Age',data = input_csv).fit()
Run Code Online (Sandbox Code Playgroud)