statsmodels线性回归 - patsy公式包含所有预测变量
假设我有一个数据表(我们叫它 DF
),其中 y
是我想要预测的变量,而 x1, x2, x3
是用来预测的变量。在 R 语言中,我可以用下面的代码来建立一个线性模型,这里的 .
会自动把所有的独立变量都包含进模型里:
# R code for fitting linear model
result = lm(y ~ ., data=DF)
我现在想用 statsmodels 这个库来做同样的事情,但我不知道怎么用 patsy 的公式来实现,而不需要一个个把所有独立变量都写进去。请问 patsy 有没有类似于 R 语言中 .
的功能呢?我在 patsy 的文档里找了很久也没找到相关的信息。
3 个回答
7
因为这个功能还没有被加入到 patsy
里,我写了一个小函数,当我需要用 statsmodels
模型处理所有列(可以选择性地排除某些列)时就会调用它。
def ols_formula(df, dependent_var, *excluded_cols):
'''
Generates the R style formula for statsmodels (patsy) given
the dataframe, dependent variable and optional excluded columns
as strings
'''
df_columns = list(df.columns.values)
df_columns.remove(dependent_var)
for col in excluded_cols:
df_columns.remove(col)
return dependent_var + ' ~ ' + ' + '.join(df_columns)
举个例子,如果有一个叫 df
的数据表,里面有 y, x1, x2, x3
这些列,运行 ols_formula(df, 'y', 'x3')
就会返回 'y ~ x1 + x2'
。
36
我在patsy的文档中也没有找到.
的等价物。不过,虽然它不够简洁,但在Python中提供了强大的字符串处理功能。所以,你可以通过以下方式获取包含DF
中所有变量列的公式:
all_columns = "+".join(DF.columns - ["y"])
这样在你的情况下会得到x1+x2+x3
。最后,你可以使用y
创建一个字符串公式,并将其传递给任何拟合程序。
my_formula = "y~" + all_columns
result = lm(formula=my_formula, data=DF)
12
不,这个功能在patsy里还没有,真可惜。你可以看看这个问题。