statsmodels线性回归 - 包含模型中所有预测变量的patsy公式

时间:2014-03-13 19:05:25

标签: python r statsmodels

假设我有一个数据框(让我们称之为DF),其中y是因变量,x1, x2, x3是我的自变量。在R中,我可以使用以下代码拟合线性模型,.将包含模型中的所有自变量:

# R code for fitting linear model
result = lm(y ~ ., data=DF)

我无法使用patsy公式找出如何使用statsmodel执行此操作,而无需将所有自变量显式添加到公式中。 patsy是否具有R' .的等价物?我没有在patsy文档中找到它的运气。

3 个答案:

答案 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'