假设我有一个数据框(让我们称之为DF
),其中y
是因变量,x1, x2, x3
是我的自变量。在R中,我可以使用以下代码拟合线性模型,.
将包含模型中的所有自变量:
# R code for fitting linear model
result = lm(y ~ ., data=DF)
我无法使用patsy公式找出如何使用statsmodel执行此操作,而无需将所有自变量显式添加到公式中。 patsy是否具有R' .
的等价物?我没有在patsy文档中找到它的运气。
答案 0 :(得分:18)
我还没有在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)
答案 1 :(得分:6)
不幸的是,这还不存在于patsy中。请参阅此issue。
答案 2 :(得分:4)
由于这仍未包含在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'