pd.get_dummies 是否与在 statsmodel ols 中简单地包含分类变量相同?

Is pd.get_dummies the same as simply including categorical variable in statsmodel ols?

我有一个实验的面板数据,如下所示:

account usage yearmonth pre/post group
1 121 oct 2019 pre control
1 124 Nov 2019 post control
2 120 oct 2019 pre treatment
2 118 nov 2019 post treatment

在我的数据中,我有大约 50 个月和更多的帐户。

我正在使用统计模型 formula/patsy 到 运行 一个 ols 来评估结果。

这不是我使用的确切模型规格,但为了问题的缘故:

smf.ols("usage ~ C(group, Treatment('control'))* C(pre/post, Treatment(pre)) + yearmonth), df).fit()

我的问题是,当我在公式中包含 'yearmonth' 变量时,statsmodel 是否将其视为虚拟变量,或者我是否需要先在其上使用 pd.get_dummies 然后使用此模型:

 smf.ols("usage ~ C(group, Treatment('control'))* C(pre/post, Treatment(pre)) + oct 2019 + nov 2019), df).fit()

如果我使用后者,我的公式将会非常长。那么我需要那样做吗?

谢谢!

如果该列是文本列,我相信默认的分类编码是 Treatment。在这种情况下 Treatement returns K-1 类别,这样您的 yearmonth 值之一将被视为基线,您将看到所有其他日期的系数,除了一。这个可以详细看here.

pd.get_dummies 默认情况下不会这样做。它将为每个分类值创建列,这意味着您将使用此方法获得一个额外的列。

如果您想使用 pd.get_dummies,您需要设置 drop_first=True 参数。您可以找到文档 here

简而言之,w/the 第一种方法没有错,因为它实际上是在幕后找假人,值得注意的是它是 K-1,而不是 K 类别。

get_dummies 为每个分类值创建一个列。您将结果连接到数据框中并删除类别列。 get_dummies 允许分类排名。而 df['category'].astype(category) 没有。您可以使用 labelEncoder 设置独特的类别,不需要像男性和女性那样排名。