我一直在尝试使用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
sns.lmplot(x='Age',y='Count of Specific Strands',data = input_csv)
<seaborn.axisgrid.FacetGrid at 0x2800985b710>
但是,如果我尝试使用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()
有人知道这是为什么吗?仅仅是因为Statsmodels是如何编写的?是否有其他方法可以指定不涉及iloc或loc的因变量进行回归分析?
答案 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()