#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 для установки уникальных категорий, которые не требуют ранжирования, например, для мужчин и женщин.