Statsmodels linear regression - patsy formula для включения всех предикторов в модель

Скажем, у меня есть фрейм данных (пусть его называют DF), где y - зависимая переменная, а x1, x2, x3 - мои независимые переменные. В R я могу поместить линейную модель, используя следующий код, а . будет включать в себя все мои независимые переменные в модели:

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

Я не могу понять, как это сделать с помощью statsmodels, используя формулы patcy без явного добавления всех моих независимых переменных в формулу. Имеет ли patsy эквивалент R .? Мне не повезло найти его в патчей документации.

Ответ 1

Нет, к сожалению, этого еще не существует. Смотрите issue.

Ответ 2

Я не нашел эквивалент . в документации по патентам. Но то, чего ему не хватает в лаконичности, он может компенсировать, давая сильные манипуляции с строками в Python. Таким образом, вы можете получить формулу, включающую все столбцы переменных в DF, используя

all_columns = "+".join(DF.columns - ["y"])

Это дает x1+x2+x3 в вашем случае. Наконец, вы можете создать формулу строки с помощью y и передать ее в любую процедуру подбора

my_formula = "y~" + all_columns
result = lm(formula=my_formula, data=DF)

Ответ 3

Поскольку это еще не включено в 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'