Является ли pd.get_dummies таким же, как простое включение категориальной переменной в ols statsmodel?

#python #linear-regression #statsmodels #dummy-variable #panel-data

#python #линейная регрессия #статсмодели #фиктивная переменная #панельные данные

Вопрос:

У меня есть панельные данные из эксперимента, который выглядит следующим образом:

Учетная запись использование год pre / post Группа
1 121 октябрь 2019 предварительно управление
1 124 Ноябрь 2019 Публикация управление
2 120 октябрь 2019 предварительно лечение
2 118 ноябрь 2019 Публикация лечение

В моих данных у меня есть около 50 месяцев и намного больше учетных записей.

Я использую формулу statsmodel / 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()
 

Если бы я использовал последнее, моя формула была бы очень длинной. Так нужно ли мне делать это таким образом?

Спасибо!

Ответ №1:

Я считаю, что категориальная кодировка по умолчанию Treatment используется, если столбец является текстовым столбцом. В этом случае Treatement возвращает K-1 категории, так что одно из ваших yearmonth значений будет считаться базовым, и вы увидите коэффициенты для всех других дат, кроме этой. Вы можете увидеть это подробно здесь.

pd.get_dummies по умолчанию это не действует таким образом. Он создаст столбцы для каждого категориального значения, что означает, что при использовании этого метода у вас будет один дополнительный столбец.

Если вы хотите использовать pd.get_dummies , вам нужно будет установить drop_first=True paramaeter. Вы можете найти документацию здесь

Короче говоря, в первом подходе нет ничего плохого, поскольку на самом деле это получение манекенов за кулисами, просто стоит отметить, что это K-1 , а не K категории.

Комментарии:

1. Спасибо за четкое объяснение. Это имеет смысл. Я предполагаю, что мой следующий вопрос будет: есть ли способ получить K категорий без необходимости вводить каждый отдельный столбец, созданный pd.get_dummies?

2. Они будут распечатаны в сводке

3. Извини, Крис, я не очень четко сформулировал свой вопрос. Моя проблема в том, что после того, как я использовал pd.get_dummies, он генерирует около 40 новых столбцов в моем df. Если я захочу включить эти 40 столбцов в свою формулу statsmodel, мне пришлось бы потратить много времени на ввод заголовка каждого столбца (месяцы). Есть ли более быстрый способ включить все эти месяцы, сгенерированные pd.get_dummies, в формулу statsmodel?

Ответ №2:

get_dummies создают столбец для каждого категориального значения. вы объединяете результаты в свой фрейм данных и удаляете столбец категории. get_dummies позволяет использовать категориальный ранг. в то время как df[‘category’].astype(категория) этого не делает. вы можете использовать LabelEncoder для установки уникальных категорий, которые не требуют ранжирования, например, для мужчин и женщин.