为啥 Statsmodels OLS 不支持在包含多个单词的列中读取?
Posted
技术标签:
【中文标题】为啥 Statsmodels OLS 不支持在包含多个单词的列中读取?【英文标题】:Why does Statsmodels OLS doesn't support reading in columns with multiple words?为什么 Statsmodels OLS 不支持在包含多个单词的列中读取? 【发布时间】:2019-03-22 12:29:37 【问题描述】:我一直在尝试使用 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 的回归分析的因变量?
【问题讨论】:
【参考方案1】:这是由于公式解析器patsy
的编写方式:参见this link for more information
patsy
的作者却想到了这个问题:(引自here)
不过,这种灵活性在一种情况下确实会产生问题——因为我们 将您在 + 号之间写的任何内容解释为 Python 代码, 实际上,您确实必须编写有效的 Python 代码。这可能很棘手 如果你的变量名中有有趣的字符,比如空格 或标点符号。幸运的是,patsy 有一个内置的“转换” 称为Q(),它可以让你“引用”这些变量
因此,在你的情况下,你应该能够写:
smf.ols('Q("Count of Specific Strands") ~ Age',data = input_csv).fit()
【讨论】:
以上是关于为啥 Statsmodels OLS 不支持在包含多个单词的列中读取?的主要内容,如果未能解决你的问题,请参考以下文章
为啥当我使用 statsmodels 进行 OLS 和使用 scikit 进行 PooledOLS 时得到相同的结果?
为啥我只能从 statsmodels OLS 拟合中获得一个参数
使用 statsmodels 忽略多个 OLS 回归中的缺失值
使用 statsmodels.formula.api 中的 ols - 如何删除常数项?