modèle statistique régression linéaire-formule patsy pour inclure tous les prédicteurs dans le modèle

Dire que j'ai un dataframe (appelons DF) où y est la variable dépendante et x1, x2, x3 mes variables indépendantes. Dans R je peux ajuster un modèle linéaire en utilisant le code suivant, et le . comprendra toutes mes variables indépendantes dans le modèle:

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

Je ne peux pas comprendre comment faire cela avec statsmodels en utilisant des formules patsy sans ajouter explicitement toutes mes variables indépendantes à la formule. Est-ce que patsy a l'équivalent de R <!--4? Je Je n'ai pas eu de chance de le trouver dans la documentation de patsy.

12
demandé sur Greg 2014-03-13 23:05:25

3 réponses

Non cela n'existe pas encore à patsy, malheureusement. Voir cette problème.

5
répondu jseabold 2014-03-14 15:19:48

je n'ai pas trouvé . équivalent dans la documentation patsy soit. Mais ce qui lui manque en concision, il peut le compenser en donnant de fortes manipulations de cordes en Python. Ainsi, vous pouvez obtenir la formule impliquant toutes les colonnes variables dans DF en utilisant

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

cela donne x1+x2+x3 dans votre cas. Enfin, vous pouvez créer une formule de chaîne de caractères en utilisant y et passer à une procédure d'application

my_formula = "y~" + all_columns
result = lm(formula=my_formula, data=DF)
16
répondu Sudeep Juvekar 2014-03-13 19:15:07

Comme ce n'est pas encore inclus dans patsy, j'ai écrit une petite fonction que j'appelle quand j'ai besoin de courir statsmodels modèles avec toutes les colonnes (éventuellement avec des exceptions)

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)

par exemple, Pour un dataframe appelé df avec des colonnes y, x1, x2, x3, running ols_formula(df, 'y', 'x3') retourne 'y ~ x1 + x2'

3
répondu emredjan 2017-07-01 23:09:57