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 设置独特的类别,不需要像男性和女性那样排名。
我有一个实验的面板数据,如下所示:
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 设置独特的类别,不需要像男性和女性那样排名。