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

30 投票
3 回答
17291 浏览
提问于 2025-04-17 22:11

假设我有一个数据表(我们叫它 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里还没有,真可惜。你可以看看这个问题

撰写回答